Skip to main content
Version: 6.0

Release notes

This page provides the release notes for WebPlanetKit 6.0.

WebPlanetKit 6.0

Release date: 2026-08-03

Improve public API naming for clarity and consistency

Refined several public API names for better readability, consistency, and ease of adoption.

API

Changed
  • 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

Skip microphone access when micOn is false

Starting a call with micOn: false no longer accesses the microphone or requests microphone permission at call start. The microphone is accessed only when the user unmutes during the call. If permission is required, the browser permission prompt is shown at that time.

Add MyMediaStatus snapshot API and media delegate callbacks

Added a synchronous snapshot API that returns the local user's current audio mute, video, and screen share state. Applications no longer need to track these values from individual events when they only need the current state (for example, when rendering the call UI right after evtConnected).

In addition to the snapshot API, four delegate callbacks have been added to notify the application whenever the local user's audio mute state, video status, or screen share state changes. Together with the snapshot API, these callbacks provide a consistent way to read and subscribe to local media state. The existing evtMyScreenShareStoppedOnBrowser callback has been removed. Use evtMyScreenShareStateUpdated instead, which covers that case and all other screen share state transitions.

API

Added
  • 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

Removed
  • MakeCallDelegate protocol 1-to-1 call

    • evtMyScreenShareStoppedOnBrowser() — replaced by evtMyScreenShareStateUpdated(state)
  • VerifyCallDelegate protocol 1-to-1 call

    • evtMyScreenShareStoppedOnBrowser() — replaced by evtMyScreenShareStateUpdated(state)
  • ConferenceDelegate protocol Group call

    • evtMyScreenShareStoppedOnBrowser() — replaced by evtMyScreenShareStateUpdated(state)

Example code

Reading the local user's current media 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);
}

Add Document Picture-in-Picture API

Added support for Document Picture-in-Picture, allowing the local user to detach the entire call UI into an independent floating browser window. The application can render custom HTML, including multiple video elements, controls, and layouts, inside the PiP window.

The SDK creates the PiP window with an empty container element, and the application renders the call UI inside that container. The PiP window is closed automatically when the call ends, when the user closes the PiP window, or when closeDocumentPip() is called.

API

Added
  • 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

Example code

Opening a Document PiP in response to the browser's enterpictureinpicture media session action:

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);
});

Expose isRecordOnCloudEnabled() on incoming calls

Added an API that allows the callee in a 1-to-1 call to check whether the caller requested cloud recording before accepting the call. The value is parsed from ccParam during verifyCall and is typically checked inside the evtVerified callback before deciding whether to accept the call.

The actual recording activation state during a connected call is still available through the existing isRecordOnCloudActivated() API.

API

Added
  • Call class 1-to-1 call

    • function isRecordOnCloudEnabled()

Example code

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

Simplify peer-initiated video activation during audio calls

When the peer enables video during an audio call, WebPlanetKit now always sets the local user's video to the paused state. Applications no longer need to choose between PAUSE and SEND modes at call start.

The responseOnEnableVideo parameter and the RESPONSE_ENABLE_VIDEO enum have been removed. The corresponding delegate callback has been renamed to evtVideoEnabledByPeerAndMyVideoPaused() so the event name reflects the actual behavior.

API

Changed
  • MakeCallDelegate protocol 1-to-1 call

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

    PreviousWebPlanetKit 6.0
    evtVideoEnabledByPeer()evtVideoEnabledByPeerAndMyVideoPaused()
Removed
  • 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

Keep calls alive across microphone/camera permission changes

WebPlanetKit now keeps the call running when the browser's microphone or camera permission changes in the middle of a call. If the user revokes the permission, the SDK automatically replaces the affected media track with a silent placeholder so the call does not drop. When permission is granted again, the SDK automatically restores the real device track.

In addition, new delegate callbacks notify the application whenever the permission state changes.

Because permission state is now delivered through the unified call delegates, the setupDevicePermissionMonitoring, cleanupDevicePermissionMonitoring, and getDevicePermissionState methods exposed by MediaStreamManager since 5.5.0 have been removed.

API

Added
  • 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

Removed
  • MediaStreamManager class 1-to-1 callGroup call

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

Example code

Subscribing to microphone and camera permission changes:

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.
}
},
},
});

Support initial speaker via MediaDeviceId.audioOutput

Added the ability to specify the initial audio output (speaker) device when starting a call. Previously, applications had to wait until the call connected, then call changeAudioOutputDevice() to select a specific speaker. The speaker can now be set at call start through MediaDeviceId.audioOutput, alongside the existing audioInput and videoInput fields.

For consistency within this typedef, the existing input fields have also been renamed.

  • inputAudioaudioInput
  • inputVideovideoInput

On Safari, where HTMLMediaElement.setSinkId() is not supported, setting audioOutput has no effect on the call. The SDK uses the default speaker, and the call proceeds normally.

API

Added
  • MediaDeviceId data class 1-to-1 callGroup call

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

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

Example code

Setting the initial speaker, microphone, and camera at call start:

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,
},
});

Rename 'empty' to 'none' for input device sentinel

changeAudioInputDevice() and changeVideoInputDevice() now accept 'none' as the "no device" value (the silent placeholder used when the user has no microphone or camera). Applications that use 'empty' must update to 'none'. The behavior is unchanged: the active track is replaced with a silent placeholder.

API

Changed
  • 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')