본문으로 건너뛰기
Version: 7.0

릴리스 노트

Android용 PlanetKit 7.0의 릴리스 노트입니다.

PlanetKit 7.0

릴리스 일자: 2026-04-24

커스텀 오디오 싱크 개선

기존 AudioSink 인터페이스를 더 간결한 PlanetKitCustomAudioSink 클래스로 대체했습니다. 이제 오디오 처리 애플리케이션에서 커스텀 오디오 싱크를 더 간단하게 구현할 수 있습니다.

API

변경
  • PlanetKitCall interface 1-to-1 call

    이전 버전PlanetKit 7.0.0
    fun setAudioSink(audioSink: AudioSink?)fun setCustomAudioSink(audioSink: PlanetKitCustomAudioSink), fun clearCustomAudioSink()
  • PlanetKitConference interface Group call

    이전 버전PlanetKit 7.0.0
    fun setAudioSink(audioSink: AudioSink?)fun setCustomAudioSink(audioSink: PlanetKitCustomAudioSink), fun clearCustomAudioSink()
추가
  • 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()
삭제
  • AudioSink class 1-to-1 callGroup call
  • DefaultSpeakerAudioSink class 1-to-1 callGroup call

예제 코드

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()

pauseMyVideo()에서 reason 파라미터 제거

pauseMyVideo 메서드에서 reason 파라미터를 제거했습니다.

  • 사용자가 직접 비디오를 일시 중지하는 경우 그 이유는 항상 암묵적으로 "by user"이므로 reason 파라미터가 필요하지 않습니다.
  • reason 파라미터를 제거하면서 API가 단순해졌고, reason에 어떤 값을 사용해야 하는지 고민할 필요가 없어졌습니다.

API

변경
  • PlanetKitCall interface 1-to-1 call

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

    이전 버전PlanetKit 7.0.0
    fun pauseMyVideo(reason: PlanetKitVideoPauseReason, userData: Any?, callback: PlanetKitRequestCallback?): Booleanfun pauseMyVideo(userData: Any?, callback: PlanetKitRequestCallback?): Boolean

CallListener 인터페이스 개선

1대1 통화에서 사용하는 CallListener 인터페이스의 상속 구조를 개선했습니다.

  • 기존에는 VerifyCallListener, AcceptCallListener, MakeCallListener가 모든 통화 관련 콜백 메서드를 포함한 기반 CallListener 인터페이스를 상속했습니다. 이로 인해 특정 용도에서는 실제로 호출되지 않는 메서드(유효하지 않은 메서드)까지 포함되는 문제가 발생해 사용자가 혼란스럽게 느낄 수 있었습니다.
  • 이제 각 리스너(VerifyCallListener, AcceptCallListener, MakeCallListener)는 자신의 목적에 맞는 유효한 메서드만 제공합니다.

API

변경
  • VerifyListener interface 1-to-1 call

    이전 버전PlanetKit 7.0.0
    interface VerifyListener: CallListenerinterface VerifyListener
삭제
  • CallListener interface 1-to-1 call
    • fun onVerified(call: PlanetKitCall, peerStartMessage: PlanetKitCallStartMessage?, peerUseResponderPreparation: Boolean)
    • fun onWaitConnected(call: PlanetKitCall)

PlanetKitCameraManager.CameraTypeChangedListener 인터페이스 개선

PlanetKitCameraManager.CameraTypeChangedListener는 이제 boolean 플래그 대신 enum 기반의 카메라 타입 감지를 사용합니다.

  • 이제 전면 및 후면 카메라뿐 아니라 외부 USB 카메라도 지원할 수 있습니다.
  • 카메라 전환에 대한 더 상세한 정보를 제공하며, 향후 추가될 카메라 타입을 지원하기도 더 쉬워졌습니다.

API

변경
  • PlanetKitCameraManager.CameraTypeChangedListener interface 1-to-1 callGroup call

    이전 버전PlanetKit 7.0.0
    fun onChanged(isFrontCamera: Boolean)fun onChanged(cameraType: PlanetKitCameraType)

예제 코드

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)

그룹 통화에서 화면 공유 중지 이유 추가

그룹 통화의 화면 공유 이벤트 콜백에 disabledReason 파라미터를 추가했습니다. 이제 애플리케이션에서 사용자에게 화면 공유가 왜 중지됐는지 더 자세한 정보를 제공할 수 있고, 다양한 종료 상황을 적절히 처리하는 데 참고할 수 있습니다.

API

변경
  • ConferenceListener interface Group call

    이전 버전PlanetKit 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

    이전 버전PlanetKit 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

    이전 버전PlanetKit 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

    이전 버전PlanetKit 7.0.0
    fun onScreenShareUpdated(peer: PlanetKitConferencePeer, state: PlanetKitScreenShareState, subgroupName: String?)fun onScreenShareUpdated(peer: PlanetKitConferencePeer, state: PlanetKitScreenShareState, subgroupName: String?, disabledReason: Int?)

