본문으로 건너뛰기
Version: 6.0

릴리스 노트

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

PlanetKit 6.0

릴리스 일자: 2025-05-16

Android OS 버전을 Android 15(API 레벨 35)로 업그레이드

  • PlanetKit은 이제 Android 15(API 레벨 35)를 대상으로 합니다.
  • 참고: 애플리케이션은 여전히 API 레벨 35보다 낮은 대상 SDK 버전(targetSdkVersion)을 사용할 수 있습니다.

API

  • 변경 없음

통화 중 마이크 사용 여부에 따라 마이크 장치 제어

  • 통화 중 마이크를 사용하지 않을 때(예: 음 소거 또는 통화 일시 중지), PlanetKit이 마이크 장치를 끄도록 변경되었습니다.
  • PlanetKit에서는 마이크 제어를 위한 두 가지 방법을 제공합니다. setMicMuteControlMethod를 통해 원하는 방법을 선택할 수 있습니다. 기본값은 AUDIO_MANAGER입니다.
  • 자세한 정보는 API 문서를 참조하세요.

API

추가
  • PlanetKitMicMuteControlMethod enum class 1-to-1 callGroup call
    • AUDIO_MANAGER
    • AUDIO_DRIVER
  • PlanetKitVerifyCallParam.Builder class 1-to-1 call
    • fun setMicMuteControlMethod(value: PlanetKitMicMuteControlMethod)
  • PlanetKitMakeCallParam.Builder class 1-to-1 call
    • fun setMicMuteControlMethod(value: PlanetKitMicMuteControlMethod)
  • PlanetKitConferenceParam.Builder class Group call
    • fun setMicMuteControlMethod(value: PlanetKitMicMuteControlMethod)

커스텀 오디오 소스를 위한 AudioSourcePlanetKitCustomAudioSource로 교체

  • 이전 버전에서 커스텀 오디오 소스를 구현하려면 AudioSource를 확장해야 했는데, AudioSource는 PlanetKit 내부에서도 사용되었고 인터페이스가 복잡했습니다.
  • PlanetKit 6.0 버전부터 새로운 PlanetKitCustomAudioSource를 도입해서 커스텀 오디오 소스 개발을 간소화했습니다. 기존의 AudioSource는 deprecated 되었습니다.

API

변경
  • PlanetKitCall interface 1-to-1 call

    이전 버전PlanetKit 6.0.0
    fun setAudioSource(audioSource: AudioSource?)fun setCustomAudioSource(audioSource: PlanetKitCustomAudioSource)
  • PlanetKitConference interface Group call

    이전 버전PlanetKit 6.0.0
    fun setAudioSource(audioSource: AudioSource?)fun setCustomAudioSource(audioSource: PlanetKitCustomAudioSource)
추가
  • PlanetKitCustomAudioSource class 1-to-1 call
  • PlanetKitCall interface 1-to-1 call
    • fun clearCustomAudioSource()
  • PlanetKitConference interface Group call
    • fun clearCustomAudioSource()
삭제
  • AudioSource class 1-to-1 call

예제 코드

  • 1단계: 커스텀 오디오 소스 클래스를 구현합니다.

    object CustomAudioSource : PlanetKitCustomAudioSource() {
    private const val FRAME_DURATION_MS: Long = 20
    private var thread: Thread? = null
    fun start() {
    thread = Thread {
    while(true) {
    val frame: AudioFrame = makeYourAudioFrame()
    postFrameData(frame)
    Thread.sleep(FRAME_DURATION_MS)
    }
    }
    thread?.start()
    }
    fun stop() {
    thread?.interrupt()
    thread?.join()
    }
    }
  • 2단계: 커스텀 오디오 소스를 설정하고 시작합니다.

    fun setCustomAudioSource(call: PlanetKitCall, audioSource: CustomAudioSource) {
    call.setCustomAudioSource(audioSource)
    audioSource.start()
    }
  • 3단계: 커스텀 오디오 소스를 해제하고 중지합니다.

    fun clearCustomAudioSource(call: PlanetKitCall, audioSource: CustomAudioSource) {
    call.clearCustomAudioSource()
    audioSource.stop()
    }

PlanetKitCCParam을 사용하여 통화 수신 중 클라우드 통화 녹음 활성화 여부 확인

  • 통화 수신 시 클라우드 통화 녹음이 활성화되었는지를 나타내는 필드를 PlanetKitCCParam에 추가했습니다.

API

추가
  • PlanetKitCCParam class 1-to-1 call
    • val isRecordOnCloudEnabled: Boolean

