본문으로 건너뛰기
Version: 6.0

릴리스 노트

WebPlanetKit 6.0의 릴리스 노트입니다.

WebPlanetKit 6.0

릴리스 일자: 2026-08-03

명확성과 일관성을 높이기 위해 API 이름 개선

가독성, 일관성, 도입 편의성을 높이기 위해 일부 API 이름을 개선했습니다.

API

변경
  • MakeCallParams data class 1-to-1 call

    PreviousWebPlanetKit 6.0
    var pauseVideoByPageHidden?: booleanvar pauseMyVideoByPageHidden?: boolean
  • VerifyCallParams data class 1-to-1 call

    PreviousWebPlanetKit 6.0
    var pauseVideoByPageHidden?: booleanvar pauseMyVideoByPageHidden?: boolean
  • ConferenceParams data class Group call

    PreviousWebPlanetKit 6.0
    var pauseVideoByPageHidden?: booleanvar pauseMyVideoByPageHidden?: boolean
  • PeerInfo data class Group call

    PreviousWebPlanetKit 6.0
    var videoRequested: booleanvar isVideoRequested: boolean
    var micMuted: booleanvar isMicMuted: boolean
    var vSsrc: numbervar videoSsrc: number
    var dSsrc: numbervar dataSsrc: number
  • DisconnectReason data class 1-to-1 callGroup call

    PreviousWebPlanetKit 6.0
    var strCode: stringvar codeString: string
  • Call class 1-to-1 call

    PreviousWebPlanetKit 6.0
    function waitForVirtualBackgroundInitialization()function waitForVirtualBackgroundReady()
    function setVideoMirror(mirror, videoElements)function setVideoMirror(isMirror, videoElements)
  • Conference class Group call

    PreviousWebPlanetKit 6.0
    function waitForVirtualBackgroundInitialization()function waitForVirtualBackgroundReady()
    function setVideoMirror(mirror, videoElements)function setVideoMirror(isMirror, videoElements)
  • MediaStreamManager class 1-to-1 callGroup call

    PreviousWebPlanetKit 6.0
    function waitForVirtualBackgroundInitialization()function waitForVirtualBackgroundReady()
  • Util class 1-to-1 callGroup call

    PreviousWebPlanetKit 6.0
    function setVideoMirror(mirror, videoElements)function setVideoMirror(isMirror, videoElements)
  • VIDEO_PAUSE_REASON enum 1-to-1 callGroup call

    PreviousWebPlanetKit 6.0
    PLANETKIT_VIDEO_PAUSE_REASON_BY_USERBY_USER
    PLANETKIT_VIDEO_PAUSE_REASON_BY_INTERRUPTBY_INTERRUPT
    PLANETKIT_VIDEO_PAUSE_REASON_UNDEFINEDUNDEFINED
    PLANETKIT_VIDEO_PAUSE_REASON_INTERNALINTERNAL
    PLANETKIT_VIDEO_PAUSE_REASON_ENABLE_VIDEO_RESPONSEENABLE_VIDEO_RESPONSE
    PLANETKIT_VIDEO_PAUSE_REASON_CAMERA_INACTIVECAMERA_INACTIVE
  • KIT_DISCONNECT_REASON enum 1-to-1 callGroup call

    PreviousWebPlanetKit 6.0
    PLANETKIT_DISCONNECT_REASON_NORMALNORMAL
    PLANETKIT_DISCONNECT_REASON_DECLINEDECLINE
    PLANETKIT_DISCONNECT_REASON_CELL_CALLCELL_CALL
    PLANETKIT_DISCONNECT_REASON_INTERNAL_ERRORINTERNAL_ERROR
    PLANETKIT_DISCONNECT_REASON_USER_ERRORUSER_ERROR
    PLANETKIT_DISCONNECT_REASON_INTERNAL_KIT_ERRORINTERNAL_KIT_ERROR
    PLANETKIT_DISCONNECT_REASON_AUDIO_TX_NO_SRCAUDIO_TX_NO_SRC
    PLANETKIT_DISCONNECT_REASON_CANCELCANCEL
    PLANETKIT_DISCONNECT_REASON_BUSYBUSY
    PLANETKIT_DISCONNECT_REASON_NOANSWERNOANSWER
    PLANETKIT_DISCONNECT_REASON_ALREADY_GOT_A_CALLALREADY_GOT_A_CALL
    PLANETKIT_DISCONNECT_REASON_MULTIDEV_IN_USEMULTIDEV_IN_USE
    PLANETKIT_DISCONNECT_REASON_MULTIDEV_ANSWERMULTIDEV_ANSWER
    PLANETKIT_DISCONNECT_REASON_MULTIDEV_DECLINEMULTIDEV_DECLINE
    PLANETKIT_DISCONNECT_REASON_MAX_CALL_TIME_EXCEEDEDMAX_CALL_TIME_EXCEEDED
    PLANETKIT_DISCONNECT_REASON_NETWORK_UNSTABLENETWORK_UNSTABLE
    PLANETKIT_DISCONNECT_REASON_PUSH_ERRORPUSH_ERROR
    PLANETKIT_DISCONNECT_REASON_AUTH_ERRORAUTH_ERROR
    PLANETKIT_DISCONNECT_REASON_RELEASED_CALLRELEASED_CALL
    PLANETKIT_DISCONNECT_REASON_SERVER_INTERNAL_ERRORSERVER_INTERNAL_ERROR
    PLANETKIT_DISCONNECT_REASON_UNAVAILABLE_NETWORKUNAVAILABLE_NETWORK
    PLANETKIT_DISCONNECT_REASON_APP_DESTROYAPP_DESTROY
    PLANETKIT_DISCONNECT_REASON_SYSTEM_SLEEPSYSTEM_SLEEP
    PLANETKIT_DISCONNECT_REASON_SYSTEM_LOGOFFSYSTEM_LOGOFF
    PLANETKIT_DISCONNECT_REASON_MTU_EXCEEDEDMTU_EXCEEDED
    PLANETKIT_DISCONNECT_REASON_ROOM_IS_FULLROOM_IS_FULL
    PLANETKIT_DISCONNECT_REASON_ALONE_KICK_OUTALONE_KICK_OUT
    PLANETKIT_DISCONNECT_REASON_ROOM_NOT_FOUNDROOM_NOT_FOUND
    PLANETKIT_DISCONNECT_REASON_SERVICE_ACCESS_TOKEN_ERRORSERVICE_ACCESS_TOKEN_ERROR
    PLANETKIT_DISCONNECT_REASON_SERVICE_INVALID_IDSERVICE_INVALID_ID
    PLANETKIT_DISCONNECT_REASON_SERVICE_MAINTENANCESERVICE_MAINTENANCE
    PLANETKIT_DISCONNECT_REASON_SERVICE_BUSYSERVICE_BUSY
    PLANETKIT_DISCONNECT_REASON_SERVICE_INTERNAL_ERRORSERVICE_INTERNAL_ERROR
    PLANETKIT_DISCONNECT_REASON_SERVICE_HTTP_ERRORSERVICE_HTTP_ERROR
    PLANETKIT_DISCONNECT_REASON_SERVICE_HTTP_CONNECTION_TIME_OUTSERVICE_HTTP_CONNECTION_TIME_OUT
    PLANETKIT_DISCONNECT_REASON_SERVICE_INCOMPATIBLE_PLANETKIT_VERSERVICE_INCOMPATIBLE_PLANETKIT_VER
    PLANETKIT_DISCONNECT_REASON_SERVICE_TOO_MANY_REQUESTSSERVICE_TOO_MANY_REQUESTS
    PLANETKIT_DISCONNECT_REASON_WEB_RTC_ABORTWEB_RTC_ABORT
    PLANETKIT_DISCONNECT_REASON_WEB_RTC_NOT_ALLOWEDWEB_RTC_NOT_ALLOWED
    PLANETKIT_DISCONNECT_REASON_WEB_RTC_NOT_FOUNDWEB_RTC_NOT_FOUND
    PLANETKIT_DISCONNECT_REASON_WEB_RTC_NOT_READABLEWEB_RTC_NOT_READABLE
    PLANETKIT_DISCONNECT_REASON_WEB_RTC_OVERCONSTRAINEDWEB_RTC_OVERCONSTRAINED
    PLANETKIT_DISCONNECT_REASON_WEB_RTC_SECURITY_ERRORWEB_RTC_SECURITY_ERROR
    PLANETKIT_DISCONNECT_REASON_WEB_RTC_TYPE_ERRORWEB_RTC_TYPE_ERROR
    PLANETKIT_DISCONNECT_REASON_WEB_NO_MEDIA_PACKETWEB_NO_MEDIA_PACKET
    PLANETKIT_DISCONNECT_REASON_WEB_CALL_CONNECT_FAIL_BY_SERVERWEB_CALL_CONNECT_FAIL_BY_SERVER
    PLANETKIT_DISCONNECT_REASON_WEB_CALL_CONNECT_FAIL_BY_CLIENTWEB_CALL_CONNECT_FAIL_BY_CLIENT
    PLANETKIT_DISCONNECT_REASON_WEB_SIGNALING_UNEXPECTED_DISCONNECTEDWEB_SIGNALING_UNEXPECTED_DISCONNECTED

