릴리스 노트
WebPlanetKit 6.0의 릴리스 노트입니다.
WebPlanetKit 6.0
릴리스 일자: 2026-08-03
명확성과 일관성을 높이기 위해 API 이름 개선
가독성, 일관성, 도입 편의성을 높이기 위해 일부 API 이름을 개선했습니다.
API
변경
-
MakeCallParamsdata class 1-to-1 callPrevious WebPlanetKit 6.0 var pauseVideoByPageHidden?: booleanvar pauseMyVideoByPageHidden?: boolean -
VerifyCallParamsdata class 1-to-1 callPrevious WebPlanetKit 6.0 var pauseVideoByPageHidden?: booleanvar pauseMyVideoByPageHidden?: boolean -
ConferenceParamsdata class Group callPrevious WebPlanetKit 6.0 var pauseVideoByPageHidden?: booleanvar pauseMyVideoByPageHidden?: boolean -
PeerInfodata class Group callPrevious WebPlanetKit 6.0 var videoRequested: booleanvar isVideoRequested: booleanvar micMuted: booleanvar isMicMuted: booleanvar vSsrc: numbervar videoSsrc: numbervar dSsrc: numbervar dataSsrc: number -
DisconnectReasondata class 1-to-1 callGroup callPrevious WebPlanetKit 6.0 var strCode: stringvar codeString: string -
Callclass 1-to-1 callPrevious WebPlanetKit 6.0 function waitForVirtualBackgroundInitialization()function waitForVirtualBackgroundReady()function setVideoMirror(mirror, videoElements)function setVideoMirror(isMirror, videoElements) -
Conferenceclass Group callPrevious WebPlanetKit 6.0 function waitForVirtualBackgroundInitialization()function waitForVirtualBackgroundReady()function setVideoMirror(mirror, videoElements)function setVideoMirror(isMirror, videoElements) -
MediaStreamManagerclass 1-to-1 callGroup callPrevious WebPlanetKit 6.0 function waitForVirtualBackgroundInitialization()function waitForVirtualBackgroundReady() -
Utilclass 1-to-1 callGroup callPrevious WebPlanetKit 6.0 function setVideoMirror(mirror, videoElements)function setVideoMirror(isMirror, videoElements) -
VIDEO_PAUSE_REASONenum 1-to-1 callGroup callPrevious WebPlanetKit 6.0 PLANETKIT_VIDEO_PAUSE_REASON_BY_USERBY_USERPLANETKIT_VIDEO_PAUSE_REASON_BY_INTERRUPTBY_INTERRUPTPLANETKIT_VIDEO_PAUSE_REASON_UNDEFINEDUNDEFINEDPLANETKIT_VIDEO_PAUSE_REASON_INTERNALINTERNALPLANETKIT_VIDEO_PAUSE_REASON_ENABLE_VIDEO_RESPONSEENABLE_VIDEO_RESPONSEPLANETKIT_VIDEO_PAUSE_REASON_CAMERA_INACTIVECAMERA_INACTIVE -
KIT_DISCONNECT_REASONenum 1-to-1 callGroup callPrevious WebPlanetKit 6.0 PLANETKIT_DISCONNECT_REASON_NORMALNORMALPLANETKIT_DISCONNECT_REASON_DECLINEDECLINEPLANETKIT_DISCONNECT_REASON_CELL_CALLCELL_CALLPLANETKIT_DISCONNECT_REASON_INTERNAL_ERRORINTERNAL_ERRORPLANETKIT_DISCONNECT_REASON_USER_ERRORUSER_ERRORPLANETKIT_DISCONNECT_REASON_INTERNAL_KIT_ERRORINTERNAL_KIT_ERRORPLANETKIT_DISCONNECT_REASON_AUDIO_TX_NO_SRCAUDIO_TX_NO_SRCPLANETKIT_DISCONNECT_REASON_CANCELCANCELPLANETKIT_DISCONNECT_REASON_BUSYBUSYPLANETKIT_DISCONNECT_REASON_NOANSWERNOANSWERPLANETKIT_DISCONNECT_REASON_ALREADY_GOT_A_CALLALREADY_GOT_A_CALLPLANETKIT_DISCONNECT_REASON_MULTIDEV_IN_USEMULTIDEV_IN_USEPLANETKIT_DISCONNECT_REASON_MULTIDEV_ANSWERMULTIDEV_ANSWERPLANETKIT_DISCONNECT_REASON_MULTIDEV_DECLINEMULTIDEV_DECLINEPLANETKIT_DISCONNECT_REASON_MAX_CALL_TIME_EXCEEDEDMAX_CALL_TIME_EXCEEDEDPLANETKIT_DISCONNECT_REASON_NETWORK_UNSTABLENETWORK_UNSTABLEPLANETKIT_DISCONNECT_REASON_PUSH_ERRORPUSH_ERRORPLANETKIT_DISCONNECT_REASON_AUTH_ERRORAUTH_ERRORPLANETKIT_DISCONNECT_REASON_RELEASED_CALLRELEASED_CALLPLANETKIT_DISCONNECT_REASON_SERVER_INTERNAL_ERRORSERVER_INTERNAL_ERRORPLANETKIT_DISCONNECT_REASON_UNAVAILABLE_NETWORKUNAVAILABLE_NETWORKPLANETKIT_DISCONNECT_REASON_APP_DESTROYAPP_DESTROYPLANETKIT_DISCONNECT_REASON_SYSTEM_SLEEPSYSTEM_SLEEPPLANETKIT_DISCONNECT_REASON_SYSTEM_LOGOFFSYSTEM_LOGOFFPLANETKIT_DISCONNECT_REASON_MTU_EXCEEDEDMTU_EXCEEDEDPLANETKIT_DISCONNECT_REASON_ROOM_IS_FULLROOM_IS_FULLPLANETKIT_DISCONNECT_REASON_ALONE_KICK_OUTALONE_KICK_OUTPLANETKIT_DISCONNECT_REASON_ROOM_NOT_FOUNDROOM_NOT_FOUNDPLANETKIT_DISCONNECT_REASON_SERVICE_ACCESS_TOKEN_ERRORSERVICE_ACCESS_TOKEN_ERRORPLANETKIT_DISCONNECT_REASON_SERVICE_INVALID_IDSERVICE_INVALID_IDPLANETKIT_DISCONNECT_REASON_SERVICE_MAINTENANCESERVICE_MAINTENANCEPLANETKIT_DISCONNECT_REASON_SERVICE_BUSYSERVICE_BUSYPLANETKIT_DISCONNECT_REASON_SERVICE_INTERNAL_ERRORSERVICE_INTERNAL_ERRORPLANETKIT_DISCONNECT_REASON_SERVICE_HTTP_ERRORSERVICE_HTTP_ERRORPLANETKIT_DISCONNECT_REASON_SERVICE_HTTP_CONNECTION_TIME_OUTSERVICE_HTTP_CONNECTION_TIME_OUTPLANETKIT_DISCONNECT_REASON_SERVICE_INCOMPATIBLE_PLANETKIT_VERSERVICE_INCOMPATIBLE_PLANETKIT_VERPLANETKIT_DISCONNECT_REASON_SERVICE_TOO_MANY_REQUESTSSERVICE_TOO_MANY_REQUESTSPLANETKIT_DISCONNECT_REASON_WEB_RTC_ABORTWEB_RTC_ABORTPLANETKIT_DISCONNECT_REASON_WEB_RTC_NOT_ALLOWEDWEB_RTC_NOT_ALLOWEDPLANETKIT_DISCONNECT_REASON_WEB_RTC_NOT_FOUNDWEB_RTC_NOT_FOUNDPLANETKIT_DISCONNECT_REASON_WEB_RTC_NOT_READABLEWEB_RTC_NOT_READABLEPLANETKIT_DISCONNECT_REASON_WEB_RTC_OVERCONSTRAINEDWEB_RTC_OVERCONSTRAINEDPLANETKIT_DISCONNECT_REASON_WEB_RTC_SECURITY_ERRORWEB_RTC_SECURITY_ERRORPLANETKIT_DISCONNECT_REASON_WEB_RTC_TYPE_ERRORWEB_RTC_TYPE_ERRORPLANETKIT_DISCONNECT_REASON_WEB_NO_MEDIA_PACKETWEB_NO_MEDIA_PACKETPLANETKIT_DISCONNECT_REASON_WEB_CALL_CONNECT_FAIL_BY_SERVERWEB_CALL_CONNECT_FAIL_BY_SERVERPLANETKIT_DISCONNECT_REASON_WEB_CALL_CONNECT_FAIL_BY_CLIENTWEB_CALL_CONNECT_FAIL_BY_CLIENTPLANETKIT_DISCONNECT_REASON_WEB_SIGNALING_UNEXPECTED_DISCONNECTEDWEB_SIGNALING_UNEXPECTED_DISCONNECTED
micOn이 false일 때 마이크 접근 생략
micOn: false로 통화를 시작하면 통화 시작 시점에 더 이상 마이크에 접근하거나 마이크 권한을 요청하지 않습니다. 마이크에는 통화 중 사용자가 음 소거를 해제할 때만 접근합니다. 권한이 필요한 경우 그 시점에 브라우저 권한 요청 창이 표시됩니다.
MyMediaStatus 스냅샷 API 및 미디어 이벤트 대리자(delegate) 콜백 추가
로컬 사용자의 현재 오디오 음 소거, 비디오, 화면 공유 상태를 반환하는 동기식 스냅샷 API를 추가했습니다. 이제 애플리케이션은 현재 상태만 필요한 경우(예: evtConnected 직후 통화 UI를 렌더링할 때) 개별 이벤트에서 이 값들을 추적할 필요가 없습니다.
스냅샷 API와 함께, 로컬 사용자의 오디오 음 소거 상태, 비디오 상태, 화면 공유 상태가 변경될 때마다 애플리케이션에 알리는 네 개의 이벤트 대리자 콜백을 추가했습니다. 이 콜백들은 스냅샷 API와 함께 로컬 미디어 상태를 읽고 구독하는 일관된 방법을 제공합니다. 기존 evtMyScreenShareStoppedOnBrowser 콜백은 삭제했습니다. 대신 기존 콜백 및 그 외 모든 화면 공유 상태 전환을 포함하는 evtMyScreenShareStateUpdated를 사용하세요.
API
추가
-
Callclass 1-to-1 callfunction getMyMediaStatus()
-
Conferenceclass Group callfunction getMyMediaStatus()
-
MakeCallDelegateprotocol 1-to-1 callevtMyAudioMuted()evtMyAudioUnmuted()evtMyVideoStatusUpdated(myVideoStatus: MyVideoStatus)evtMyScreenShareStateUpdated(state: MY_SCREEN_SHARE_STATE)
-
VerifyCallDelegateprotocol 1-to-1 callevtMyAudioMuted()evtMyAudioUnmuted()evtMyVideoStatusUpdated(myVideoStatus: MyVideoStatus)evtMyScreenShareStateUpdated(state: MY_SCREEN_SHARE_STATE)
-
ConferenceDelegateprotocol Group callevtMyAudioMuted()evtMyAudioUnmuted()evtMyVideoStatusUpdated(myVideoStatus: MyVideoStatus)evtMyScreenShareStateUpdated(state: MY_SCREEN_SHARE_STATE)
-
MyMediaStatusdata class 1-to-1 callGroup call -
MyVideoStatusdata class 1-to-1 callGroup call -
MY_SCREEN_SHARE_STATEenum 1-to-1 callGroup call
삭제
-
MakeCallDelegateprotocol 1-to-1 callevtMyScreenShareStoppedOnBrowser()—evtMyScreenShareStateUpdated(state)로 대체됨
-
VerifyCallDelegateprotocol 1-to-1 callevtMyScreenShareStoppedOnBrowser()—evtMyScreenShareStateUpdated(state)로 대체됨
-
ConferenceDelegateprotocol Group callevtMyScreenShareStoppedOnBrowser()—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
추가
-
Callclass 1-to-1 callstatic function isDocumentPipSupported()function openDocumentPip(options?: DocumentPipOptions)function closeDocumentPip()function getDocumentPipWindow()function getDocumentPipContainer()
-
Conferenceclass Group callstatic function isDocumentPipSupported()function openDocumentPip(options?: DocumentPipOptions)function closeDocumentPip()function getDocumentPipWindow()function getDocumentPipContainer()
-
MakeCallDelegateprotocol 1-to-1 callevtPipOpened(result: DocumentPipResult)evtPipClosed(info: DocumentPipClosedInfo)
-
VerifyCallDelegateprotocol 1-to-1 callevtPipOpened(result: DocumentPipResult)evtPipClosed(info: DocumentPipClosedInfo)
-
ConferenceDelegateprotocol Group callevtPipOpened(result: DocumentPipResult)evtPipClosed(info: DocumentPipClosedInfo)
-
DocumentPipOptionsdata class 1-to-1 callGroup call -
DocumentPipResultdata class 1-to-1 callGroup call -
DocumentPipClosedReasondata class 1-to-1 callGroup call -
DocumentPipClosedInfodata 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를 추가했습니다. 이 값은 verifyCall 중 ccParam에서 파싱되며, 일반적으로 통화 수락 여부를 결정하기 전에 evtVerified 콜백 내부에서 확인합니다.
연결된 통화 중 실제 레코딩 활성화 상태는 기존 isRecordOnCloudActivated() API를 통해 계속 확인할 수 있습니다.
API
추가
-
Callclass 1-to-1 callfunction isRecordOnCloudEnabled()
예제 코드
planetKit.verifyCall({
...,
delegate: {
evtVerified: () => {
if (planetKit.isRecordOnCloudEnabled()) {
// Inform the user that the caller has requested cloud recording.
}
},
},
});
오디오 통화 중 피어의 비디오 활성화 처리 단순화
이제 오디오 통화 중 피어가 비디오를 활성화하면 WebPlanetKit은 항상 로컬 사용자의 비디오를 일시 중지 상태로 설정합니다. 애플리케이션은 더 이상 통화 시작 시 PAUSE와 SEND 모드 중에서 선택할 필요가 없습니다.
responseOnEnableVideo 파라미터와 RESPONSE_ENABLE_VIDEO 열거형을 삭제했습니다. 관련 이벤트 대리자(delegate) 콜백은 실제 동작을 반영하도록 evtVideoEnabledByPeerAndMyVideoPaused()로 이름을 변경했습니다.
API
변경
-
MakeCallDelegateprotocol 1-to-1 callPrevious WebPlanetKit 6.0 evtVideoEnabledByPeer()evtVideoEnabledByPeerAndMyVideoPaused() -
VerifyCallDelegateprotocol 1-to-1 callPrevious WebPlanetKit 6.0 evtVideoEnabledByPeer()evtVideoEnabledByPeerAndMyVideoPaused()
삭제
-
MakeCallParamsdata class 1-to-1 callvar responseOnEnableVideo?: RESPONSE_ENABLE_VIDEO
-
VerifyCallParamsdata class 1-to-1 callvar responseOnEnableVideo?: RESPONSE_ENABLE_VIDEO
-
RESPONSE_ENABLE_VIDEOenum 1-to-1 call
마이크/카메라 권한 변경 시 통화 유지
이제 WebPlanetKit은 통화 도중 브라우저의 마이크 또는 카메라 권한이 변경되어도 통화를 계속 유지합니다. 사용자가 권한을 취소하면 SDK는 해당 미디어 트랙을 무음 플레이스홀더로 자동으로 교체해 통화가 끊기지 않도록 합니다. 권한이 다시 허용되면 SDK는 실제 장치 트랙을 자동으로 복원합니다.
또한 권한 상태가 변경될 때마다 애플리케이션에 알리는 새로운 이벤트 대리자(delegate) 콜백을 추가했습니다.
이제 권한 상태가 통합 통화 이벤트 대리자를 통해 전달되므로, 5.5.0부터 MediaStreamManager가 제공하던 setupDevicePermissionMonitoring, cleanupDevicePermissionMonitoring, getDevicePermissionState 메서드를 삭제했습니다.
API
추가
-
MakeCallDelegateprotocol 1-to-1 callevtMicrophonePermissionStateUpdated(state: PERMISSION_STATE)evtCameraPermissionStateUpdated(state: PERMISSION_STATE)
-
VerifyCallDelegateprotocol 1-to-1 callevtMicrophonePermissionStateUpdated(state: PERMISSION_STATE)evtCameraPermissionStateUpdated(state: PERMISSION_STATE)
-
ConferenceDelegateprotocol Group callevtMicrophonePermissionStateUpdated(state: PERMISSION_STATE)evtCameraPermissionStateUpdated(state: PERMISSION_STATE)
-
PERMISSION_STATEenum 1-to-1 callGroup call
삭제
-
MediaStreamManagerclass 1-to-1 callGroup callfunction 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()를 호출해 특정 스피커를 선택해야 했습니다. 이제 기존 audioInput 및 videoInput 필드와 함께 MediaDeviceId.audioOutput을 통해 통화 시작 시점에 스피커를 설정할 수 있습니다.
이 typedef 내 일관성을 위해 기존 입력 필드의 이름을 변경했습니다.
inputAudio→audioInputinputVideo→videoInput
HTMLMediaElement.setSinkId()를 지원하지 않는 Safari에서는 audioOutput을 설정해도 통화에 영향을 주지 않습니다. SDK는 기본 스피커를 사용하며, 통화는 정상적으로 진행됩니다.
API
추가
-
MediaDeviceIddata class 1-to-1 callGroup callvar audioOutput: string
변경
-
MediaDeviceIddata class 1-to-1 callGroup callPrevious WebPlanetKit 6.0 var inputAudio: stringvar audioInput: stringvar 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
변경
-
Callclass 1-to-1 callPrevious WebPlanetKit 6.0 function changeAudioInputDevice('empty')function changeAudioInputDevice('none')function changeVideoInputDevice('empty')function changeVideoInputDevice('none') -
Conferenceclass Group callPrevious WebPlanetKit 6.0 function changeAudioInputDevice('empty')function changeAudioInputDevice('none')function changeVideoInputDevice('empty')function changeVideoInputDevice('none')