영상 통화 활성화 시 응답 유형 설정 API 제거

  • 이제 1대1 음성 통화에서 상대방이 영상 통화를 활성화할 때 로컬 사용자의 비디오는 항상 일시 정지 상태로 설정됩니다.
    • 이전 버전에서는 상대방이 음성 통화를 영상 통화로 전환할 때 로컬 사용자의 비디오 전송을 자동으로 시작할지 responseOnEnableVideo()를 사용하여 결정할 수 있었습니다.
    • 그러나 이 API는 개인정보 보호 문제와 잠재적 오용 가능성 때문에 버전 6.0에서 제거하고, onVideoEnabledByPeeronVideoEnabledByPeerAndMyVideoPaused으로 변경했습니다.
    • 따라서 6.0 버전부터는 상대방이 영상 통화를 활성화할 때 로컬 사용자의 비디오는 일시 정지된 상태로 유지됩니다.
  • 이 변경에 따라 이전에 PlanetKitResponseOnEnableVideo.SEND를 이용하던 코드는 onVideoEnabledByPeerAndMyVideoPaused 이벤트를 수신한 후 수동으로 비디오를 다시 재생하는 방식으로 업데이트해야 합니다.
    • 자세한 내용은 아래 예제 코드를 참고하세요.

예제 코드

  • 6.0 버전에서 이전에 PlanetKitResponseOnEnableVideo.SEND를 사용해 구현한 동작을 재현하려면 다음과 같이 구현하세요.
private val callListener = object: MakeCallListener, AcceptCallListener {
override fun onVideoEnabledByPeerAndMyVideoPaused(call: PlanetKitCall) {
...
call.resumeMyVideo()
}
}

API

변경
  • CallListener class 1-to-1 call

    이전 버전PlanetKit 6.0.0
    fun onVideoEnabledByPeer(call: PlanetKitCall)fun onVideoEnabledByPeerAndMyVideoPaused(call: PlanetKitCall)
삭제
  • PlanetKitResponseOnEnableVideo enum class 1-to-1 call
  • PlanetKitMakeCallParam.Builder class 1-to-1 call
    • fun responseOnEnableVideo(responseOnEnableVideo: PlanetKitResponseOnEnableVideo)
  • PlanetKitVerifyCallParam.Builder class 1-to-1 call
    • fun responseOnEnableVideo(responseOnEnableVideo: PlanetKitResponseOnEnableVideo)

피어 볼륨 설정 API 개선

  • 이전의 서브그룹 기반 볼륨 제어를 개별 피어에 대한 통합 볼륨 설정 API로 대체했습니다.
  • 6.0 이전 버전에서는 서브그룹별로 볼륨이 제어되었습니다. 6.0 버전부터는 서브그룹과 상관없이 볼륨을 설정할 수 있습니다.
  • 이 사양 변경에 따라 관련 API를 수정했습니다.

API

변경
  • PlanetKitConferencePeer class Group call

    이전 버전PlanetKit 6.0.0
    fun getAudioVolumeLevelSetting(subgroupName: String?): AudioVolumeResultfun getAudioVolumeLevelSetting(): AudioVolumeResult
추가
  • PlanetKitPeerControl class Group call
    • fun setVolumeLevelSetting(@IntRange(from = 0, to = 110) volumeLevel: Int, userData: Any? = null, callback: PlanetKitRequestCallback? = null): Boolean
  • PlanetKitPeerView class Group call
    • fun setVolumeLevelSetting(@IntRange(from = 0, to = 110) volumeLevel: Int, userData: Any? = null, callback: PlanetKitRequestCallback? = null): Boolean
삭제
  • PlanetKitSubgroup interface Group call
    • fun getPeerVolumeLevelSetting(user: PlanetKitUser): Int
  • PlanetKitSubgroupManager interface Group call
    • fun setPeerVolumeLevelSetting(peer: PlanetKitUser, subgroupName: String?, @IntRange(from = 0, to = 110) talkerVolume: Int, userData: Any?, callback: PlanetKitRequestCallback?): Boolean
    • fun setPeerVolumeLevelSetting(peer: PlanetKitUser, @IntRange(from = 0, to = 110) talkerVolume: Int, userData: Any?, callback: PlanetKitRequestCallback?): Boolean

비디오 성능 설정 API 개선

  • 비디오 성능(capability) 설정 API에서 섬네일 해상도는 더 이상 지원하지 않습니다.
  • 비디오 하드웨어 코덱 설정은 이제 각 1대1 통화 또는 그룹 통화별로 설정하는 대신 PlanetKit을 통해 설정됩니다.

API

변경
  • PlanetKitVideoCapability class 1-to-1 callGroup call

    이전 버전PlanetKit 6.0.0
    val maxResolution: PlanetKitVideoResolutionval maxResolution: PlanetKitVideoResolutionCapability
추가
  • PlanetKitVideoResolutionCapability enum class 1-to-1 callGroup call
    • QVGA(2)
    • VGA(3)
    • HD(4)
  • PlanetKitPreferredHardwareCodec data class 1-to-1 callGroup call
    • val callVideoSend: Boolean
    • val callVideoReceive: Boolean
    • val conferenceVideoSend: Boolean
    • val conferenceVideoReceive: Boolean
  • PlanetKit object 1-to-1 callGroup call
    • fun getCallDeviceDefaultVideoSendCapability(): PlanetKitVideoCapability?
    • fun getCallDeviceDefaultVideoReceiveCapability(): PlanetKitVideoCapability?
    • fun getConferenceDeviceDefaultVideoSendCapability(): PlanetKitVideoCapability?
    • fun getConferenceDeviceDefaultVideoReceiveCapability(): PlanetKitVideoCapability?
    • fun setPreferredHardwareCodec(preferredHardwareCodec: PlanetKitPreferredHardwareCodec)
    • fun getPreferredHardwareCodec(): PlanetKitPreferredHardwareCodec