micOn이 false일 때 마이크 접근 생략

micOn: false로 통화를 시작하면 통화 시작 시점에 더 이상 마이크에 접근하거나 마이크 권한을 요청하지 않습니다. 마이크에는 통화 중 사용자가 음 소거를 해제할 때만 접근합니다. 권한이 필요한 경우 그 시점에 브라우저 권한 요청 창이 표시됩니다.

MyMediaStatus 스냅샷 API 및 미디어 이벤트 대리자(delegate) 콜백 추가

로컬 사용자의 현재 오디오 음 소거, 비디오, 화면 공유 상태를 반환하는 동기식 스냅샷 API를 추가했습니다. 이제 애플리케이션은 현재 상태만 필요한 경우(예: evtConnected 직후 통화 UI를 렌더링할 때) 개별 이벤트에서 이 값들을 추적할 필요가 없습니다.

스냅샷 API와 함께, 로컬 사용자의 오디오 음 소거 상태, 비디오 상태, 화면 공유 상태가 변경될 때마다 애플리케이션에 알리는 네 개의 이벤트 대리자 콜백을 추가했습니다. 이 콜백들은 스냅샷 API와 함께 로컬 미디어 상태를 읽고 구독하는 일관된 방법을 제공합니다. 기존 evtMyScreenShareStoppedOnBrowser 콜백은 삭제했습니다. 대신 기존 콜백 및 그 외 모든 화면 공유 상태 전환을 포함하는 evtMyScreenShareStateUpdated를 사용하세요.

