Skip to main content
Version: 7.0

Release notes

This page provides the release notes of PlanetKit 7.0 for Android.

PlanetKit 7.0

Release date: 2026-04-24

Improve custom audio sink

The previous AudioSink interface has been replaced with a more streamlined PlanetKitCustomAudioSink class. This change simplifies custom audio sink implementation for audio processing applications.

API

Changed
  • PlanetKitCall interface 1-to-1 call

    PreviousPlanetKit 7.0.0
    fun setAudioSink(audioSink: AudioSink?)fun setCustomAudioSink(audioSink: PlanetKitCustomAudioSink), fun clearCustomAudioSink()
  • PlanetKitConference interface Group call

    PreviousPlanetKit 7.0.0
    fun setAudioSink(audioSink: AudioSink?)fun setCustomAudioSink(audioSink: PlanetKitCustomAudioSink), fun clearCustomAudioSink()
Added
  • PlanetKitCustomAudioSink class 1-to-1 callGroup call
    • protected fun getFrameData(sampleRate: PlanetKitAudioSampleRate, sampleType: PlanetKitAudioSampleType, sampleCount: Int): AudioFrame
    • protected fun putUserAcousticEchoCancellerReference(data: AudioFrame): Boolean
  • PlanetKitCall interface 1-to-1 call
    • fun clearCustomAudioSink()
  • PlanetKitConference interface Group call
    • fun clearCustomAudioSink()
Removed
  • AudioSink class 1-to-1 callGroup call
  • DefaultSpeakerAudioSink class 1-to-1 callGroup call

Example code

object CustomAudioSink : PlanetKitCustomAudioSink() {
override fun putFrameData(frame: AudioFrame) {
// Process audio frame data
val processedData = processAudioFrame(frame)

// Use acoustic echo canceller reference if needed
putUserAcousticEchoCancellerReference(frame)
}
}

// Set custom audio sink
call.setCustomAudioSink(CustomAudioSink)

// Clear when done
call.clearCustomAudioSink()

Remove the reason parameter in pauseMyVideo()

The reason parameter has been removed from the pauseMyVideo method.

  • When a user manually pauses their video, the reason is always implicitly "by user", making the parameter unnecessary.
  • This simplifies the API and reduces potential confusion about which reason to use.

API

Changed
  • PlanetKitCall interface 1-to-1 call

    PreviousPlanetKit 7.0.0
    fun pauseMyVideo(reason: PlanetKitVideoPauseReason, userData: Any?, callback: PlanetKitRequestCallback?): Booleanfun pauseMyVideo(userData: Any?, callback: PlanetKitRequestCallback?): Boolean
  • PlanetKitConference interface Group call

    PreviousPlanetKit 7.0.0
    fun pauseMyVideo(reason: PlanetKitVideoPauseReason, userData: Any?, callback: PlanetKitRequestCallback?): Booleanfun pauseMyVideo(userData: Any?, callback: PlanetKitRequestCallback?): Boolean

Enhance the CallListener interface

Improved inheritance structure of the CallListener interface used in 1-to-1 calls.

  • Previously, VerifyCallListener, AcceptCallListener, and MakeCallListener inherited from the base CallListener interface which contained all call-related callback methods. This created the problem of including methods that are not actually called (invalid methods) for specific use cases, which could cause confusion for users.
  • Now each listener (VerifyCallListener, AcceptCallListener, MakeCallListener) provides only the methods that are valid for their specific purpose.

API

Changed
  • VerifyListener interface 1-to-1 call

    PreviousPlanetKit 7.0.0
    interface VerifyListener: CallListenerinterface VerifyListener
Removed
  • CallListener interface 1-to-1 call
    • fun onVerified(call: PlanetKitCall, peerStartMessage: PlanetKitCallStartMessage?, peerUseResponderPreparation: Boolean)
    • fun onWaitConnected(call: PlanetKitCall)