삭제
  • PlanetKitVideoCapability class 1-to-1 callGroup call
    • preferredHwCodec: Boolean

setVideoSourceclearVideoSourcesetCustomVideoSourceclearCustomVideoSource로 이름 변경

  • API 이름을 더 명확하게 변경했습니다.

API

변경
  • PlanetKitCall interface 1-to-1 call

    이전 버전PlanetKit 6.0.0
    fun setVideoSource(videoSource: PlanetKitCustomVideoSource)fun setCustomVideoSource(videoSource: PlanetKitCustomVideoSource)
    fun clearVideoSource()fun clearCustomVideoSource()
  • PlanetKitConference interface Group call

    이전 버전PlanetKit 6.0.0
    fun setVideoSource(videoSource: PlanetKitCustomVideoSource)fun setCustomVideoSource(videoSource: PlanetKitCustomVideoSource)
    fun clearVideoSource()fun clearCustomVideoSource()

ConferenceListener의 사용되지 않는 콜백 제거

  • 더 이상 사용되지 않는 API를 제거했습니다.
  • 이제 ConferenceListener.onPeerListUpdated를 사용하여 참여한 피어 수에 대한 정보를 얻을 수 있습니다.

API Change

삭제
  • ConferenceListener interface Group call
    • fun onRoomUpdated(joinedPeerCount: Int)

setSpeakerOnisSpeakerOn 메서드를 PlanetKitAudioSwitch로 이동

  • setSpeakerOn 메서드를 PlanetKitCallPlanetKitConference에서 PlanetKitAudioSwitch로 이동했습니다. 이 메서드는 이제 성공 또는 실패를 나타내는 Boolean을 반환합니다.
  • isSpeakerOn 메서드를 PlanetKitCallPlanetKitConference에서 PlanetKitAudioSwitch로 이동했습니다.

API

변경
  • PlanetKitCall class 1-to-1 call

    이전 버전PlanetKit 6.0.0
    fun setSpeakerOn(isSpeakerOn: Boolean)PlanetKitAudioSwitch::fun setSpeakerOn(isSpeakerOn: Boolean): Boolean
    val isSpeakerOn: BooleanPlanetKitAudioSwitch::val isSpeakerOn: Boolean
  • PlanetKitConference class Group call

    이전 버전PlanetKit 6.0.0
    fun setSpeakerOn(isSpeakerOn: Boolean)PlanetKitAudioSwitch::fun setSpeakerOn(isSpeakerOn: Boolean): Boolean
    val isSpeakerOn: BooleanPlanetKitAudioSwitch::val isSpeakerOn: Boolean

외장 카메라 지원

  • 이번 릴리스에서는 외장(USB) 카메라 지원이 추가되었습니다.
  • 외장 카메라 지원 가능 여부는 Android 기기에 따라 다릅니다.
    • 외장 카메라를 사용하려면 Android 기기가 android.hardware.camera.external 기능을 지원해야 합니다.
    • 이는 packageManager.hasSystemFeature(PackageManager.FEATURE_CAMERA_EXTERNAL) 또는 adb shell pm list features | grep "android.hardware.camera.external"을 사용하여 확인할 수 있습니다.

예제 코드

  • 외장 카메라로 전환하기
  PlanetKit.getCameraManager().startPreview(yourVideoView)
...

if (PlanetKitCameraType.EXTERNAL.isAvailable) {
PlanetKit.getCameraManager().cameraType = PlanetKitCameraType.EXTERNAL
}
  • 외장 카메라 사용 가능 여부 관찰하기
  private val usbCameraAvailabilityListener = UsbCameraAvailabilityListener { isAvailable ->
// For example, update your UI components based on camera availability.
}

fun onViewCreated() {
PlanetKit.getCameraManager().addUsbCameraAvailabilityListener(usbCameraAvailabilityListener)
}

fun onDestroyView() {
PlanetKit.getCameraManager().removeUsbCameraAvailabilityListener(usbCameraAvailabilityListener)
}

API

추가
  • PlanetKitCameraType enum class 1-to-1 callGroup call
    • EXTERNAL
  • PlanetKitCameraManager interface 1-to-1 callGroup call
    • val supportDeviceFeatureExternalCamera: Boolean
    • fun interface UsbCameraAvailabilityListener
    • fun addUsbCameraAvailabilityListener(listener: UsbCameraAvailabilityListener)
    • fun removeUsbCameraAvailabilityListener(listener: UsbCameraAvailabilityListener)