샘플링 레이트를 사용하는 오디오 API 개선

타입 안정성을 개선하고자 정수 기반 샘플링 레이트를 구조화된 enum 방식으로 대체했습니다.

  • 새로운 PlanetKitAudioSampleRate enum은 16kHz, 32kHz, 48kHz 샘플링 레이트를 명확하게 지원합니다.
  • API 일관성이 향상됐고, 샘플링 레이트를 더욱 명시적으로 처리함으로써 오류를 방지할 수 있습니다.

API

변경
  • AudioFrame interface 1-to-1 callGroup call

    이전 버전PlanetKit 7.0.0
    fun getSamplingRate(): Intfun getSamplingRate(): PlanetKitAudioSampleRate
  • PlanetKitHookedAudio class 1-to-1 call

    이전 버전PlanetKit 7.0.0
    val sampleRate: Intval sampleRate: PlanetKitAudioSampleRate
추가
  • PlanetKitAudioSampleRate enum class 1-to-1 callGroup call
    • SAMPLE_RATE_16K(16000)
    • SAMPLE_RATE_32K(32000)
    • SAMPLE_RATE_48K(48000)
    • val sampleRate: Int

더 이상 사용되지 않는 API 제거

  • 1대1 통화 및 그룹 통화 설정 API에서 더 이상 사용되지 않는 apiKey 파라미터를 제거했습니다.
  • 그룹 통화에서 더 이상 사용되지 않는 여러 개의 피어 비디오 및 화면 공유 제어 메서드를 제거했습니다.

API

삭제
  • 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

일관성을 위한 미디어 리시버 API 변경

일관성을 높이기 위해 분리되어 있던 리스너 인터페이스를 통합된 리시버 인터페이스로 대체했습니다.

  • 새로운 API는 상대방의 미디어를 수신하는 것과 사용자 자신의 미디어를 수신하는 것을 더 명확하게 구분합니다.
  • 더 나은 리소스 관리 및 라이프사이클 제어를 위해 명시적인 해제 메서드를 추가했습니다.

API

변경
  • PlanetKitCall interface 1-to-1 call

    이전 버전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()
  • PlanetKitConference interface Group call

    이전 버전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()
추가
  • PlanetKitAudioReceiver interface 1-to-1 callGroup call

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

    • fun onPeerVideoReceived(data: PlanetKitVideoFrameData)

API 오타 수정

  • 여러 인터페이스와 클래스 전반에 걸쳐 파라미터 이름이 일치하지 않았던 부분을 수정했습니다.
  • 클래스 속성의 대소문자 표기를 올바른 카멜 표기법에 맞게 수정했습니다.

API

변경
  • VerifyListener interface 1-to-1 call

    이전 버전PlanetKit 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

    이전 버전PlanetKit 7.0.0
    val peerStartMessage: PlanetKitCallStartMessage?val peerCallStartMessage: PlanetKitCallStartMessage?
  • PlanetKitUserTypeContainer class 1-to-1 callGroup call

    이전 버전PlanetKit 7.0.0
    val planetkitUserType: PlanetKitUserType?val planetKitUserType: PlanetKitUserType?
  • PlanetKitConferencePublicSubgroupUpdateParam.PlanetKitConferenceSubgroupUpdatedPeer data class Group call

    이전 버전PlanetKit 7.0.0
    val subscribedSubGroups: List<String>val subscribedSubgroups: List<String>
    val unsubscribedSubGroups: List<String>val unsubscribedSubgroups: List<String>

짧은 데이터 전송에 상세 오류 보고 기능 추가

1대1 통화와 그룹 통화 모두에서 sendShortData에 포괄적인 실패 이유 보고 기능을 추가했습니다.

  • 새로운 PlanetKitSendShortDataFailReason enum은 개발자가 다양한 실패 시나리오를 더 효과적으로 식별하고 처리할 수 있도록 구체적인 오류 코드를 제공합니다.
  • 기존의 범용 PlanetKitRequestCallback을 상세 실패 정보를 포함하는 전용 PlanetKitSendShortDataResultCallback으로 대체했습니다.
  • 짧은 데이터 전송 기능을 사용할 때 이 기능을 이용해 오류 처리, 디버깅, 정보 제공 기능을 개선할 수 있습니다.

API

추가
  • 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?)
변경
  • PlanetKitCall interface 1-to-1 call

    이전 버전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
  • PlanetKitConference interface Group call

    이전 버전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?): Boolean
    fun sendShortData(type: String, shortData: ByteArray, userData: Any?, callback: PlanetKitRequestCallback?): Booleanfun sendShortData(type: String, shortData: ByteArray, userData: Any?, callback: PlanetKitSendShortDataResultCallback?): Boolean