Improve the PlanetKitCameraManager.CameraTypeChangedListener interface

The PlanetKitCameraManager.CameraTypeChangedListener now uses enum-based camera type detection instead of a boolean flag.

  • This change supports external USB cameras in addition to front and back cameras.
  • Provides more detailed information about camera switches and better support for future camera types.

API

Changed
  • PlanetKitCameraManager.CameraTypeChangedListener interface 1-to-1 callGroup call

    PreviousPlanetKit 7.0.0
    fun onChanged(isFrontCamera: Boolean)fun onChanged(cameraType: PlanetKitCameraType)

Example code

private val cameraTypeChangedListener = PlanetKitCameraManager.CameraTypeChangedListener { cameraType ->
when (cameraType) {
PlanetKitCameraType.FRONT -> {
// Handle front camera
}
PlanetKitCameraType.BACK -> {
// Handle back camera
}
PlanetKitCameraType.EXTERNAL -> {
// Handle external USB camera
}
}
}

PlanetKit.getCameraManager().addCameraTypeChangedListener(cameraTypeChangedListener)

Add screen share stop reason in conferences

Added disabledReason parameter to screen share event callbacks in group calls. This provides detailed information about why screen share stopped, helping applications provide better user feedback and handle different termination scenarios appropriately.

API

Changed
  • ConferenceListener interface Group call

    PreviousPlanetKit 7.0.0
    fun onScreenShareUpdated(peer: PlanetKitConferencePeer, subgroupName: String?, screenShareState: PlanetKitScreenShareState)fun onScreenShareUpdated(peer: PlanetKitConferencePeer, subgroupName: String?, screenShareState: PlanetKitScreenShareState, disabledReason: Int?)
  • PlanetKitPeerControl.PeerControlListener interface Group call

    PreviousPlanetKit 7.0.0
    fun onScreenShareUpdated(peer: PlanetKitConferencePeer, state: PlanetKitScreenShareState, subgroupName: String?)fun onScreenShareUpdated(peer: PlanetKitConferencePeer, state: PlanetKitScreenShareState, subgroupName: String?, disabledReason: Int?)
  • PlanetKitPeerScreenShareView.PeerScreenShareViewListener interface Group call

    PreviousPlanetKit 7.0.0
    fun onScreenShareUpdated(peer: PlanetKitConferencePeer, state: PlanetKitScreenShareState, subgroupName: String?)fun onScreenShareUpdated(peer: PlanetKitConferencePeer, state: PlanetKitScreenShareState, subgroupName: String?, disabledReason: Int?)
  • PlanetKitPeerView.PeerViewListener interface Group call

    PreviousPlanetKit 7.0.0
    fun onScreenShareUpdated(peer: PlanetKitConferencePeer, state: PlanetKitScreenShareState, subgroupName: String?)fun onScreenShareUpdated(peer: PlanetKitConferencePeer, state: PlanetKitScreenShareState, subgroupName: String?, disabledReason: Int?)

Enhance audio API using sampling rate

Replaced integer-based sampling rates with a structured enum approach for better type safety.

  • The new PlanetKitAudioSampleRate enum provides clear support for 16kHz, 32kHz, and 48kHz sampling rates.
  • This change improves API consistency and makes sampling rate handling more explicit and error-resistant.

API

Changed
  • AudioFrame interface 1-to-1 callGroup call

    PreviousPlanetKit 7.0.0
    fun getSamplingRate(): Intfun getSamplingRate(): PlanetKitAudioSampleRate
  • PlanetKitHookedAudio class 1-to-1 call

    PreviousPlanetKit 7.0.0
    val sampleRate: Intval sampleRate: PlanetKitAudioSampleRate
Added
  • PlanetKitAudioSampleRate enum class 1-to-1 callGroup call
    • SAMPLE_RATE_16K(16000)
    • SAMPLE_RATE_32K(32000)
    • SAMPLE_RATE_48K(48000)
    • val sampleRate: Int