API

추가
  • Call class 1-to-1 call

    • function getMyMediaStatus()
  • Conference class Group call

    • function getMyMediaStatus()
  • MakeCallDelegate protocol 1-to-1 call

    • evtMyAudioMuted()
    • evtMyAudioUnmuted()
    • evtMyVideoStatusUpdated(myVideoStatus: MyVideoStatus)
    • evtMyScreenShareStateUpdated(state: MY_SCREEN_SHARE_STATE)
  • VerifyCallDelegate protocol 1-to-1 call

    • evtMyAudioMuted()
    • evtMyAudioUnmuted()
    • evtMyVideoStatusUpdated(myVideoStatus: MyVideoStatus)
    • evtMyScreenShareStateUpdated(state: MY_SCREEN_SHARE_STATE)
  • ConferenceDelegate protocol Group call

    • evtMyAudioMuted()
    • evtMyAudioUnmuted()
    • evtMyVideoStatusUpdated(myVideoStatus: MyVideoStatus)
    • evtMyScreenShareStateUpdated(state: MY_SCREEN_SHARE_STATE)
  • MyMediaStatus data class 1-to-1 callGroup call

  • MyVideoStatus data class 1-to-1 callGroup call

  • MY_SCREEN_SHARE_STATE enum 1-to-1 callGroup call

삭제
  • MakeCallDelegate protocol 1-to-1 call

    • evtMyScreenShareStoppedOnBrowser()evtMyScreenShareStateUpdated(state)로 대체됨
  • VerifyCallDelegate protocol 1-to-1 call

    • evtMyScreenShareStoppedOnBrowser()evtMyScreenShareStateUpdated(state)로 대체됨
  • ConferenceDelegate protocol Group call

    • evtMyScreenShareStoppedOnBrowser()evtMyScreenShareStateUpdated(state)로 대체됨

예제 코드

로컬 사용자의 현재 미디어 상태를 읽는 예제 코드입니다.

const status = planetKit.getMyMediaStatus();
if (status) {
console.log("Mic muted:", status.isMyAudioMuted);
console.log("Video state:", status.myVideoStatus.state);
console.log("Screen share state:", status.screenShareState);
}

Document Picture-in-Picture API 추가

로컬 사용자가 전체 통화 UI를 독립적인 플로팅 브라우저 창으로 분리할 수 있는 Document Picture-in-Picture 기능을 추가했습니다. 애플리케이션은 여러 개의 비디오 요소, 컨트롤 요소, 레이아웃을 포함한 사용자 지정 HTML을 PiP 창 내부에 렌더링할 수 있습니다.

SDK가 비어 있는 컨테이너 요소로 PiP 창을 생성하면, 애플리케이션에서 그 컨테이너 안에 통화 UI를 렌더링하면 됩니다. PiP 창은 통화가 종료될 때, 사용자가 PiP 창을 닫을 때, 또는 closeDocumentPip()가 호출될 때 자동으로 닫힙니다.

API

