릴리스 노트
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 callAUDIO_MANAGER
AUDIO_DRIVER
PlanetKitVerifyCallParam.Builder
class 1-to-1 callfun setMicMuteControlMethod(value: PlanetKitMicMuteControlMethod)
PlanetKitMakeCallParam.Builder
class 1-to-1 callfun setMicMuteControlMethod(value: PlanetKitMicMuteControlMethod)
PlanetKitConferenceParam.Builder
class Group callfun setMicMuteControlMethod(value: PlanetKitMicMuteControlMethod)
커스텀 오디오 소스를 위한 AudioSource
를 PlanetKitCustomAudioSource
로 교체
- 이전 버전에서 커스텀 오디오 소스를 구현하려면
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 callPlanetKitCall
interface 1-to-1 callfun clearCustomAudioSource()
PlanetKitConference
interface Group callfun 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 callval isRecordOnCloudEnabled: Boolean
영상 통화 활성화 시 응답 유형 설정 API 제거
- 이제 1대1 음성 통화에서 상대방이 영상 통화를 활성화할 때 로컬 사용자의 비디오는 항상 일시 정지 상태로 설정됩니다.
- 이전 버전에서는 상대방이 음성 통화를 영상 통화로 전환할 때 로컬 사용자의 비디오 전송을 자동으로 시작할지
responseOnEnableVideo()
를 사용하여 결정할 수 있었습니다. - 그러나 이 API는 개인정보 보호 문제와 잠재적 오용 가능성 때문에 버전 6.0에서 제거하고,
onVideoEnabledByPeer
는onVideoEnabledByPeerAndMyVideoPaused
으로 변경했습니다. - 따라서 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 callPlanetKitMakeCallParam.Builder
class 1-to-1 callfun responseOnEnableVideo(responseOnEnableVideo: PlanetKitResponseOnEnableVideo)
PlanetKitVerifyCallParam.Builder
class 1-to-1 callfun responseOnEnableVideo(responseOnEnableVideo: PlanetKitResponseOnEnableVideo)
피어 볼륨 설정 API 개선
- 이전의 서브그룹 기반 볼륨 제어를 개별 피어에 대한 통합 볼륨 설정 API로 대체했습니다.
- 6.0 이전 버전에서는 서브그룹별로 볼륨이 제어되었습니다. 6.0 버전부터는 서브그룹과 상관없이 볼륨을 설정할 수 있습니다.
- 이 사양 변경에 따라 관련 API를 수정했습니다.
API
변경
-
PlanetKitConferencePeer
class Group call이전 버전 PlanetKit 6.0.0 fun getAudioVolumeLevelSetting(subgroupName: String?): AudioVolumeResult
fun getAudioVolumeLevelSetting(): AudioVolumeResult
추가
PlanetKitPeerControl
class Group callfun setVolumeLevelSetting(@IntRange(from = 0, to = 110) volumeLevel: Int, userData: Any? = null, callback: PlanetKitRequestCallback? = null): Boolean
PlanetKitPeerView
class Group callfun setVolumeLevelSetting(@IntRange(from = 0, to = 110) volumeLevel: Int, userData: Any? = null, callback: PlanetKitRequestCallback? = null): Boolean
삭제
PlanetKitSubgroup
interface Group callfun getPeerVolumeLevelSetting(user: PlanetKitUser): Int
PlanetKitSubgroupManager
interface Group callfun 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: PlanetKitVideoResolution
val maxResolution: PlanetKitVideoResolutionCapability
추가
PlanetKitVideoResolutionCapability
enum class 1-to-1 callGroup callQVGA(2)
VGA(3)
HD(4)
PlanetKitPreferredHardwareCodec
data class 1-to-1 callGroup callval callVideoSend: Boolean
val callVideoReceive: Boolean
val conferenceVideoSend: Boolean
val conferenceVideoReceive: Boolean
PlanetKit
object 1-to-1 callGroup callfun getCallDeviceDefaultVideoSendCapability(): PlanetKitVideoCapability?
fun getCallDeviceDefaultVideoReceiveCapability(): PlanetKitVideoCapability?
fun getConferenceDeviceDefaultVideoSendCapability(): PlanetKitVideoCapability?
fun getConferenceDeviceDefaultVideoReceiveCapability(): PlanetKitVideoCapability?
fun setPreferredHardwareCodec(preferredHardwareCodec: PlanetKitPreferredHardwareCodec)
fun getPreferredHardwareCodec(): PlanetKitPreferredHardwareCodec
삭제
PlanetKitVideoCapability
class 1-to-1 callGroup callpreferredHwCodec: Boolean
setVideoSource
와 clearVideoSource
를 setCustomVideoSource
와 clearCustomVideoSource
로 이름 변경
- 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 callfun onRoomUpdated(joinedPeerCount: Int)
setSpeakerOn
및 isSpeakerOn
메서드를 PlanetKitAudioSwitch
로 이동
setSpeakerOn
메서드를PlanetKitCall
및PlanetKitConference
에서PlanetKitAudioSwitch
로 이동했습니다. 이 메서드는 이제 성공 또는 실패를 나타내는Boolean
을 반환합니다.isSpeakerOn
메서드를PlanetKitCall
및PlanetKitConference
에서PlanetKitAudioSwitch
로 이동했습니다.
API
변경
-
PlanetKitCall
class 1-to-1 call이전 버전 PlanetKit 6.0.0 fun setSpeakerOn(isSpeakerOn: Boolean)
PlanetKitAudioSwitch::fun setSpeakerOn(isSpeakerOn: Boolean): Boolean
val isSpeakerOn: Boolean
PlanetKitAudioSwitch::val isSpeakerOn: Boolean
-
PlanetKitConference
class Group call이전 버전 PlanetKit 6.0.0 fun setSpeakerOn(isSpeakerOn: Boolean)
PlanetKitAudioSwitch::fun setSpeakerOn(isSpeakerOn: Boolean): Boolean
val isSpeakerOn: Boolean
PlanetKitAudioSwitch::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"
을 사용하여 확인할 수 있습니다.
- 외장 카메라를 사용하려면 Android 기기가
예제 코드
- 외장 카메라로 전환하기
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 callEXTERNAL
PlanetKitCameraManager
interface 1-to-1 callGroup callval supportDeviceFeatureExternalCamera: Boolean
fun interface UsbCameraAvailabilityListener
fun addUsbCameraAvailabilityListener(listener: UsbCameraAvailabilityListener)
fun removeUsbCameraAvailabilityListener(listener: UsbCameraAvailabilityListener)