Remove deprecated APIs

  • Removed the deprecated apiKey parameter from call and conference setup APIs.
  • Removed several deprecated peer video and screen share control methods from group calls.

API

Removed
  • PlanetKitMakeCallParam data class 1-to-1 call

    • val apiKey: String?
  • PlanetKitMakeCallParam.Builder class 1-to-1 call

    • fun apiKey(apiKey: String): Builder
  • PlanetKitConferenceParam data class Group call

    • val apiKey: String?
  • PlanetKitConferenceParam.Builder class Group call

    • fun apiKey(apiKey: String): Builder
  • PlanetKitConference interface Group call

    • fun requestPeerScreenShare(peer: PlanetKitUser, subgroupName: String?, userData: Any?, callback: PlanetKitVideoRequestCallback?): Boolean
    • fun requestPeerVideo(peer: PlanetKitUser, maxResolution: PlanetKitVideoResolution, userData: Any?, callback: PlanetKitVideoRequestCallback?): Boolean
    • fun requestPeerVideo(peer: PlanetKitUser, maxResolution: PlanetKitVideoResolution): Boolean
    • fun requestPeerVideo(peer: PlanetKitUser, maxResolution: PlanetKitVideoResolution, subgroupName: String?, userData: Any?, callback: PlanetKitVideoRequestCallback?): Boolean
    • fun requestPeerVideo(peer: PlanetKitUser, maxResolution: PlanetKitVideoResolution, subgroupName: String?, userData: Any?, cbResolution: PlanetKitPeerVideoResolutionCallback?): Boolean
    • fun requestPeerVideo(peer: PlanetKitUser, maxResolution: PlanetKitVideoResolution, userData: Any?, cbResolution: PlanetKitPeerVideoResolutionCallback?): Boolean
    • fun stopPeerScreenShare(peer: PlanetKitUser, subgroupName: String?, userData: Any?, callback: PlanetKitVideoRequestCallback?): Boolean
    • fun stopPeerVideo(peer: PlanetKitUser, subgroupName: String?, userData: Any?, callback: PlanetKitVideoRequestCallback?): Boolean
    • fun stopPeerVideo(peer: PlanetKitUser, userData: Any?, callback: PlanetKitVideoRequestCallback?): Boolean
    • fun stopPeerVideo(peer: PlanetKitUser): Boolean

Change media receiver APIs for consistency

Replaced separate listener interfaces with unified receiver interfaces for better consistency.

  • The new API provides a clearer separation between receiving a peer's media and receiving the user's own media.
  • Added explicit clear methods for better resource management and lifecycle control.

API

Changed
  • PlanetKitCall interface 1-to-1 call

    PreviousPlanetKit 7.0.0
    fun setOnReceiveVideoListener(listener: OnReceiveVideoListener?)fun setPeerVideoReceiver(receiver: PlanetKitPeerVideoReceiver), fun clearPeerVideoReceiver()
    fun setOnReceiveAudioListener(listener: OnReceiveAudioListener?)fun setPeerAudioReceiver(receiver: PlanetKitAudioReceiver), fun clearPeerAudioReceiver()
    fun setOnSentAudioListener(listener: OnSentAudioListener?)fun setMyAudioReceiver(receiver: PlanetKitAudioReceiver), fun clearMyAudioReceiver()
  • PlanetKitConference interface Group call

    PreviousPlanetKit 7.0.0
    fun setOnReceiveVideoListener(peer: PlanetKitUser, listener: OnReceiveVideoListener?)fun setPeerVideoReceiver(peer: PlanetKitUser, receiver: PlanetKitPeerVideoReceiver), fun clearPeerVideoReceiver(peer: PlanetKitUser)
    fun setOnReceiveAudioListener(listener: OnReceiveAudioListener?)fun setPeerAudioReceiver(receiver: PlanetKitAudioReceiver), fun clearPeerAudioReceiver()
    fun setOnSentAudioListener(listener: OnSentAudioListener?)fun setMyAudioReceiver(receiver: PlanetKitAudioReceiver), fun clearMyAudioReceiver()