추가
  • Call class 1-to-1 call

    • static function isDocumentPipSupported()
    • function openDocumentPip(options?: DocumentPipOptions)
    • function closeDocumentPip()
    • function getDocumentPipWindow()
    • function getDocumentPipContainer()
  • Conference class Group call

    • static function isDocumentPipSupported()
    • function openDocumentPip(options?: DocumentPipOptions)
    • function closeDocumentPip()
    • function getDocumentPipWindow()
    • function getDocumentPipContainer()
  • MakeCallDelegate protocol 1-to-1 call

    • evtPipOpened(result: DocumentPipResult)
    • evtPipClosed(info: DocumentPipClosedInfo)
  • VerifyCallDelegate protocol 1-to-1 call

    • evtPipOpened(result: DocumentPipResult)
    • evtPipClosed(info: DocumentPipClosedInfo)
  • ConferenceDelegate protocol Group call

    • evtPipOpened(result: DocumentPipResult)
    • evtPipClosed(info: DocumentPipClosedInfo)
  • DocumentPipOptions data class 1-to-1 callGroup call

  • DocumentPipResult data class 1-to-1 callGroup call

  • DocumentPipClosedReason data class 1-to-1 callGroup call

  • DocumentPipClosedInfo data class 1-to-1 callGroup call

예제 코드

브라우저의 enterpictureinpicture 미디어 세션 액션에 대응해 Document PiP를 여는 예제입니다.

navigator.mediaSession.setActionHandler("enterpictureinpicture", async () => {
const { pipWindow, container } = await planetKit.openDocumentPip();

const video = pipWindow.document.createElement("video");
video.srcObject = planetKit.getMyMediaStream();
video.autoplay = true;
container.appendChild(video);
});

수신 통화에서 isRecordOnCloudEnabled() 제공

1대1 통화에서 수신자가 통화를 수락하기 전에 발신자가 클라우드 레코딩을 요청했는지 확인할 수 있는 API를 추가했습니다. 이 값은 verifyCallccParam에서 파싱되며, 일반적으로 통화 수락 여부를 결정하기 전에 evtVerified 콜백 내부에서 확인합니다.

연결된 통화 중 실제 레코딩 활성화 상태는 기존 isRecordOnCloudActivated() API를 통해 계속 확인할 수 있습니다.

API

추가
  • Call class 1-to-1 call

    • function isRecordOnCloudEnabled()

예제 코드

planetKit.verifyCall({
...,
delegate: {
evtVerified: () => {
if (planetKit.isRecordOnCloudEnabled()) {
// Inform the user that the caller has requested cloud recording.
}
},
},
});

오디오 통화 중 피어의 비디오 활성화 처리 단순화

이제 오디오 통화 중 피어가 비디오를 활성화하면 WebPlanetKit은 항상 로컬 사용자의 비디오를 일시 중지 상태로 설정합니다. 애플리케이션은 더 이상 통화 시작 시 PAUSESEND 모드 중에서 선택할 필요가 없습니다.

responseOnEnableVideo 파라미터와 RESPONSE_ENABLE_VIDEO 열거형을 삭제했습니다. 관련 이벤트 대리자(delegate) 콜백은 실제 동작을 반영하도록 evtVideoEnabledByPeerAndMyVideoPaused()로 이름을 변경했습니다.

API

변경
  • MakeCallDelegate protocol 1-to-1 call

    PreviousWebPlanetKit 6.0
    evtVideoEnabledByPeer()evtVideoEnabledByPeerAndMyVideoPaused()
  • VerifyCallDelegate protocol 1-to-1 call

    PreviousWebPlanetKit 6.0
    evtVideoEnabledByPeer()evtVideoEnabledByPeerAndMyVideoPaused()
삭제
  • MakeCallParams data class 1-to-1 call

    • var responseOnEnableVideo?: RESPONSE_ENABLE_VIDEO
  • VerifyCallParams data class 1-to-1 call

    • var responseOnEnableVideo?: RESPONSE_ENABLE_VIDEO
  • RESPONSE_ENABLE_VIDEO enum 1-to-1 call

마이크/카메라 권한 변경 시 통화 유지

이제 WebPlanetKit은 통화 도중 브라우저의 마이크 또는 카메라 권한이 변경되어도 통화를 계속 유지합니다. 사용자가 권한을 취소하면 SDK는 해당 미디어 트랙을 무음 플레이스홀더로 자동으로 교체해 통화가 끊기지 않도록 합니다. 권한이 다시 허용되면 SDK는 실제 장치 트랙을 자동으로 복원합니다.

