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
-
PlanetKitCallinterface 1-to-1 callPrevious PlanetKit 7.0.0 fun setAudioSink(audioSink: AudioSink?)fun setCustomAudioSink(audioSink: PlanetKitCustomAudioSink),fun clearCustomAudioSink() -
PlanetKitConferenceinterface Group callPrevious PlanetKit 7.0.0 fun setAudioSink(audioSink: AudioSink?)fun setCustomAudioSink(audioSink: PlanetKitCustomAudioSink),fun clearCustomAudioSink()
Added
PlanetKitCustomAudioSinkclass 1-to-1 callGroup callprotected fun getFrameData(sampleRate: PlanetKitAudioSampleRate, sampleType: PlanetKitAudioSampleType, sampleCount: Int): AudioFrameprotected fun putUserAcousticEchoCancellerReference(data: AudioFrame): Boolean
PlanetKitCallinterface 1-to-1 callfun clearCustomAudioSink()
PlanetKitConferenceinterface Group callfun clearCustomAudioSink()
Removed
AudioSinkclass 1-to-1 callGroup callDefaultSpeakerAudioSinkclass 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
-
PlanetKitCallinterface 1-to-1 callPrevious PlanetKit 7.0.0 fun pauseMyVideo(reason: PlanetKitVideoPauseReason, userData: Any?, callback: PlanetKitRequestCallback?): Booleanfun pauseMyVideo(userData: Any?, callback: PlanetKitRequestCallback?): Boolean -
PlanetKitConferenceinterface Group callPrevious PlanetKit 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, andMakeCallListenerinherited from the baseCallListenerinterface 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
-
VerifyListenerinterface 1-to-1 callPrevious PlanetKit 7.0.0 interface VerifyListener: CallListenerinterface VerifyListener
Removed
CallListenerinterface 1-to-1 callfun 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.CameraTypeChangedListenerinterface 1-to-1 callGroup callPrevious PlanetKit 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
-
ConferenceListenerinterface Group callPrevious PlanetKit 7.0.0 fun onScreenShareUpdated(peer: PlanetKitConferencePeer, subgroupName: String?, screenShareState: PlanetKitScreenShareState)fun onScreenShareUpdated(peer: PlanetKitConferencePeer, subgroupName: String?, screenShareState: PlanetKitScreenShareState, disabledReason: Int?) -
PlanetKitPeerControl.PeerControlListenerinterface Group callPrevious PlanetKit 7.0.0 fun onScreenShareUpdated(peer: PlanetKitConferencePeer, state: PlanetKitScreenShareState, subgroupName: String?)fun onScreenShareUpdated(peer: PlanetKitConferencePeer, state: PlanetKitScreenShareState, subgroupName: String?, disabledReason: Int?) -
PlanetKitPeerScreenShareView.PeerScreenShareViewListenerinterface Group callPrevious PlanetKit 7.0.0 fun onScreenShareUpdated(peer: PlanetKitConferencePeer, state: PlanetKitScreenShareState, subgroupName: String?)fun onScreenShareUpdated(peer: PlanetKitConferencePeer, state: PlanetKitScreenShareState, subgroupName: String?, disabledReason: Int?) -
PlanetKitPeerView.PeerViewListenerinterface Group callPrevious PlanetKit 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
PlanetKitAudioSampleRateenum 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
-
AudioFrameinterface 1-to-1 callGroup callPrevious PlanetKit 7.0.0 fun getSamplingRate(): Intfun getSamplingRate(): PlanetKitAudioSampleRate -
PlanetKitHookedAudioclass 1-to-1 callPrevious PlanetKit 7.0.0 val sampleRate: Intval sampleRate: PlanetKitAudioSampleRate
Added
PlanetKitAudioSampleRateenum class 1-to-1 callGroup callSAMPLE_RATE_16K(16000)SAMPLE_RATE_32K(32000)SAMPLE_RATE_48K(48000)val sampleRate: Int
Remove deprecated APIs
- Removed the deprecated
apiKeyparameter from call and conference setup APIs. - Removed several deprecated peer video and screen share control methods from group calls.
API
Removed
-
PlanetKitMakeCallParamdata class 1-to-1 callval apiKey: String?
-
PlanetKitMakeCallParam.Builderclass 1-to-1 callfun apiKey(apiKey: String): Builder
-
PlanetKitConferenceParamdata class Group callval apiKey: String?
-
PlanetKitConferenceParam.Builderclass Group callfun apiKey(apiKey: String): Builder
-
PlanetKitConferenceinterface Group callfun requestPeerScreenShare(peer: PlanetKitUser, subgroupName: String?, userData: Any?, callback: PlanetKitVideoRequestCallback?): Booleanfun requestPeerVideo(peer: PlanetKitUser, maxResolution: PlanetKitVideoResolution, userData: Any?, callback: PlanetKitVideoRequestCallback?): Booleanfun requestPeerVideo(peer: PlanetKitUser, maxResolution: PlanetKitVideoResolution): Booleanfun requestPeerVideo(peer: PlanetKitUser, maxResolution: PlanetKitVideoResolution, subgroupName: String?, userData: Any?, callback: PlanetKitVideoRequestCallback?): Booleanfun requestPeerVideo(peer: PlanetKitUser, maxResolution: PlanetKitVideoResolution, subgroupName: String?, userData: Any?, cbResolution: PlanetKitPeerVideoResolutionCallback?): Booleanfun requestPeerVideo(peer: PlanetKitUser, maxResolution: PlanetKitVideoResolution, userData: Any?, cbResolution: PlanetKitPeerVideoResolutionCallback?): Booleanfun stopPeerScreenShare(peer: PlanetKitUser, subgroupName: String?, userData: Any?, callback: PlanetKitVideoRequestCallback?): Booleanfun stopPeerVideo(peer: PlanetKitUser, subgroupName: String?, userData: Any?, callback: PlanetKitVideoRequestCallback?): Booleanfun stopPeerVideo(peer: PlanetKitUser, userData: Any?, callback: PlanetKitVideoRequestCallback?): Booleanfun 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
-
PlanetKitCallinterface 1-to-1 callPrevious PlanetKit 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() -
PlanetKitConferenceinterface Group callPrevious PlanetKit 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
-
PlanetKitAudioReceiverinterface 1-to-1 callGroup callfun onAudioReceived(data: AudioFrame)
-
PlanetKitPeerVideoReceiverinterface Group callfun 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
-
VerifyListenerinterface 1-to-1 callPrevious PlanetKit 7.0.0 fun onVerified(call: PlanetKitCall, peerStartMessage: PlanetKitCallStartMessage?, peerUseResponderPreparation: Boolean)fun onVerified(call: PlanetKitCall, peerCallStartMessage: PlanetKitCallStartMessage?, peerUseResponderPreparation: Boolean) -
PlanetKitCallConnectedParamdata class 1-to-1 callPrevious PlanetKit 7.0.0 val peerStartMessage: PlanetKitCallStartMessage?val peerCallStartMessage: PlanetKitCallStartMessage? -
PlanetKitUserTypeContainerclass 1-to-1 callGroup callPrevious PlanetKit 7.0.0 val planetkitUserType: PlanetKitUserType?val planetKitUserType: PlanetKitUserType? -
PlanetKitConferencePublicSubgroupUpdateParam.PlanetKitConferenceSubgroupUpdatedPeerdata class Group callPrevious PlanetKit 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
PlanetKitSendShortDataFailReasonenum provides specific error codes to help developers identify and handle different failure scenarios more effectively. - Replaced the generic
PlanetKitRequestCallbackwith the specializedPlanetKitSendShortDataResultCallbackthat includes detailed failure information. - This enhancement enables better error handling, debugging, and user feedback for applications using short data transmission features.
API
Added
-
PlanetKitSendShortDataFailReasonenum class 1-to-1 callGroup callNONE(0)INVALID_PARAMETER(1)TOO_LONG_DATA_TYPE(2)TOO_LONG_DATA(3)TOO_FREQUENT(4)TIMEOUT(5)
-
PlanetKitSendShortDataResultCallbackinterface 1-to-1 callGroup callfun onResult(isSuccess: Boolean, failReason: PlanetKitSendShortDataFailReason, userdata: Any?)
Changed
-
PlanetKitCallinterface 1-to-1 callPrevious PlanetKit 7.0.0 fun sendShortData(type: String, shortData: ByteArray, userData: Any?, callback: PlanetKitRequestCallback?): Booleanfun sendShortData(type: String, shortData: ByteArray, userData: Any?, callback: PlanetKitSendShortDataResultCallback?): Boolean -
PlanetKitConferenceinterface Group callPrevious PlanetKit 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?): Booleanfun sendShortData(type: String, shortData: ByteArray, userData: Any?, callback: PlanetKitRequestCallback?): Booleanfun sendShortData(type: String, shortData: ByteArray, userData: Any?, callback: PlanetKitSendShortDataResultCallback?): Boolean