Added
  • PlanetKitAudioReceiver interface 1-to-1 callGroup call

    • fun onAudioReceived(data: AudioFrame)
  • PlanetKitPeerVideoReceiver interface Group call

    • fun onPeerVideoReceived(data: PlanetKitVideoFrameData)

Fix API typo errors

  • Fixed parameter naming inconsistencies across various interfaces and classes.
  • Corrected capitalization in class properties to follow proper camel case conventions.

API

Changed
  • VerifyListener interface 1-to-1 call

    PreviousPlanetKit 7.0.0
    fun onVerified(call: PlanetKitCall, peerStartMessage: PlanetKitCallStartMessage?, peerUseResponderPreparation: Boolean)fun onVerified(call: PlanetKitCall, peerCallStartMessage: PlanetKitCallStartMessage?, peerUseResponderPreparation: Boolean)
  • PlanetKitCallConnectedParam data class 1-to-1 call

    PreviousPlanetKit 7.0.0
    val peerStartMessage: PlanetKitCallStartMessage?val peerCallStartMessage: PlanetKitCallStartMessage?
  • PlanetKitUserTypeContainer class 1-to-1 callGroup call

    PreviousPlanetKit 7.0.0
    val planetkitUserType: PlanetKitUserType?val planetKitUserType: PlanetKitUserType?
  • PlanetKitConferencePublicSubgroupUpdateParam.PlanetKitConferenceSubgroupUpdatedPeer data class Group call

    PreviousPlanetKit 7.0.0
    val subscribedSubGroups: List<String>val subscribedSubgroups: List<String>
    val unsubscribedSubGroups: List<String>val unsubscribedSubgroups: List<String>

Add detailed error reporting for short data transmission

Added comprehensive failure reason reporting for sendShortData operations in both 1-to-1 and group calls.

  • The new PlanetKitSendShortDataFailReason enum provides specific error codes to help developers identify and handle different failure scenarios more effectively.
  • Replaced the generic PlanetKitRequestCallback with the specialized PlanetKitSendShortDataResultCallback that includes detailed failure information.
  • This enhancement enables better error handling, debugging, and user feedback for applications using short data transmission features.

API

Added
  • PlanetKitSendShortDataFailReason enum class 1-to-1 callGroup call

    • NONE(0)
    • INVALID_PARAMETER(1)
    • TOO_LONG_DATA_TYPE(2)
    • TOO_LONG_DATA(3)
    • TOO_FREQUENT(4)
    • TIMEOUT(5)
  • PlanetKitSendShortDataResultCallback interface 1-to-1 callGroup call

    • fun onResult(isSuccess: Boolean, failReason: PlanetKitSendShortDataFailReason, userdata: Any?)
Changed
  • PlanetKitCall interface 1-to-1 call

    PreviousPlanetKit 7.0.0
    fun sendShortData(type: String, shortData: ByteArray, userData: Any?, callback: PlanetKitRequestCallback?): Booleanfun sendShortData(type: String, shortData: ByteArray, userData: Any?, callback: PlanetKitSendShortDataResultCallback?): Boolean
  • PlanetKitConference interface Group call

    PreviousPlanetKit 7.0.0
    fun sendShortData(targetUser: PlanetKitUser, type: String, shortData: ByteArray, userData: Any?, callback: PlanetKitRequestCallback?): Booleanfun sendShortData(targetUser: PlanetKitUser, type: String, shortData: ByteArray, userData: Any?, callback: PlanetKitSendShortDataResultCallback?): Boolean
    fun sendShortData(type: String, shortData: ByteArray, userData: Any?, callback: PlanetKitRequestCallback?): Booleanfun sendShortData(type: String, shortData: ByteArray, userData: Any?, callback: PlanetKitSendShortDataResultCallback?): Boolean