또한 권한 상태가 변경될 때마다 애플리케이션에 알리는 새로운 이벤트 대리자(delegate) 콜백을 추가했습니다.

이제 권한 상태가 통합 통화 이벤트 대리자를 통해 전달되므로, 5.5.0부터 MediaStreamManager가 제공하던 setupDevicePermissionMonitoring, cleanupDevicePermissionMonitoring, getDevicePermissionState 메서드를 삭제했습니다.

API

추가
  • MakeCallDelegate protocol 1-to-1 call

    • evtMicrophonePermissionStateUpdated(state: PERMISSION_STATE)
    • evtCameraPermissionStateUpdated(state: PERMISSION_STATE)
  • VerifyCallDelegate protocol 1-to-1 call

    • evtMicrophonePermissionStateUpdated(state: PERMISSION_STATE)
    • evtCameraPermissionStateUpdated(state: PERMISSION_STATE)
  • ConferenceDelegate protocol Group call

    • evtMicrophonePermissionStateUpdated(state: PERMISSION_STATE)
    • evtCameraPermissionStateUpdated(state: PERMISSION_STATE)
  • PERMISSION_STATE enum 1-to-1 callGroup call

삭제
  • MediaStreamManager class 1-to-1 callGroup call

    • function setupDevicePermissionMonitoring(onPermissionUpdate)
    • function cleanupDevicePermissionMonitoring()
    • function getDevicePermissionState(deviceType)

예제 코드

마이크 및 카메라 권한 변경 구독 예제입니다.

planetKit.makeCall({
...,
delegate: {
evtMicrophonePermissionStateUpdated: (state) => {
if (state === PERMISSION_STATE.DENIED) {
// Show a banner asking the user to restore microphone permission.
}
},
evtCameraPermissionStateUpdated: (state) => {
if (state === PERMISSION_STATE.DENIED) {
// Show a banner asking the user to restore camera permission.
}
},
},
});

MediaDeviceId.audioOutput을 통한 초기 스피커 지정 지원

통화를 시작할 때 초기 오디오 출력(스피커) 장치를 지정하는 기능을 추가했습니다. 기존에는 애플리케이션이 통화가 연결될 때까지 기다린 다음 changeAudioOutputDevice()를 호출해 특정 스피커를 선택해야 했습니다. 이제 기존 audioInputvideoInput 필드와 함께 MediaDeviceId.audioOutput을 통해 통화 시작 시점에 스피커를 설정할 수 있습니다.

이 typedef 내 일관성을 위해 기존 입력 필드의 이름을 변경했습니다.

  • inputAudioaudioInput
  • inputVideovideoInput

HTMLMediaElement.setSinkId()를 지원하지 않는 Safari에서는 audioOutput을 설정해도 통화에 영향을 주지 않습니다. SDK는 기본 스피커를 사용하며, 통화는 정상적으로 진행됩니다.

API

추가
  • MediaDeviceId data class 1-to-1 callGroup call

    • var audioOutput: string
변경
  • MediaDeviceId data class 1-to-1 callGroup call

    PreviousWebPlanetKit 6.0
    var inputAudio: stringvar audioInput: string
    var inputVideo: stringvar videoInput: string

예제 코드

통화 시작 시 초기 스피커, 마이크, 카메라 설정 예제입니다.

const audioInputs = mediaStreamManager.getAudioInputDevices();
const videoInputs = mediaStreamManager.getVideoInputDevices();
const audioOutputs = mediaStreamManager.getAudioOutputDevices();

planetKit.makeCall({
...,
mediaDeviceId: {
audioInput: audioInputs[0].deviceId,
videoInput: videoInputs[0].deviceId,
audioOutput: audioOutputs[0].deviceId,
},
});

입력 장치 센티널 값 'empty''none'으로 변경

changeAudioInputDevice()changeVideoInputDevice()는 이제 "장치 없음" 값(사용자에게 마이크나 카메라가 없을 때 사용하는 무음 플레이스홀더)으로 'none'을 받습니다. 'empty'를 사용하던 애플리케이션은 'none'으로 업데이트해야 합니다. 동작은 변경되지 않으며, 활성 트랙이 무음 플레이스홀더로 교체됩니다.

API

변경
  • Call class 1-to-1 call

    PreviousWebPlanetKit 6.0
    function changeAudioInputDevice('empty')function changeAudioInputDevice('none')
    function changeVideoInputDevice('empty')function changeVideoInputDevice('none')
  • Conference class Group call

    PreviousWebPlanetKit 6.0
    function changeAudioInputDevice('empty')function changeAudioInputDevice('none')
    function changeVideoInputDevice('empty')function changeVideoInputDevice('none')