본문으로 건너뛰기

PlanetKit 4.4에서 5.5로 마이그레이션하기

PlanetKit 4.4에서 PlanetKit 5.5로 마이그레이션하기 위한 절차와 고려 사항을 상세히 설명합니다.

요구 사항​

SDK 배포 채널을 Maven Central Repository로 변경​

  • Android용 PlanetKit은 버전 5.3.3부터 Maven Central Repository를 통해 배포됩니다.

  • 프로젝트에 Maven Central Repository가 설정되어 있지 않다면 다음과 같이 저장소를 추가하세요.

    // Root-level build.gradle
    allprojects {
    repositories {
    mavenCentral()
    }
    }
  • 모듈 build.gradle에 종속 항목(dependency)을 추가하세요.

    // module-level build.gradle
    dependencies {
    ...
    implementation 'com.linecorp.planetkit:planetkit:5.5.2'
    ...
    }

Android 12 이상에서 Bluetooth 연결에 권한 필요​

  • Android 12(API 레벨 31) 이상의 Android 기기에서 Bluetooth 연결을 위해 BLUETOOTH_CONNECT 권한이 필요합니다. Android 문서를 참조하세요.
  • Android 12 이상에서 BLUETOOTH_CONNECT 권한이 부여되지 않으면 Bluetooth API의 작동을 보장할 수 없어 일부 문제가 발생할 수 있습니다.
  • 따라서 이 경우, 사용자의 기기가 Bluetooth로 연결되어 있더라도 PlanetKit은 Bluetooth로 전환하지 않습니다.
  • Bluetooth 기기와 통신하기 위해 BLUETOOTH_CONNECT 권한을 요청하세요.

런타임에 권한 요청하기​

  • BLUETOOTH_CONNECT의 보호 수준은 위험(런타임 권한)으로 정의됩니다.
  • 따라서 Bluetooth를 사용할 때는 사용자의 동의가 필요하며, 일부 UX 시나리오가 필요할 수 있습니다.
  • 이러한 UX 시나리오는 애플리케이션에 따라 다를 수 있습니다. 예를 들어, 데모 앱과 LINE 앱은 사용자가 오디오 경로 메뉴에서 Bluetooth를 선택하면 권한 요청 팝업을 표시합니다.

예제 코드​

  • 이 샘플 코드는 오디오 경로 메뉴에서 Bluetooth를 선택하는 예시입니다.

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
    if (ContextCompat.checkSelfPermission(
    context,
    Manifest.permission.BLUETOOTH_CONNECT
    ) != PackageManager.PERMISSION_GRANTED) {
    ActivityCompat.requestPermissions(context, arrayOf(Manifest.permission.BLUETOOTH_CONNECT), 0)
    return
    }
    }
    call?.getAudioSwitch()?.setAudioRoute(PlanetKitAudioRoute.BLUETOOTH)

PlanetKit에 필요한 Android 권한 명시​

  • PlanetKit에 필요한 권한은 PlanetKit의 AndroidManifest.xml 파일에 명시되어 있습니다.

  • 앱의 AndroidManifest.xml에 이미 이러한 권한 중 일부가 포함되어 있는 경우 중복이 있을 수 있지만 문제가 되지는 않습니다.

  • PlanetKit에서 필요한 권한 목록은 다음과 같습니다.

    <!--AndroidManifest.xml of PlanetKit-->
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
    <uses-permission android:name="android.permission.BLUETOOTH"
    android:maxSdkVersion="30"/>
    <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />

targetSdkVersion에 따른 앱 구현 요구 사항​

  • 데모 앱 코드가 targetSdkVersion 34 이상의 요구 사항을 충족하도록 업데이트되었습니다.
  • 데모 앱 코드를 참조하여 앱을 업데이트해 주세요.
유형영향 받는 버전요구 사항참조
POST_NOTIFICATIONStargetSdkVersion 33 이상Android 13(API 레벨 33) 이상의 Android 기기에서 알림을 게시하려면 POST_NOTIFICATIONS 권한이 필요합니다.POST_NOTIFICATIONS
포그라운드 서비스 유형targetSdkVersion 34 이상필요한 권한으로 포그라운드 서비스를 구현합니다. 앱의 사용 사례에 따라 FOREGROUND_SERVICE_MICROPHONE, FOREGROUND_SERVICE_MEDIA_PLAYBACK, FOREGROUND_SERVICE_MEDIA_PROJECTION 등 다양한 포그라운드 권한이 있습니다.포그라운드 서비스 유형은 필수 항목임

마이그레이션​

Breaking change PlanetKit 초기화 개선​

  • 파일 입출력 등의 처리를 위해 PlanetKit의 초기화가 작업자 스레드에서 처리되도록 변경되었습니다.
  • 초기화가 완료되면 OnInitializeCompleteListener.onComplete()가 호출됩니다.
  • userAgent 및 isVideoHwCodecSupport 정보는 onComplete에 의해 제공되므로 관련 API가 삭제되었습니다.

API 변경​

변경​
  • PlanetKit object 1-to-1 callGroup call

    이전 버전PlanetKit 5.5
    val userAgent: StringOnInitializeCompleteListener.onComplete(isSuccessful, isVideoHwCodecSupport, userAgent)
    val isVideoHwCodecSupport: BooleanOnInitializeCompleteListener.onComplete(isSuccessful, isVideoHwCodecSupport, userAgent)
    fun initialize(config: PlanetKitConfiguration)fun initialize(config: PlanetKitConfiguration, listener: OnInitializeCompleteListener)
추가​
  • PlanetKit object 1-to-1 callGroup call
    • fun interface OnInitializeCompleteListener

예제 코드​

class YourApplication : Application() {
override fun onCreate() {
...
val configBuilder = PlanetKit.PlanetKitConfiguration.Builder(this)
.setServerUrl(planet_base_url)
...

PlanetKit.initialize(configBuilder.build()) { isSuccessful, isVideoHwCodecSupport, userAgent ->
// Add implementation in your app if necessary
}
...
}
}

Breaking change PlanetKitSession 인터페이스 제거​

  • PlanetKitCall 및 PlanetKitConference가 PlanetKitSession를 상속하는 구조가 제거되었습니다.
  • 이전에 PlanetKitSession에 있던 공통 기능이 PlanetKitCall 및 PlanetKitConference에 각각 추가되었습니다.

API 변경​

변경​
  • PlanetKitSession interface 1-to-1 callGroup call

    이전 버전PlanetKit 5.5
    interface PlanetKitSessioninterface PlanetKitCall, interface PlanetKitConference
  • OnNoVideoSourceListener interface 1-to-1 callGroup call

    이전 버전PlanetKit 5.5
    fun onNoVideoSource(session: PlanetKitSession)fun onMyVideoNoSourceDetected(call: PlanetKitCall), fun onMyVideoNoSourceDetected(conference: PlanetKitConference)

Breaking change DefaultCameraVideoSource를 PlanetKitCameraManager로 교체​

  • PlanetKitCameraManager 인터페이스는 PlanetKit 내에서 카메라 작업을 관리하기 위한 메서드와 속성을 제공합니다. PlanetKit에서 제공하는 카메라 기능을 캡슐화하여 카메라 설정 구성과 상태 변경 이벤트 구독을 가능하게 합니다.
  • 카메라 장치 제어 정책 변경
    • 5.5 버전부터는 다음 조건 중 하나 이상이 충족되면 카메라 장치가 켜지고, 모두 충족되지 않으면 꺼집니다.
      • PlanetKitCameraManager.startPreview()를 통해 미리보기를 렌더링하는 PlanetKitVideoView가 하나 이상 존재
      • PlanetKitCall 또는 PlanetKitConference가 연결 상태이고 PlanetKitMyMediaStatus.myVideoStatus.videoState가 ENABLED인 상태

API 변경​

변경​
  • PlanetKit object 1-to-1 callGroup call

    이전 버전PlanetKit 5.5
    fun getDefaultCameraVideoSource(): DefaultCameraVideoSourcefun getCameraManager(): PlanetKitCameraManager
추가​
  • PlanetKitCameraManager interface 1-to-1 callGroup call
    • val resolution: PlanetKitCameraResolution
    • var cameraType: PlanetKitCameraType
    • val isStarted: Boolean
    • val fps: Int
    • fun setStateListener(listener: StateListener?)
    • fun setManualResolution(resolution: PlanetKitCameraResolution)
    • fun setDefaultResolution()
    • fun setVirtualBackgroundPlugin(plugin: PlanetKitPluginVirtualBackground) :Boolean
    • fun addCameraTypeChangedListener(listener: CameraTypeChangedListener)
    • fun removeCameraTypeChangedListener(listener: CameraTypeChangedListener)
    • fun setVideoSourceInterceptor(interceptor: PlanetKitVideoInterceptor?)
    • fun startPreview(view: PlanetKitVideoView): Boolean
    • fun stopPreview(view: PlanetKitVideoView): Boolean
    • fun enableDumpFrame(enable: Boolean)
  • PlanetKitCameraManager.StateListener interface 1-to-1 callGroup call
    • fun onStart()
    • fun onStop()
    • fun onError(@ErrorCode code: Int)
  • PlanetKitCameraManager.CameraTypeChangedListener interface 1-to-1 callGroup call
    • fun onChanged(isFrontCamera: Boolean)
  • PlanetKitCameraResolution enum class 1-to-1 callGroup call
    • QVGA
    • VGA
    • HD
삭제​
  • DefaultCameraVideoSource class 1-to-1 callGroup call

예제 코드​

클래스 획득 방법​
  • 이전 버전에서 카메라 속성을 다루는 방법은 다음과 같습니다.

    fun userFunction() {
    PlanetKit.getDefaultCameraVideoSource().cameraType = PlanetKitCameraType.FRONT
    //...
    }
  • 5.5 버전부터 카메라 속성을 다루는 방법은 다음과 같습니다.

    fun userFunction() {
    PlanetKit.getCameraManager().cameraType = PlanetKitCameraType.FRONT
    //...
    }
카메라 미리보기 사용 방법​
  • 이전 버전에서 카메라 미리보기를 다루는 방법은 다음과 같습니다.

    val isCameraUsedByAnotherClass: Boolean

    fun startRenderPreviewOnMyVideoView(view: PlanetKitVideoView) {
    PlanetKit.getDefaultCameraVideoSource().addMyVideoView(view)
    if (!PlanetKit.getDefaultCameraVideoSource()) {
    PlanetKit.getDefaultCameraVideoSource().start()
    }
    }

    fun stopRenderPreviewOnMyVideoView(view: PlanetKitVideoView) {
    PlanetKit.getDefaultCameraVideoSource().removeMyVideoView(view)

    /* Check If Camera should be stopped */
    if (isCameraUsedByAnotherClass == false) {
    PlanetKit.getDefaultCameraVideoSource().stop()
    }
    }
  • 5.5 버전부터 카메라 미리보기를 다루는 방법은 다음과 같습니다.

    fun startRenderPreviewOnMyVideoView(view: PlanetKitVideoView) {
    PlanetKit.getCameraManager().startPreview(view)
    }

    fun stopRenderPreviewOnMyVideoView(view: PlanetKitVideoView) {
    PlanetKit.getCameraManager().stopPreview(view)
    }

Breaking change API에서 API key 사용 중단​

  • API key 사용은 더 이상 지원되지 않습니다. 액세스 토큰을 사용하세요.
  • 관련 API들이 deprecated 처리되었습니다.

API 변경​

삭제​
  • PlanetKitDisconnectReason enum 1-to-1 callGroup call
    • SERVICE_APIKEY_ERROR
  • PlanetKitCallParam class 1-to-1 call
    • val apiKey: String?
  • PlanetKitCallParam.Builder class 1-to-1 call
    • fun apiKey(apiKey: String)
  • PlanetKitConferenceParam class Group call
    • val apiKey: String?
  • PlanetKitConferenceParam.Builder class Group call
    • fun apiKey(apiKey: String)

Breaking change 로그 설정 업데이트​

  • 로깅 정책에 따라 적절한 PlanetKitLogLevel 및 PlanetKitLogSizeLimit을 사용할 수 있습니다.
  • 로그 파일의 크기를 설정할 수 있습니다.
  • 로그 레벨이 단순화되었습니다.
  • PlanetKit 로그가 암호화되었습니다.
  • 콘솔 로그 출력이 제거되었습니다.
  • 관련 API들이 변경되었습니다.

API 변경​

변경​
  • PlanetKitLogLevel enum class 1-to-1 callGroup call

    이전 버전PlanetKit 5.5
    VERBOSEDETAILED
    DEBUGDETAILED
    INFOSIMPLE
    WARNSIMPLE
    ERRORSIMPLE
    CRITICALSIMPLE
    NONESILENT
추가​
  • PlanetKitLogSizeLimit enum class 1-to-1 callGroup call
  • PlanetKitConfiguration.Builder class 1-to-1 callGroup call
  • fun setLogSizeLimit(logSizeLimit: PlanetKitLogSizeLimit)
삭제​
  • PlanetKitConfiguration.Builder class 1-to-1 callGroup call

    • fun logToConsole( isEnabled: Boolean )
  • PlanetKitConfiguration.Builder class 1-to-1 callGroup call

    이전 버전PlanetKit 5.5
    fun serverUrl( serverUrl: String )fun setServerUrl( serverUrl: String )
    fun logToFile( isEnabled: Boolean )fun enableLog( isEnabled: Boolean )
    fun logLevel( logLevel: PlanetKitLogLevel )fun setLogLevel( logLevel: PlanetKitLogLevel )

예제 코드​

class YourApplication : Application()
{
override fun onCreate()
{
...
val configBuilder = PlanetKit.PlanetKitConfiguration.Builder(this)
.setServerUrl(planet_base_url)
.enableLog(true)
.setLogLevel(PlanetKitLogLevel.DETAILED)
.setLogSizeLimit(PlanetKitLogSizeLimit.LARGE)
...

PlanetKit.initialize(configBuilder.build()) { isSuccessful, isVideoHwCodecSupport, userAgent ->
...
}
...
}
}

Breaking change PlanetKitCall 업데이트​

  • acceptCall() 함수에서 mediaType 파라미터가 제거되었습니다.
  • hold() 함수에서 pauseRecv 파라미터가 제거되었습니다.

API 변경​

변경​
  • PlanetKitCall interface 1-to-1 call

    이전 버전PlanetKit 5.5
    fun acceptCall(mediaType:PlanetKitMediaType, listener:AcceptCallListener)fun acceptCall(listener: AcceptCallListener, initialMyVideoState: PlanetKitInitialMyVideoState = PlanetKitInitialMyVideoState.RESUME, useResponderPreparation: Boolean = false, recordOnCloud: Boolean = false)
    fun acceptCall(mediaType:PlanetKitMediaType, listener:AcceptCallListener, callInitData:PlanetKitCallInitData = PlanetKitCallInitData())fun acceptCall(listener: AcceptCallListener, callStartMessage: PlanetKitCallStartMessage, initialMyVideoState: PlanetKitInitialMyVideoState = PlanetKitInitialMyVideoState.RESUME, useResponderPreparation: Boolean = false, recordOnCloud: Boolean = false)
    fun hold(pauseRecv:Boolean, reason:String? = null, callback:PlanetKitRequestCallback? = null): Booleanfun hold(reason: String? = null, callback: PlanetKitRequestCallback? = null): Boolean
    fun hold(pauseRecv:Boolean, callback: PlanetKitRequestCallback? = null): Booleanfun hold(reason:String? = null, callback: PlanetKitRequestCallback? = null): Boolean
    fun hold(pauseRecv:Boolean, reason:String? = null): Booleanfun hold(reason:String? = null, callback: PlanetKitRequestCallback? = null): Boolean
    fun hold(pauseRecv:Boolean): Booleanfun hold(reason:String? = null, callback: PlanetKitRequestCallback? = null): Boolean

Breaking change PlanetKitCCParam 추가​

  • PlanetKitCCParam은 클라우드 서버로부터 수신된 메시지 데이터를 나타내는 클래스입니다.
  • PlanetKitCCParam은 통화 정보를 미리 알 수 있게 해줍니다.
  • PlanetKitCCParam을 생성하려면 메시지 데이터가 필요합니다.
  • 또한, verifyCall()을 수행할 때 메시지 데이터 대신 PlanetKitCCParam을 사용하도록 변경되었습니다.

API 변경​

추가​
  • PlanetKitCCParam class 1-to-1 call
    • val peerId: String
    • val peerServiceId: String
    • val mediaType: PlanetKitMediaType
    • fun create(messageData: String): PlanetKitCCParam?
변경​
  • PlanetKitVerifyCallParam class 1-to-1 call

    이전 버전PlanetKit 5.5
    val messageData: Stringval cCParam: PlanetKitCCParam
  • PlanetKitVerifyCallParam.Builder class 1-to-1 call

    이전 버전PlanetKit 5.5
    fun messageData(messageData: String)fun cCParam(cCParam: PlanetKitCCParam)

예제 코드​

override fun onMessageReceived(message: RemoteMessage) {
val cCParamStr = message.data["cc_param"]

/// PlanetKit 4.4
val param = PlanetKitVerifyCallParam.Builder().messageData(cCParamStr)
...

/// PlanetKit 5.5
val planetCCParam = PlanetKitCCParam.create(CParamStr)
Log.d("PushMessage", "ccParam{peerId=${planetCCParam.peerId}, peerServiceId=${planetCCParam.peerServiceId}, mediaType=${planetCCParam.mediaType}")
val param = PlanetKitVerifyCallParam.Builder().cCParam(planetCCParam)
...
}

Breaking change PlanetKitCallInitData의 이름과 인터페이스 변경​

  • 더 명확한 이름인 PlanetKitCallStartMessage로 변경되었으며, 이는 PlanetKitCallInitData의 동작과 일치합니다.
  • useResponderPreparation은 PlanetKitCallStartMessage와는 다른 기능이기 때문에 PlanetKitCallStartMessage에서 분리되었습니다.
  • PlanetKitCallStartMessage의 최대 크기는 200바이트로 제한됩니다.
  • 관련 API들이 변경되었습니다.

API 변경​

추가​
  • PlanetKitCall interface 1-to-1 call
    • val myUseResponderPreparation: Boolean
    • val myCallStartMessage: PlanetKitCallStartMessage?
    • val peerUseResponderPreparation: Boolean
    • val peerCallStartMessage: PlanetKitCallStartMessage?
    • fun acceptCall( listener: AcceptCallListener, useResponderPreparation: Boolean = false )
    • fun acceptCall( listener: AcceptCallListener, callStartMessage: PlanetKitCallStartMessage, useResponderPreparation: Boolean = false )
  • PlanetKitCallConnectedParam data class 1-to-1 call
    • val peerStartMessage: PlanetKitCallStartMessage?
    • val isInResponderPreparation: Boolean
  • PlanetKitCallStartMessage data class 1-to-1 call
    • val data: String
삭제​
  • PlanetKitCall interface 1-to-1 call
    • val myCallInitData: PlanetKitCallInitData?
    • val peerCallInitData: PlanetKitCallInitData?
    • fun acceptCall(mediaType: PlanetKitMediaType, listener: AcceptCallListener, callInitData:PlanetKitCallInitData )
    • fun acceptCall( listener: AcceptCallListener, callInitData: PlanetKitCallInitData = PlanetKitCallInitData() )
  • PlanetKitCallInitData class 1-to-1 call
변경​
  • CallListener interface 1-to-1 call

    이전 버전PlanetKit 5.5
    fun onVerified(call: PlanetKitCall, callerInitData: PlanetKitCallInitData)fun onVerified(call: PlanetKitCall, peerStartMessage: PlanetKitCallStartMessage?, peerUseResponderPreparation: Boolean)
    fun onConnected(call: PlanetKitCall, calleeInitData: PlanetKitCallInitData)fun onConnected(call: PlanetKitCall, param: PlanetKitCallConnectedParam)
  • AcceptCallListener interface 1-to-1 call

    이전 버전PlanetKit 5.5
    fun onConnected( call:PlanetKitCall, calleeInitData: PlanetKitCallInitData )fun onConnected( call: PlanetKitCall, param: PlanetKitCallConnectedParam )
  • MakeCallListener interface 1-to-1 call

    이전 버전PlanetKit 5.5
    fun onConnected( call:PlanetKitCall, calleeInitData: PlanetKitCallInitData )fun onConnected( call: PlanetKitCall, param: PlanetKitCallConnectedParam )
  • VerifyListener interface 1-to-1 call

    이전 버전PlanetKit 5.5
    fun onVerified(call: PlanetKitCall, callerInitData: PlanetKitCallInitData)fun onVerified(call: PlanetKitCall, peerStartMessage: PlanetKitCallStartMessage?, peerUseResponderPreparation: Boolean)
  • PlanetKitCallParam class 1-to-1 call

    이전 버전PlanetKit 5.5
    val callInitData: Stringval callStartMessage: PlanetKitCallStartMessage?
    val isResponderPrepare: Booleanval useResponderPreparation: Boolean
  • PlanetKitCallParam.Builder class 1-to-1 call

    이전 버전PlanetKit 5.5
    fun callInitData(callInitData: String)fun callStartMessage(callStartMessage: PlanetKitCallStartMessage)
    fun responderPrepare(isResponderPrepare: Boolean)fun responderPreparation(useResponderPreparation: Boolean)

예제 코드​

val paramBuilder = PlanetKitCallParam.Builder()
.peerId(targetId)
.responderPreparation(true)
val callStartMessage = PlanetKitCallStartMessage.create("Hello")
if (callStartMessage == null) {
Log.w(TAG, "Could not create call start message.\n"
+ "Plz check data size. The maximum size of data allowed is 200 bytes."
)
return
}
paramBuilder.callStartMessage(callStartMessage)

val callParam = paramBuilder.build()
PlanetKit.makeCall(param, callListener)

Breaking change CallListener의 onVerified와 onConnected 파라미터 변경​

  • 파라미터의 이름을 동작과 일치하는 더 명확한 이름으로 변경했습니다.
  • 변경된 파라미터에는 더 많은 정보가 포함되어 있습니다.
  • 관련 API가 변경되었습니다.

API 변경​

추가​
  • PlanetKitCallConnectedParam data class 1-to-1 call
    • val isDataSessionSupported: Boolean
    • val isVideoHwCodecEnabled: Boolean
    • val peerStartMessage: PlanetKitCallStartMessage?
    • val isInResponderPreparation: Boolean
    • val shouldFinishPreparation: Boolean
변경​
  • CallListener interface 1-to-1 call

    이전 버전PlanetKit 5.5
    fun onConnected(call: PlanetKitCall, calleeInitData: PlanetKitCallInitData)fun onConnected(call: PlanetKitCall, param: PlanetKitCallConnectedParam)
  • AcceptCallListener interface 1-to-1 call

    이전 버전PlanetKit 5.5
    fun onConnected( call:PlanetKitCall, calleeInitData: PlanetKitCallInitData )fun onConnected( call: PlanetKitCall, param: PlanetKitCallConnectedParam )
  • MakeCallListener interface 1-to-1 call

    이전 버전PlanetKit 5.5
    fun onConnected( call:PlanetKitCall, calleeInitData: PlanetKitCallInitData )fun onConnected( call: PlanetKitCall, param: PlanetKitCallConnectedParam )
  • VerifyListener interface 1-to-1 call

    이전 버전PlanetKit 5.5
    fun onVerified(call: PlanetKitCall, callerInitData: PlanetKitCallInitData)fun onVerified(call: PlanetKitCall, peerStartMessage: PlanetKitCallStartMessage?, peerUseResponderPreparation: Boolean)

Breaking change 의미 없는 API PlanetKitCall.reject() 제거​

  • 수신 전화를 거부할 때에도 reject() 대신 endCall() 함수를 사용해야 하므로 reject()를 제거했습니다.

API 변경​

삭제​
  • PlanetKitCall interface 1-to-1 call
    • fun reject()

Breaking change PlanetKitConferencePeer 업데이트​

PlanetKitConferencePeer​

  • 피어 정보를 나타내던 PlanetKitConferencePeerInfo가 PlanetKitConferencePeer에 통합되었습니다.
  • PlanetKitConferencePeerInfo는 5.0 버전부터 더 이상 사용되지 않으며, PlanetKitConferencePeer로 대체되었습니다.
  • PlanetKitConferencePeerInfo를 사용하는 다른 모든 API는 PlanetKitConferencePeer를 사용하는 API로 대체되었습니다.
  • PlanetKitConferencePeer에 새로운 API가 추가되었으니 문서를 참조해 주세요.

AudioVolumeResult​

  • getAudioVolumeLevelSetting() 함수의 반환 값을 나타냅니다.

HoldStatus​

  • 이 사용자가 통화를 일시 정지 중인지와 통화가 일시 정지된 이유에 대한 정보를 나타냅니다.

PeerGetFailReason​

  • getVideoStatus(), getScreenShareState() 및 getAudioVolumeLevelSetting() 실패의 원인을 나타냅니다.

ScreenShareStateResult​

  • getScreenShareState() 호출의 반환 값을 나타냅니다.

VideoStatusResult​

  • getVideoStatus() 함수의 반환 값을 나타냅니다.

getAudioVolumeLevelSetting()​

  • 해당 서브그룹에서 주어진 사용자의 볼륨 레벨을 가져옵니다. (최소: 0, 최대: 110)
  • audioVolume를 대체합니다.

getScreenShareState()​

  • 이 멤버의 PlanetKitSubgroup에서의 화면 공유 상태를 반환합니다.
  • screenSharingState를 대체합니다.

getVideoStatus()​

  • 이 멤버의 PlanetKitSubgroup에서의 비디오 상태를 반환합니다.
  • videoStatus를 대체합니다.

audioSubgroupName​

audioTaggedSubgroupName​

displayName​

  • PlanetKitConferencePeerInfo.displayName을 대체합니다.

holdStatus​

  • PlanetKitConferencePeerInfo.holdReason과 PlanetKitConferencePeerInfo.isOnHold를 대체합니다.

isAudioMuted​

  • PlanetKitConferencePeerInfo.isAudioMuted를 대체합니다.

isDataSessionSupported​

  • PlanetKitConferencePeerInfo.isDataSessionSupport를 대체합니다.

mediaType​

  • PlanetKitConferencePeerInfo.mediaType를 대체합니다.

currentScreenShareSubgroupName​

  • var screenSharingSubgroupName: String?을 대체합니다.

serviceId​

  • PlanetKitConferencePeerInfo.serviceId를 대체합니다.

sipDeviceInfo​

  • PlanetKitConferencePeerInfo.sipDeviceInfo를 대체합니다.

sipLocalIP​

  • PlanetKitConferencePeerInfo.sipLocalIP를 대체합니다.

subgroupNames​

  • PlanetKitConferencePeerInfo.subgroupNames를 대체합니다.

user​

  • PlanetKitConferencePeerInfo.user를 대체합니다.

userEquipmentType​

  • PlanetKitConferencePeerInfo.userEquipmentType를 대체합니다.

userId​

  • PlanetKitConferencePeerInfo.userId를 대체합니다.

currentVideoSubgroupName​

  • PlanetKitConferencePeerInfo.videoSubgroupName을 대체합니다.

PlanetKitConferencePeerInfo.videoTaggedSubgroupName​

  • 5.0 버전부터 deprecated되었습니다.
  • 유용성이 부족하여 더 이상 사용되지 않습니다.

API 변경​

변경​
  • PlanetKitConferencePeerInfo class Group call

    이전 버전PlanetKit 5.5
    val serviceId: StringPlanetKitConferencePeer::val serviceId: String
    val user: PlanetKitUserPlanetKitConferencePeer::val user: PlanetKitUser
    val userId: StringPlanetKitConferencePeer::val userId: String
    var videoSubgroupName: String?PlanetKitConferencePeer::val currentVideoSubgroupName: String?
    val mediaType:PlanetKitMediaTypePlanetKitConferencePeer::val mediaType:PlanetKitMediaType
    val subgroupNames: Set<String>PlanetKitConferencePeer::val subgroupNames:Set<String>
    val isDataSessionSupport: BooleanPlanetKitConferencePeer::val isDataSessionSupported: Boolean
    val isAudioMuted:Boolean: BooleanPlanetKitConferencePeer::val isAudioMuted: Boolean
    val isOnHold:BooleanPlanetKitConferencePeer::val holdStatus: HoldStatus
    val displayName:String?PlanetKitConferencePeer::val displayName:String?
    val userEquipmentType: PlanetKitUserEquipmentTypePlanetKitConferencePeer::val userEquipmentType: PlanetKitUserEquipmentType
    val sipLocalIP: String?PlanetKitConferencePeer::val sipLocalIP: String?
    val sipDeviceInfo:String?PlanetKitConferencePeer::val sipDeviceInfo:String?
    fun isSameMember(member:PlanetKitConferencePeerInfo): BooleanPlanetKitConferencePeer::fun isSameMember(member:PlanetKitConferencePeer):Boolean
  • PlanetKitConferencePeer class Group call

    이전 버전PlanetKit 5.5
    val videoStatus: PlanetKitVideoStatusfun getVideoStatus(subgroupName: String?): VideoStatusResult
    val audioVolume: Int?fun getAudioVolumeLevelSetting(subgroupName: String?): AudioVolumeResult
    val screenSharingSubgroupName: String?val currentScreenShareSubgroupName: String?
    val isDataSessionSupport: Booleanval isDataSessionSupported: Boolean
추가​
  • PlanetKitConferencePeerclass Group call
    • val screenShareSubgroupName:String?
    • enum class PeerGetFailReason
    • data class VideoStatusResult
    • data class ScreenShareStateResult
    • data class AudioVolumeResult
    • data class HoldStatus
    • fun getScreenShareState( subgroupName: String? ): ScreenShareStateResult
    • fun createPeerControl(): PlanetKitPeerControl?
삭제​
  • PlanetKitConferencePeer class Group call
    • var audioSubgroupName: String?
    • var audioTaggedSubgroupName: String?
  • PlanetKitConferencePeerInfo class Group call
    • var videoTaggedSubgroupName: String?

예제 코드​

audioVolume​
  • 이 API는 getAudioVolumeLevelSetting()을 대체합니다.

  • 샘플 코드를 참조해 주세요.

      // In your application
    val conferencePeer: PlanetKitConferencePeer = ...

    // previous version
    val audioVolumeSetting = conferencePeer.audioVolume

    // PlanetKit 5.0
    val result = conferencePeer.getAudioVolumeLevelSetting("Your subscribed Subgroup Name")
    if (result.failReason != PeerGetFailReason.NONE) {
    Log.w(TAG, "Could not get volume level setting. reason=${result.failReason}")
    }
    val audioVolumeSetting = result.volume
getScreenShareState()​
  • 이 API는 screenSharingState를 대체합니다.

  • 샘플 코드를 참조해 주세요.

      // In your application
    val conferencePeer: PlanetKitConferencePeer = ...

    // previous version
    val screenSharingState = conferencePeer.screenSharingState

    // PlanetKit 5.0
    val result = conferencePeer.getScreenShareState("Your subscribed Subgroup Name")
    if (result.failReason != PeerGetFailReason.NONE) {
    Log.w(TAG, "Could not get screenShareState. reason=${result.failReason}")
    }
    val screenShareState = result.screenShareState
getVideoStatus()​
  • 이 API는 videoStatus를 대체합니다.

  • 샘플 코드를 참조해 주세요.

      // In your application
    val conferencePeer: PlanetKitConferencePeer = ...

    // previous version
    val videoStatus = conferencePeer.videoStatus

    // PlanetKit 5.0
    val result = conferencePeer.getVideoStatus("Your subscribed Subgroup Name")
    if (result.failReason != PeerGetFailReason.NONE) {
    Log.w(TAG, "Could not get videoStatus. reason=${result.failReason}")
    }
    val videoStatus = result.videoStatus

Breaking change sendShortData()의 멀티캐스트 제거 및 사양 변경​

  • 모든 피어 중 소수의 피어에게만 데이터를 전송하는 경우, 전송할 데이터의 길이는 피어 목록의 영향을 받습니다. 이는 목록 구성에 따라 전송할 데이터의 길이를 관리하는 어려운 문제로 이어질 수 있습니다.
  • 짧은 데이터는 한 피어나 모든 피어에게 전송될 수 있습니다.
  • PlanetKit 5.2부터 데이터 유형의 크기는 100바이트 이하여야 하고, 짧은 데이터의 크기는 800바이트 이하여야 합니다.

API 변경​

삭제​
  • PlanetKitConference interface Group call
    • fun sendShortData( targetUsers: List<PlanetKitUser>, type: String, shortData: ByteArray): Boolean
    • fun sendShortData( targetUsers: List<PlanetKitUser>, type: String, shortData: ByteArray, userData: Any? = null, callback: PlanetKitRequestCallback? = null): Boolean

예제 코드​

// Previous 4.4
sendShortData( userList, type, data ) // multicast

// since 5.5
for( user in userList) {
sendShortData( user, type, data ) // unicast by iteration
}
// or
sendShortData( type, data ) // to All users

Breaking change 그룹 통화에서 방 속성 제거​

  • PlanetKit 5.2 미만 버전에서는 그룹 통화 참여 시 그룹 통화의 방 유형이 일치하지 않는 경우 WRONG_ROOM_ATTRIBUTE 오류가 발생했습니다.
  • PlanetKit 5.2부터 방 유형을 제거하여 더 이상 확인하지 않으므로 WRONG_ROOM_ATTRIBUTE 통화 종료 이유가 더 이상 사용되지 않습니다.

API 변경​

삭제​
  • PlanetKitConferenceRoomType enum class Group call
  • PlanetKitConferenceParam data class Group call
    • val roomType: PlanetKitConferenceRoomType
  • PlanetKitConferenceParam.Builder class Group call
    • fun roomType(roomType: PlanetKitConferenceRoomType)
  • PlanetKitConference interface Group call
    • val roomType: PlanetKitConferenceRoomType
  • PlanetKitDisconnectReason class 1-to-1 callGroup call
    • WRONG_ROOM_ATTRIBUTE

Breaking change PlanetKitConference의 disableVideo()에서 reason 파라미터를 제거​

  • PlanetKitConference의 disableVideo 메서드의 reason 파라미터는 사용되지 않기 때문에 제거했습니다.
  • PlanetKitMediaDisableReason에서 사용되지 않는 열거형 값을 제거했습니다.

API 변경​

삭제​
  • PlanetKitMediaDisableReason enum class 1-to-1 callGroup call
    • NOT_SUPPORT
    • NO_MEDIA_SRC
    • NO_RECV_MEDIA

Breaking change PlanetKit.getConference 변경​

  • 컨퍼런스 인스턴스는 싱글톤이 아니지만, 오직 하나의 세션만 유효하기 때문에 인스턴스 ID 파라미터 없이 컨퍼런스 인스턴스를 얻도록 getConference() 메서드가 추가되었습니다.

API 변경​

변경​
  • PlanetKit object 1-to-1 callGroup call

    이전 버전PlanetKit 5.5
    fun getConference(sid:Int): PlanetKitConference?fun getConference(): PlanetKitConference?

Breaking change PlanetKitInitialMyVideoState 추가​

  • PlanetKitInitialMyVideoState는 영상 통화가 활성화될 때 로컬 사용자의 비디오 상태를 결정하기 위해 추가된 열거형 클래스입니다.
  • PlanetKitInitialMyVideoState 유형의 속성 또는 파라미터의 기본값은 PlanetKitInitialMyVideoState.RESUME입니다.
  • 자세한 내용은 초기 비디오 상태를 참조하세요.

API 변경​

변경​
  • PlanetKitCall interface 1-to-1 call

    이전 버전PlanetKit 5.5
    fun acceptCall(listener: AcceptCallListener, useResponderPreparation: Boolean = false, recordOnCloud: Boolean = false)fun acceptCall(listener: AcceptCallListener, initialMyVideoState: PlanetKitInitialMyVideoState = PlanetKitInitialMyVideoState.RESUME, useResponderPreparation: Boolean = false, recordOnCloud: Boolean = false)
    fun acceptCall(listener: AcceptCallListener, callStartMessage: PlanetKitCallStartMessage, useResponderPreparation: Boolean = false, recordOnCloud: Boolean = false)fun acceptCall(listener: AcceptCallListener, callStartMessage: PlanetKitCallStartMessage, initialMyVideoState: PlanetKitInitialMyVideoState = PlanetKitInitialMyVideoState.RESUME, useResponderPreparation: Boolean = false, recordOnCloud: Boolean = false)
    fun enableVideo(userData: Any? = null, callback: PlanetKitRequestCallback? = null): Booleanfun enableVideo(initialMyVideoState: PlanetKitInitialMyVideoState = PlanetKitInitialMyVideoState.RESUME, userData: Any? = null, callback: PlanetKitRequestCallback? = null): Boolean
  • PlanetKitConference interface Group call

    이전 버전PlanetKit 5.5
    fun enableVideo(userData: Any? = null, callback: PlanetKitRequestCallback? = null): Booleanfun enableVideo(initialMyVideoState: PlanetKitInitialMyVideoState = PlanetKitInitialMyVideoState.RESUME, userData: Any? = null, callback: PlanetKitRequestCallback? = null): Boolean
추가​
  • PlanetKitInitialMyVideoState enum class 1-to-1 callGroup call
    • RESUME(0)
    • PAUSE(1)
  • PlanetKitMakeCallParam.Builder class 1-to-1 call
    • fun setInitialMyVideoState(value: PlanetKitInitialMyVideoState)
  • PlanetKitConferenceParam.Builder class Group call
    • fun setInitialMyVideoState(value: PlanetKitInitialMyVideoState)

예제 코드​

  • 1대1 통화

    fun makeCall() {
    /* Make a video call with the local user's video state set to PAUSE */
    val param = PlanetKitMakeCallParam.Builder()
    .mediaType(PlanetKitMediaType.AUDIOVIDEO)
    .setInitialMyVideoState(PlanetKitInitialMyVideoState.PAUSE)
    /* Set other parameters If you needed */
    .build()

    val result = PlanetKit.makeCall(param, makeAcceptCallListener)
    }

    val verifyListener = object: VerifyListener {
    override fun onVerified(call: PlanetKitCall,
    peerStartMessage: PlanetKitCallStartMessage?,
    peerUseResponderPreparation: Boolean) {
    /* For a video call, accept the call with the local user's video state set to PAUSE */
    call.acceptCall(acceptCallListener, PlanetKitInitialMyVideoState.PAUSE)
    }
    }

    fun enableVideo() {
    /* Change a call type as video call with the local user's video state set to PAUSE */
    call.enableVideo(PlanetKitInitialMyVideoState.PAUSE)
    }
  • 그룹 통화

    fun joinConference() {
    /* Join a video group call with the local user's video state set to PAUSE */
    val param = PlanetKitConferenceParam.Builder()
    .mediaType(PlanetKitMediaType.AUDIOVIDEO)
    .setInitialMyVideoState(PlanetKitInitialMyVideoState.PAUSE)
    /* Set other parameters If you needed */
    .build()

    val result = PlanetKit.joinConference(param, conferenceListener)
    }

    fun enableVideo() {
    /* Change to video group call with the local user's video state set to PAUSE */
    conference.enableVideo(PlanetKitInitialMyVideoState.PAUSE)
    }

Breaking change 오디오 볼륨 폴링을 이벤트 방식으로 변경​

  • averageVolumeLevel을 포함한 오디오 정보가 이제 오디오 설명(audio description) 이벤트로 제공됩니다.
  • 타이머 게터(getter) 패턴을 사용하는 코드를 이벤트 기반 패턴으로 변경해야 합니다.
  • 이벤트 수신을 활성화할지 비활성화할지 선택할 수 있습니다.
  • 이벤트 수신 청취 간격을 직접 정할 수 있습니다. 기본값은 500밀리초이며 최소 간격은 200밀리초입니다.

API 변경​

변경​
  • PlanetKitAudioVolume class 1-to-1 callGroup call

    이전 버전PlanetKit 5.5
    class PlanetKitAudioVolumeclass PlanetKitAudioDescription
    val averageVolume: Intval averageVolumeLevel: Int
    val subgroupName:String?val sentSubgroupName:String?
추가​
  • PlanetKitConferenceParam.Builder class Group call
    • fun enableAudioDescription(enable:Boolean)
    • fun setAudioDescriptionInterval(intervalMS:Long)
  • PlanetKitVerifyCallParam.Builder class 1-to-1 call
    • fun enableAudioDescription(enable:Boolean)
    • fun setAudioDescriptionInterval(intervalMS:Long)
  • PlanetKitConferenceParam.Builder class Group call
    • fun enableAudioDescription(enable:Boolean)
    • fun setAudioDescriptionInterval(intervalMS:Long)
  • CallListener interface 1-to-1 call
    • fun onMyAudioDescriptionUpdated(call: PlanetKitCall, audioDescription: PlanetKitAudioDescription)
    • fun onPeerAudioDescriptionUpdated(call: PlanetKitCall, audioDescription: PlanetKitAudioDescription)
  • ConferenceListener interface Group call
    • fun onMyAudioDescriptionUpdated(conference: PlanetKitConference, audioDescription: PlanetKitAudioDescription)
    • fun onPeersAudioDescriptionUpdated(conference: PlanetKitConference, peersAudioDescription:PlanetKitAudioDescriptions)
삭제​
  • PlanetKitSession class 1-to-1 callGroup call
    • val myVolume: PlanetKitAudioVolume
  • PlanetKitCall interface 1-to-1 call
    • val peerVolume:PlanetKitAudioVolume?
  • PlanetKitConference interface Group call
    • val memberVolumes: PlanetKitAudioVolumes?

예제 코드​

1대1 통화​
val param = PlanetKitVerifyCallParam.Builder()
...
.enableAudioDescription( true )
.setAudioDescriptionInterval( userIntervalDependingOnUX )
.build()
val makeCallListener = object : MakeCallListener {
...
override fun onMyAudioDescriptionUpdated(audioDescription: PlanetKitAudioDescription) {
// reflect update of the local user's audio description
}

override fun onPeerAudioDescriptionUpdated(audioDescription: PlanetKitAudioDescription) {
// reflect update of peer audio description
}
}
PlanetKit.makeCall(param, makeCallListener)
그룹 통화​
val param = PlanetKitConferenceParam.Builder()
...
.enableAudioDescription( true )
.setAudioDescriptionInterval( userIntervalDependingOnUX )
.build()
private val conferenceListener = object: ConferenceListener {
...
override fun onMyAudioDescriptionUpdated(audioDescription: PlanetKitAudioDescription) {
// reflect update of the local user's audio description
}

override fun onPeersAudioDescriptionUpdated(peersAudioDescription: PlanetKitAudioDescriptions) {
// reflect peers audio description updated
}
}
PlanetKit.joinConference(param, conferenceListener)

Breaking change PlanetKitDisconnectReason 마이그레이션​

  • 1대1 통화 및 그룹 통화 종료에 대한 더 많은 정보를 추가했습니다.
  • MAX_CALL_TIME_EXCEEDED는 허용된 통화 시간을 초과했을 때 반환됩니다.
  • SERVICE_TOO_MANY_REQUESTS는 짧은 기간 내에 허용된 통화 수를 초과하면 반환됩니다.
  • 시스템 종료(전원 끄기)가 발생하면 PlanetKit은 이를 내부적으로 감지하고 PlanetKitDisconnectReason.APP_DESTROY로 통화를 종료합니다.
  • 최대 전송 단위(MTU) 초과로 인한 통화 실패에 해당하는 통화 종료 이유를 추가했습니다.
  • Planet Cloud 서버가 앱 서버 데이터를 앱 서버에 전달하지 못하는 경우에 대한 통화 종료 이유를 추가했습니다.
  • 관련 API가 변경되었습니다.

API 변경​

삭제​
  • PlanetKitDisconnectReason enum 1-to-1 callGroup call
    • LOCAL_MIC_NO_SRC
    • REMOTE_MIC_NO_SRC
    • LOCAL_INTERNAL_ERROR
    • REMOTE_INTERNAL_ERROR
    • LOCAL_USER_ERROR
    • REMOTE_USER_ERROR
    • LOCAL_INTERNAL_KIT_ERROR
    • REMOTE_INTERNAL_KIT_ERROR
    • BAD_NETWORK_IN_CONFERENCE
    • UNAVAILABLE_NETWORK_IN_CALL
    • SERVICE_APIKEY_ERROR
추가​
  • PlanetKitDisconnectReason enum 1-to-1 callGroup call
    • INTERNAL_ERROR
    • USER_ERROR
    • INTERNAL_KIT_ERROR
    • AUDIO_TX_NO_SRC
    • UNAVAILABLE_NETWORK
    • APP_DESTROY
    • SYSTEM_SLEEP
    • SYSTEM_LOGOFF
    • SERVICE_ACCESS_TOKEN_ERROR
    • MTU_EXCEEDED
    • APP_SERVER_DATA_ERROR
    • MAX_CALL_TIME_EXCEEDED
    • SERVICE_TOO_MANY_REQUESTS
    • DESKTOP_SCREEN_LOCKED
  • PlanetKitDisconnectSource enum 1-to-1 callGroup call
    • UNDEFINED
    • CALLEE
    • CALLER
    • PARTICIPANT
    • CLOUD_SERVER
    • APP_SERVER
  • PlanetKitDisconnectedParam data class 1-to-1 callGroup call
    • val reason: PlanetKitDisconnectReason
    • val source: PlanetKitDisconnectSource
    • val byRemote: Boolean
    • val userCode: String?
변경​
  • ConferenceListener interface Group call

    이전 버전PlanetKit 5.5
    fun onLeft(conference: PlanetKitConference, reason: PlanetKitDisconnectReason, userRelCode: String?)fun onDisconnected(conference: PlanetKitConference, param: PlanetKitDisconnectedParam)
  • CallListener interface 1-to-1 call

    이전 버전PlanetKit 5.5
    fun onDisconnected(call: PlanetKitCall, reason: PlanetKitDisconnectReason, userCode: String?)fun onDisconnected(call: PlanetKitCall, param: PlanetKitDisconnectedParam)
  • AcceptCallListener interface 1-to-1 call

    이전 버전PlanetKit 5.5
    fun onDisconnected( call:PlanetKitCall, reason:PlanetKitDisconnectReason, userCode:String )fun onDisconnected( call:PlanetKitCall, param:PlanetKitDisconnectedParam )
  • MakeCallListener interface 1-to-1 call

    이전 버전PlanetKit 5.5
    fun onDisconnected( call:PlanetKitCall, reason:PlanetKitDisconnectReason, userCode:String )fun onDisconnected( call:PlanetKitCall, param:PlanetKitDisconnectedParam )
  • VerifyListener interface 1-to-1 call

    이전 버전PlanetKit 5.5
    override fun onDisconnected(call: PlanetKitCall, reason: PlanetKitDisconnectReason, userCode: String?)fun onDisconnected(call: PlanetKitCall, param: PlanetKitDisconnectedParam)

Breaking change 카메라 미러 모드 관련 변경 사항 적용​

  • 이전 버전에서는 카메라 모듈에서 미러 모드를 설정할 수 있었으나, 카메라 원본 이미지가 변경될 수 있다는 오해를 방지하기 위해 이를 삭제했습니다.
  • 대신 PlanetKit의 비디오 뷰에 이 기능이 통합되었습니다.

API 변경​

변경​
  • DefaultCameraVideoSource class 1-to-1 callGroup call

    이전 버전PlanetKit 5.5
    class DefaultCameraVideoSourceinterface PlanetKitCameraManager
추가​
  • PlanetKitVideoView class 1-to-1 callGroup call
    • var mirroredType: PlanetKitMirroredType
  • PlanetKitPeerView class Group call
    • var mirroredType: PlanetKitMirroredType
  • PlanetKitPeerScreenShareView class Group call
    • var mirroredType: PlanetKitMirroredType
  • PlanetKitMyView class 1-to-1 callGroup call
    • var mirroredType: PlanetKitMirroredType
  • PlanetKitMirroredType enum class 1-to-1 callGroup call
삭제​
  • DefaultCameraVideoSource class 1-to-1 callGroup call
    • var mirrorMode: Boolean

예제 코드​

  • 앱 설정에 따라 비디오 뷰를 연동해야 합니다.

  • 다음 예시에서는 ViewModel의 사용법을 보여줍니다.

  • 1단계: 애플리케이션 설정에 따라 ViewModel의 LiveData를 업데이트합니다.

    // ViewModel
    ...
    private val _myVideoMirroredType: MutableLiveData<PlanetKitMirroredType>
    = MutableLiveData(yourSettingsValue)

    val myVideoMirroredType: LiveData<PlanetKitMirroredType>
    get() = _myVideoMirroredType

    fun setMyVideoMirroredType(mirroredType: PlanetKitMirroredType) {
    _myVideoMirroredType.value = mirroredType
    yourSettingsValue = mirroredType
    }

  • 2단계: LiveData에 따라 비디오 뷰의 미러 모드를 변경합니다.

    // Fragment
    ...
    observeNotNull(viewModel.myVideoMirroredType) {
    binding.myDemoView?.mirroredType = it
    }

Breaking change VideoSource를 커스텀 비디오 소스를 위한 PlanetKitCustomVideoSource로 교체​

  • 기존 VideoSource는 사용자가 필요에 따라 커스텀 비디오 소스를 1대1 통화 또는 그룹 통화 세션에 커스터마이즈하고 연동하기 어려웠습니다. 이를 개선하기 위해 커스터마이제이션에 사용할 수 있는 PlanetKitCustomVideoSource를 도입했습니다.

API 변경​

변경​
  • PlanetKitCall interface 1-to-1 call

    이전 버전PlanetKit 5.5
    fun setVideoSource(videoSource: VideoSource?)fun setVideoSource(videoSource: PlanetKitCustomVideoSource), fun clearVideoSource()
  • PlanetKitConference interface Group call

    이전 버전PlanetKit 5.5
    fun setVideoSource(videoSource: VideoSource?)fun setVideoSource(videoSource: PlanetKitCustomVideoSource), fun clearVideoSource()
추가​
  • PlanetKitCustomVideoSource abstract class 1-to-1 callGroup call
    • var maxFps: Int?= null
    • fun addMyVideoView(view: PlanetKitVideoView)
    • fun removeMyVideoView(view: PlanetKitVideoView)
    • protected fun postFrameData(frameData: FrameData): Boolean
    • protected fun postingFrameDataAvailable(): Boolean
    • abstract fun onMaxFpsLimitUpdated(isLimitEnabled: Boolean, maxFps: Int)
  • PlanetKitCustomVideoSource.FrameData abstract class 1-to-1 callGroup call

Breaking change ScreenCapturerVideoSource 개선​

  • ScreenCapturerVideoSource는 이전에 여러 불필요한 메서드를 노출하여 사용자가 혼란을 느낄 수 있었기에 필수 메서드만 노출하도록 개선했습니다.
  • ScreenCapturerVideoSource가 더 이상 VideoSource를 상속하지 않으므로 이전에 VideoSource에서 제공하던 메서드는 제거되었습니다.

API 변경​

삭제​
  • ScreenCapturerVideoSource class 1-to-1 callGroup call
    • fun stop(reason: VideoSource.VideoSourceStopReason): Boolean
    • fun useDeviceRotation(): Boolean

Breaking change SendDataSessionListener와 ReceiveDataSessionListener의 인터페이스 변경​

  • SendDataSessionListener를 OutboundDataSessionListener로 이름을 변경했습니다.
  • ReceiveDataSessionListener를 InboundDataSessionListener로 이름을 변경했습니다.
  • 데이터 세션에 대한 실패 정보를 개선했습니다.
  • 데이터 세션의 종료를 알리기 위한 onClosed 이벤트가 OutboundDataSessionListener 및 InboundDataSessionListener에 추가되었습니다.
  • 관련 API가 변경되었습니다.

API 변경​

변경​
  • SendDataSessionListener interface 1-to-1 callGroup call

    이전 버전PlanetKit 5.5
    interface SendDataSessionListenerinterface OutboundDataSessionListener
    fun onError( exception:PlanetKitException )fun onError( errReason:PlanetKitDataSessionFailReason )
  • ReceiveDataSessionListener interface 1-to-1 callGroup call

    이전 버전PlanetKit 5.5
    interface ReceiveDataSessionListenerinterface InboundDataSessionListener
    fun onError( exception:PlanetKitException )fun onError( errReason:PlanetKitDataSessionFailReason )
추가​
  • PlanetKitDataSessionFailReason enum 1-to-1 callGroup call
    • NONE
    • INTERNAL
    • NOT_INCOMING
    • ALREADY_EXIST
    • INVALID_ID
    • INVALID_TYPE
  • PlanetKitDataSessionClosedReason enum class 1-to-1 callGroup call
  • OutboundDataSessionListener interface 1-to-1 callGroup call
    • void onClosed(@NonNull PlanetKitOutboundDataSession dataSession, @NonNull PlanetKitDataSessionClosedReason closedReason)
  • InboundDataSessionListener interface 1-to-1 callGroup call
    • void onClosed(@NonNull PlanetKitInboundDataSession dataSession, @NonNull PlanetKitDataSessionClosedReason closedReason)
삭제​
  • SendDataSessionListener interface 1-to-1 callGroup call
    • void onUnsupportedDataSession(@NonNull PlanetKitSendDataSession dataSession)
  • PlanetKitError enum 1-to-1 callGroup call
    • SESSION_FAIL_REASON_ALREADY_EXIST
    • SESSION_FAIL_REASON_INVALID_SESSION_TYPE
    • SESSION_FAIL_REASON_FAILED_TO_MAKE_DATA_SESSION

예제 코드​

  • 새로 추가된 onClosed는 다음과 같이 구현할 수 있습니다.

  • SESSION_END라는 이유를 갖는 onClosed 이벤트는 1대1 통화나 그룹 통화가 종료되거나 사용자가 서브그룹에서 탈퇴할 때 발생합니다.

    class ExampleOutboundDataSessionListener : OutboundDataSessionListener {
    override fun onClosed(dataSession: PlanetKitOutboundDataSession, closedReason: PlanetKitDataSessionClosedReason) {
    when (closedReason) {
    PlanetKitDataSessionClosedReason.SESSION_END -> println("Session has ended.")
    PlanetKitDataSessionClosedReason.INTERNAL -> println("An unexpected internal error occurred.")
    PlanetKitDataSessionClosedReason.UNSUPPORTED -> println("Data session ID is unsupported by the peer.")
    }
    }
    // Implement other interface methods as needed
    }

    class ExampleInboundDataSessionListener : InboundDataSessionListener {
    override fun onClosed(dataSession: PlanetKitInboundDataSession, closedReason: PlanetKitDataSessionClosedReason) {
    when (closedReason) {
    PlanetKitDataSessionClosedReason.SESSION_END -> println("Session has ended.")
    PlanetKitDataSessionClosedReason.INTERNAL -> println("An unexpected internal error occurred.")
    PlanetKitDataSessionClosedReason.UNSUPPORTED -> println("Data session ID is unsupported by the peer.")
    }
    }
    // Implement other interface methods as needed
    }

Breaking change stid를 appServerData로 이름 변경​

  • stid 속성의 이름을 실제 기능에 더 부합하는 appServerData로 변경했습니다.
  • 앱 서버 데이터 크기의 최댓값이 256바이트에서 4096바이트로 변경되었습니다.
  • 관련 API가 변경되었습니다.

API 변경​

변경​
  • PlanetKitCallParam class 1-to-1 call

    이전 버전PlanetKit 5.5
    val stid: Stringval appServerData: String
  • PlanetKitCallParam.Builder class 1-to-1 call

    이전 버전PlanetKit 5.5
    fun stid(stid: String)fun appServerData(appServerData: String)
  • PlanetKitConferenceParam class 1-to-1 call

    이전 버전PlanetKit 5.5
    val stid: Stringval appServerData: String
  • PlanetKitConferenceParam.Builder class Group call

    이전 버전PlanetKit 5.5
    fun stid(stid: String)fun appServerData(appServerData: String)

Breaking change 불필요한 API 제거​

  • isHighPriorityAudio와 setAudioHighPrioritySend가 제거되었습니다.
  • 관련 API가 제거되었습니다.

API 변경​

삭제​
  • PlanetKitConference interface Group call
    • val isHighPriorityAudio: Boolean
    • fun setAudioHighPrioritySend( isHighPriority: Boolean, userData: Any? = null, callback: PlanetKitRequestCallback? = null ): Boolean

Breaking change PlanetKitIntent 제거​

  • PlanetKitIntent는 localBroadCast 라이브러리에 의존하여 구현되었으나, 해당 라이브러리는 더 이상 사용되지 않습니다. 애플리케이션은 CallListener와 ConferenceListener의 구현을 사용하여 동일한 기능을 구현할 수 있습니다. 데모 앱은 동일한 기능을 구현하기 위해 다른 오픈 소스(org.greenrobot.eventbus)를 적용하여 개발되었습니다.

API 변경​

삭제​
  • PlanetKitIntent class 1-to-1 call

예제 코드​

1대1 통화 : EventBus를 이용한 마이그레이션​
  • 앱의 build.gradle에 외부 라이브러리 종속 항목 추가

    implementation 'org.greenrobot:eventbus:3.3.1'
  • 자신만의 메시지 클래스 만들기

    class PlanetDemoMessageEventDisconnected internal constructor(
    session: PlanetKitSession,
    val reason: PlanetKitDisconnectReason,
    val userCode: String?
    ): PlanetDemoMessageEvent(session, Type.DISCONNECTED)
  • 이벤트 메시지 보내기

    private val verifyCallListener = object : VerifyCallListener {
    override fun onDisconnected(call: PlanetKitCall, reason: PlanetKitDisconnectReason, userCode: String?) {
    ...
    EventBus.getDefault().post(PlanetDemoMessageEventDisconnected(call, reason, userCode))
    }
    }
  • 다른 모듈(예: NotificationService)에서 이벤트 수신

    // 1. Prepare PlanetKitMessageEvent Receiver
    @Subscribe(threadMode = ThreadMode.MAIN_ORDERED)
    fun onMessageEvent(event: PlanetDemoMessageEvent) {
    if(event is PlanetDemoMessageEventDisconnected)
    {
    onClearRequested()
    }
    }

    // 2. Register PlanetKitMessageEvent
    override fun onCreate() {
    super.onCreate()
    EventBus.getDefault().register(this)
    }

    // 3. Unregister PlanetKitMessageEvent
    override fun onDestroy() {
    EventBus.getDefault().unregister(this);
    super.onDestroy()
    }

Spec change 데이터 세션 스트림 ID 범위 변경​

  • 데이터 세션 스트림 ID 범위 사양이 기존 100~1000에서 100~999로 변경되었습니다.

Spec change 표시 이름에 제한 추가​

  • PlanetKitConferenceParam의 myDisplayName 속성은 이제 null 종료 문자를 포함하여 128바이트로 제한됩니다.
  • 문자열에서 최대 크기를 초과하는 뒷 부분은 버려집니다.

Enhancement PlanetKitPeerView 추가​

관련된 예제 코드를 참고하세요.

Enhancement PlanetKitPeerControl 추가​

관련된 릴리스 노트를 참고하세요.

Enhancement PlanetKitMyView 추가​

관련된 예제 코드를 참고하세요.

Enhancement PlanetKitMyMediaStatus 추가​

관련된 릴리스 노트를 참고하세요.

Enhancement PlanetKitPeerScreenShareView 추가​

관련된 예제 코드를 참고하세요.

Enhancement addPeerVideoView()/removePeerVideoView() 개선​

  • 피어에 추가하는 비디오 뷰는 다른 피어와 공유되어서는 안 됩니다. 새로운 피어에 비디오 화면을 추가할 때, 해당 화면이 이미 다른 피어에 추가되어 있었다면 이전 피어에서 제거되고 새로운 피어에 추가됩니다. 또한 removePeerVideoView에 피어 파라미터가 없는 오버로드된 함수가 추가되었습니다.

API 변경​

addPeerVideoView() 개선​
  • 뷰는 마지막 피어에 대해서만 추가됩니다. 이전 피어로부터 자동으로 제거됩니다.
removePeerVideoView(view:PlanetKitVideoView) 추가​
  • 뷰는 어떤 피어에 추가되었는지와 관계없이 제거될 수 있습니다.

예제 코드​

동일한 비디오 뷰 인스턴스에 대해 피어를 변경하는 기존 방식​
addPeerVideoView(peerA, videoView)
... // another task
removePeerVideoView(peerA, videoView) // You must remember which peer the view was added to
... // another task
addPeerVideoView(peerB, videoView)
removePeerVideoView(view:PlanetKitVideoView)를 사용한 새로운 방식​
addPeerVideoView(peerA, videoView)
... //another task
removePeerVideoView(videoView) // There's no more need to remember the peer
... //another task
addPeerVideoView(peerB, videoView)
피어 변경을 위한 새로운 방식​
addPeerVideoView(peerA, videoView)
... //another task
addPeerVideoView(peerB, videoView) // It can be used without removePeerVideoView

API 변경​

변경​
  • PlanetKitConference interface Group call

    이전 버전PlanetKit 5.5
    fun removePeerVideoView(peer: PlanetKitUser, view: PlanetKitVideoView)fun removePeerVideoView(view: PlanetKitVideoView)

Enhancement isPeerAudioMuted 추가​

  • 1대1 통화에서 상대방의 오디오 음 소거 상태 확인자가 추가되었습니다.

API 변경​

추가​
  • PlanetKitCall interface 1-to-1 call
    • val isPeerAudioMuted:Boolean

예제 코드​

  ... // somewhere you need to check the peer's mute state
if( call.isPeerAudioMuted )
{
// peer is muted
}
else
{
// peer is not muted
}

Enhancement 통화 일시 중지로 인한 화면 공유 종료에 대한 이벤트 추가​

  • 화면 공유 중 통화를 일시 중지하면 LINE Planet이 화면 공유 전송을 중단합니다. 이 API는 이러한 상황을 위한 이벤트입니다.
  • 이 이벤트를 수신하면 필요한 경우 UI 표시기를 업데이트해야 합니다.

API 변경​

추가​
  • CallListener interface 1-to-1 call
    • fun onMyScreenShareStoppedByHold(call: PlanetKitCall)
  • ConferenceListener interface Group call
    • fun onMyScreenShareStoppedByHold(conference: PlanetKitConference)

Enhancement 비디오 프레임 처리 성능을 최적화하기 위한 API 추가​

  • 애플리케이션에서 실제로 전송되는 것보다 더 많은 비디오 프레임을 생성할 수 있습니다. 이처럼 추가로 생성된 프레임은 전송을 건너뛰더라도 처리되므로 처리 오버헤드가 발생합니다. 직접 VideoSource를 구현하는 경우 추가된 API를 활용하여 성능을 최적화하세요.

API 변경​

추가​
  • VideoSource abstract class 1-to-1 callGroup call
    • protected fun postingFrameDataAvailable(nanoSecondsTimestamp: Long): Boolean
    • protected val isMaxFpsLimitEnabled: Boolean
    • protected val maxFpsLimit: Int
    • protected abstract fun onMaxFpsLimitUpdated(isLimitEnabled: Boolean, maxFps: Int)

예제 코드​

예시 1: postingFrameDataAvailable()에 따라 프레임 처리 건너뛰기​
fun yourFrameCallbackHandler( yourFrame, ... )
{
// when the frame has timestamp
val curTimestamp = yourFrame.timestamp // to nanoseconds

// when the data doesn't have timestamp
val curTimestamp = this.sourceTimestamp // property from VideoSource base class

if ( this.postingFrameDataAvailable( curTimestamp ) )
{
val frameData = YourConcreteFrameData( yourFrame, curTimestamp, ... ) // interface from VideoSource.FrameData base class
this.postFrameData( frameData )

// handle clean-up
...
}
else
{
// handle clean-up
...
}
}
예시 2: 사용자 정의 프레임 틱 생성기를 구현하는 경우 최대 FPS를 사용하여 프레임 지속 시간 업데이트하기​
override fun onMaxFpsLimitUpdated( isLimitEnabled: Boolean, maxFps: Int )
{
if ( isLimitEnabled )
{
// update tick duration according to maxFps
this.fps = maxFps
frameDuration = (1000 / maxFps ).toLong()
yourFrameTick.updateInterval( frameDuration )
}
else
{
// You may want to set it back to normal FPS
this.fps = defaultFps
yourFrameTick.updateInterval( defaultDuration )

// or you could stop frame
yourFrameTick.stop()
}
}

Enhancement 자동 난독화 적용​

  • PlanetKit 5.2부터는 PlanetKit을 사용하기 위해 Android 애플리케이션의 proguard.rules 파일을 변경할 필요가 없습니다.
  • 런타임 문제를 방지하기 위해 proguard.rules에 규칙을 지정했다면, PlanetKit 관련 규칙을 모두 제거할 수 있습니다.

Enhancement 화면 공유 시 비디오 공유 모드를 위한 API 제공​

  • 비디오 공유 모드는 비디오 클립 공유를 위해 화면 공유를 최적화합니다.
  • 화면 공유를 시작하기 전이나 화면 공유 중에 비디오 공유 모드를 활성화할 수 있습니다.
  • 비디오 공유 모드를 활성화하면 리소스 사용량이 증가할 수 있습니다.

API 변경​

변경​
  • ConferenceListener interface Group call

    이전 버전PlanetKit 5.5
    fun onJoined(conference: PlanetKitConference)fun onConnected(conference: PlanetKitConference, isVideoHwCodecEnabled: Boolean, isVideoShareModeSupported: Boolean)
추가​
  • PlanetKitCall interface 1-to-1 call
    • fun setMyScreenShareVideoShareMode(videoShareMode: Boolean): Boolean
    • fun isMyScreenShareVideoShareModeEnabled(): Boolean
  • PlanetKitCallConnectedParam data class 1-to-1 call
    • val isVideoShareModeSupported: Boolean
  • PlanetKitConference interface Group call
    • fun setMyScreenShareVideoShareMode(videoShareMode: Boolean): Boolean
    • fun isMyScreenShareVideoShareModeEnabled(): Boolean

Enhancement 클라우드 레코딩 지원​

  • 클라우드에 1대1 통화를 녹음하는 기능이 추가되었습니다.
  • 이 기능을 활성화하려면 먼저 LINE Planet 팀에 문의하세요.
  • 자세한 내용은 클라우드 통화 레코딩을 참조하세요.

API 변경​

변경​
  • PlanetKitCall interface 1-to-1 call

    이전 버전PlanetKit 5.5
    fun acceptCall(mediaType:PlanetKitMediaType, listener:AcceptCallListener)fun acceptCall(listener: AcceptCallListener, initialMyVideoState: PlanetKitInitialMyVideoState = PlanetKitInitialMyVideoState.RESUME, useResponderPreparation: Boolean = false, recordOnCloud: Boolean = false)
    fun acceptCall(mediaType:PlanetKitMediaType, listener:AcceptCallListener, callInitData:PlanetKitCallInitData = PlanetKitCallInitData())fun acceptCall(listener: AcceptCallListener, callStartMessage: PlanetKitCallStartMessage, initialMyVideoState: PlanetKitInitialMyVideoState = PlanetKitInitialMyVideoState.RESUME, useResponderPreparation: Boolean = false, recordOnCloud: Boolean = false)
추가​
  • PlanetKitRecordOnCloudDeactivateReason enum class 1-to-1 call
  • CallListener interface 1-to-1 call
    • fun onRecordOnCloudUpdated(call: PlanetKitCall, activated: Boolean, reason: PlanetKitRecordOnCloudDeactivateReason)
  • PlanetKitCall interface 1-to-1 call
    • fun isRecordOnCloudActivated(): Boolean
  • PlanetKitMakeCallParam data class 1-to-1 call
    • val recordOnCloud: Boolean
  • PlanetKitMakeCallParam.Builder class 1-to-1 call
    • fun enableRecordOnCloud(value: Boolean)

Enhancement 사용 가능한 오디오 경로에 대한 실시간 업데이트 수신용 콜백 추가​

  • 이 API를 사용하면 오디오 장치의 연결 상태가 변경될 때 실시간으로 애플리케이션 UI를 업데이트할 수 있습니다.

API 변경​

추가​
  • PlanetKitConference interface Group call
    • fun setOnAudioRouteAvailableListChangeListener(listener: OnAudioRouteAvailableListChangeListener?)
  • PlanetKitCall interface 1-to-1 call
    • fun setOnAudioRouteAvailableListChangeListener(listener: OnAudioRouteAvailableListChangeListener?)
  • OnAudioRouteAvailableListChangeListener interface 1-to-1 callGroup call

예제 코드​

fun joinConference(param: PlanetKitConferenceParam) {
val result = PlanetKit.joinConference(param, conferenceListener)
...
val conference = result.conference
...

conference?.setOnAudioRouteChangeListener { audioRoute ->
...
}

conference?.setOnAudioRouteAvailableListChangeListener { availableList ->
// Update UI status if needed
}

}

Enhancement 통화 상태에 관계없이 통화 종료음을 재생하도록 하는 설정 추가​

  • PlanetKit 5.4 이전 버전과의 호환성을 보장하기 위해 통화 상태와 관계없이 종료음을 재생하는 설정이 추가되었습니다.

API 변경​

추가​
  • PlanetKitMakeCallParam class 1-to-1 call
    • val playEndToneRegardlessOfCallState: Boolean
  • PlanetKitMakeCallParam.Builder class 1-to-1 call
    • fun enablePlayEndToneRegardlessOfCallState(value: Boolean)
  • PlanetKitVerifyCallParam class 1-to-1 call
    • val playEndToneRegardlessOfCallState: Boolean
  • PlanetKitVerifyCallParam.Builder class Group call
    • fun enablePlayEndToneRegardlessOfCallState(value: Boolean)
  • PlanetKitConferenceParam class Group call
    • val playEndToneRegardlessOfConferenceState: Boolean
  • PlanetKitConferenceParam.Builder class Group call
    • fun enablePlayEndToneRegardlessOfConferenceState(value: Boolean)

API 변경 목록​

변경​

  • DefaultCameraVideoSource class 1-to-1 callGroup call

    이전 버전PlanetKit 5.5
    class DefaultCameraVideoSourceinterface PlanetKitCameraManager
  • PlanetKitVerifyCallParam class 1-to-1 call

    이전 버전PlanetKit 5.5
    val messageData: Stringval cCParam: PlanetKitCCParam
    val myVideoSendCapability: PlanetKitVideoCapability?val myVideoSendCapability: PlanetKitVideoCapability
    val myVideoReceiveCapability: PlanetKitVideoCapability?val myVideoReceiveCapability: PlanetKitVideoCapability
  • PlanetKitMakeCallParam class 1-to-1 call

    이전 버전PlanetKit 5.5
    val myVideoSendCapability: PlanetKitVideoCapability?val myVideoSendCapability: PlanetKitVideoCapability
    val myVideoReceiveCapability: PlanetKitVideoCapability?val myVideoReceiveCapability: PlanetKitVideoCapability
  • PlanetKit object 1-to-1 callGroup call

    이전 버전PlanetKit 5.5
    fun getConference(sid:Int): PlanetKitConference?fun getConference(): PlanetKitConference?
    val userAgent: StringOnInitializeCompleteListener.onComplete(isSuccessful, isVideoHwCodecSupport, userAgent)
    val isVideoHwCodecSupport: BooleanOnInitializeCompleteListener.onComplete(isSuccessful, isVideoHwCodecSupport, userAgent)
    fun initialize(config: PlanetKitConfiguration)fun initialize(config: PlanetKitConfiguration, listener: OnInitializeCompleteListener)
    fun makeCall(param: PlanetKitCallParam, makeCallListener: MakeCallListener): PlanetKitCallResultfun makeCall(param: PlanetKitMakeCallParam, makeCallListener: MakeCallListener): PlanetKitCallResult
    fun getDefaultCameraVideoSource(): DefaultCameraVideoSourcefun getCameraManager(): PlanetKitCameraManager
  • PlanetKitLogLevel enum class 1-to-1 callGroup call

    이전 버전PlanetKit 5.5
    VERBOSEDETAILED
    DEBUGDETAILED
    INFOSIMPLE
    WARNSIMPLE
    ERRORSIMPLE
    CRITICALSIMPLE
    NONESILENT
  • PlanetKitVideoPauseReason enum class 1-to-1 callGroup call

    이전 버전PlanetKit 5.5
    UNKNOWNUNDEFINED
  • AudioSink abstract class 1-to-1 callGroup call

    이전 버전PlanetKit 5.5
    protected fun receiveSpeakerData(sampleRate: Int, format: PlanetKitAudioSampleFormat, sampleCount: Int): AudioFrameprotected fun getFrameData(sampleRate: Int, format: PlanetKitAudioSampleFormat, sampleCount: Int): AudioFrame
    protected fun putAECReferenceData(data: AudioFrame): Booleanprotected fun putUserAcousticEchoCancellerReference(data: AudioFrame): Boolean
  • PlanetKitCall interface 1-to-1 call

    이전 버전PlanetKit 5.5
    fun acceptCall(mediaType:PlanetKitMediaType, listener:AcceptCallListener)fun acceptCall(listener: AcceptCallListener, initialMyVideoState: PlanetKitInitialMyVideoState = PlanetKitInitialMyVideoState.RESUME, useResponderPreparation: Boolean = false, recordOnCloud: Boolean = false)
    fun acceptCall(mediaType:PlanetKitMediaType, listener:AcceptCallListener, callInitData:PlanetKitCallInitData = PlanetKitCallInitData())fun acceptCall(listener: AcceptCallListener, callStartMessage: PlanetKitCallStartMessage, initialMyVideoState: PlanetKitInitialMyVideoState = PlanetKitInitialMyVideoState.RESUME, useResponderPreparation: Boolean = false, recordOnCloud: Boolean = false)
    fun hold(pauseRecv:Boolean, reason:String? = null, callback:PlanetKitRequestCallback? = null): Booleanfun hold(reason: String? = null, callback: PlanetKitRequestCallback? = null): Boolean
    fun hold(pauseRecv:Boolean, callback: PlanetKitRequestCallback? = null): Booleanfun hold(reason:String? = null, callback: PlanetKitRequestCallback? = null): Boolean
    fun hold(pauseRecv:Boolean, reason:String? = null): Booleanfun hold(reason:String? = null, callback: PlanetKitRequestCallback? = null): Boolean
    fun hold(pauseRecv:Boolean): Booleanfun hold(reason:String? = null, callback: PlanetKitRequestCallback? = null): Boolean
    fun unhold(): Booleanfun unhold(userData:Any? = null, callback: PlanetKitRequestCallback? = null): Boolean
    val isDataSessionSupported: BooleanCallListener.onConnected
    ConferenceListener.onConnected
    fun endCallWithNormalUserCode(userCode: String)fun endCall(userReleasePhrase: String)
    fun endCallWithErrorUserCode(userCode: String)fun endCallWithError(userReleasePhrase: String)
    fun unHold(userData:Any? = null, callback: PlanetKitRequestCallback? = null): Booleanfun unhold(userData:Any? = null, callback: PlanetKitRequestCallback? = null): Boolean
    fun enableVideo(userData: Any? = null, callback: PlanetKitRequestCallback? = null): Booleanfun enableVideo(initialMyVideoState: PlanetKitInitialMyVideoState = PlanetKitInitialMyVideoState.RESUME, userData: Any? = null, callback: PlanetKitRequestCallback? = null): Boolean
    fun setVideoSource(videoSource: VideoSource?)fun setVideoSource(videoSource: PlanetKitCustomVideoSource), fun clearVideoSource()
  • PlanetKitConferencePubSubgroupUpdateParam data class Group call

    이전 버전PlanetKit 5.5
    data class UpdatePeerDatadata class PlanetKitConferenceSubgroupUpdatedPeer
    data class PlanetKitConferencePubSubgroupUpdateParamdata class PlanetKitConferencePublicSubgroupUpdateParam
  • PlanetKitSubgroup interface Group call

    이전 버전PlanetKit 5.5
    fun getPeerVolume(user:PlanetKitUser):Intfun getPeerVolumeLevelSetting(user: PlanetKitUser): Int
    val peerUpdateType: PlanetKitSubgroupPeerUpdateType?val attribute: PlanetKitSubgroupAttribute?
    val totalPeerCnt: Int?val totalPeersCount: Int?
    val isEnableVideoUpdate: Boolean?val attribute: PlanetKitSubgroupAttribute?
    val isUsingDataSession: Boolean?val attribute: PlanetKitSubgroupAttribute?
    fun unsupportedReceiveDataSession(streamId: Int): Boolean?fun unsupportInboundDataSession(streamId: Int): Boolean?
    fun makeSendDataSession(@IntRange(from = 100, to = 1000) streamId: Int, type: PlanetKitDataSessionType, listener: SendDataSessionListener)fun makeOutboundDataSession(@IntRange(from = 100, to = 1000) streamId: Int, type: PlanetKitDataSessionType, listener: OutboundDataSessionListener)
    fun makeReceiveDataSession(@IntRange(from = 100, to = 1000) streamId: Int, listener: ReceiveDataSessionListener)fun makeInboundDataSession(@IntRange(from = 100, to = 1000) streamId: Int, listener: InboundDataSessionListener)
    fun getSendDataSession(streamId: Int): PlanetKitSendDataSession?fun getOutboundDataSession(streamId: Int): PlanetKitOutboundDataSession?
    fun getReceiveDataSession(streamId: Int): PlanetKitReceiveDataSession?fun getInboundDataSession(streamId: Int): PlanetKitInboundDataSession?
    val isAutoVolumeFocused: Boolean?val isPeersAudioAutoVolumeControlFocused: Boolean?
  • PlanetKitSubgroupManager interface Group call

    이전 버전PlanetKit 5.5
    boolean setPeerVolume(@NonNull PlanetKitUser peer, @Nullable String subgroupName, @IntRange(from = 0, to = 110) int talkerVolume, @Nullable Object userData, @Nullable PlanetKitRequestCallback callback)boolean setPeerVolumeLevelSetting(@NonNull PlanetKitUser peer, @Nullable String subgroupName, @IntRange(from = 0, to = 110) int talkerVolume, @Nullable Object userData, @Nullable PlanetKitRequestCallback callback)
    boolean setPeerVolume(@NonNull PlanetKitUser peer, int talkerVolume, @Nullable Object userData, @Nullable PlanetKitRequestCallback callback)boolean setPeerVolumeLevelSetting(@NonNull PlanetKitUser peer, int talkerVolume, @Nullable Object userData, @Nullable PlanetKitRequestCallback callback)
    boolean changeSendAudio(@Nullable String subgroupName, @Nullable Object userData, @Nullable PlanetKitRequestCallback callback);boolean changeMyAudioDestination(@NotNull String subgroupName, @Nullable Object userData, @Nullable PlanetKitRequestCallback callback)
    boolean changeMyAudioDestinationToMainRoom(@Nullable Object userData, @Nullable PlanetKitRequestCallback callback)
    boolean changeSendVideo(@Nullable String subgroupName, @Nullable Object userData, @Nullable PlanetKitRequestCallback callback);boolean changeMyVideoDestination(@NotNull String subgroupName, @Nullable Object userData, @Nullable PlanetKitRequestCallback callback)
    boolean changeMyVideoDestinationToMainRoom(@Nullable Object userData, @Nullable PlanetKitRequestCallback callback)
    boolean tagMainRoomAudioSend(@Nullable String subgroupName, @Nullable Object userData, @Nullable PlanetKitRequestCallback callback);boolean setTagMyAudioOfMainRoom(@NonNull String subgroupName, @Nullable Object userData, @Nullable PlanetKitRequestCallback callback);
    boolean clearTagMyAudioOfMainRoom(@Nullable Object userData, @Nullable PlanetKitRequestCallback callback)
    boolean silenceAudio(@Nullable String subgroupName, boolean silence, @Nullable Object userData, @Nullable PlanetKitRequestCallback callback);PlanetKitSubgroup::fun silencePeersAudio(silence: Boolean, userData: Any?, callback: PlanetKitRequestCallback?): Boolean
    boolean disableAutoVolumeControl(@Nullable Object userData, @Nullable PlanetKitRequestCallback callback);boolean clearPeersAudioAutoVolumeControl(@Nullable Object userData, @Nullable PlanetKitRequestCallback callback)
    boolean enableAutoVolumeControl(@NonNull List<String> focusSubgroup, @Nullable Object userData, @Nullable PlanetKitRequestCallback callback);boolean setPeersAudioAutoVolumeControl(@NonNull List<String> focusSubgroup, @Nullable Object userData, @Nullable PlanetKitRequestCallback callback)
  • PlanetKitReceiveDataSession class 1-to-1 callGroup call

    이전 버전PlanetKit 5.5
    class PlanetKitReceiveDataSessionclass PlanetKitInboundDataSession
  • PlanetKitSendDataSession class 1-to-1 callGroup call

    이전 버전PlanetKit 5.5
    class PlanetKitSendDataSessionclass PlanetKitOutboundDataSession
  • PlanetKitPeerView.PeerViewListener interface Group call

    이전 버전PlanetKit 5.5
    fun onMicUnMuted(peer: PlanetKitConferencePeer)fun onMicUnmuted(peer: PlanetKitConferencePeer)
    fun onHold(peer: PlanetKitConferencePeer, reason: String)fun onHold(peer: PlanetKitConferencePeer, reason: String?)
    fun onUnHold(peer: PlanetKitConferencePeer)fun onUnhold(peer: PlanetKitConferencePeer)
  • ReceiveDataSessionListener interface 1-to-1 callGroup call

    이전 버전PlanetKit 5.5
    interface ReceiveDataSessionListenerinterface InboundDataSessionListener
    fun onError( exception:PlanetKitException )fun onError( errReason:PlanetKitDataSessionFailReason )
  • PlanetKitConferencePeer class Group call

    이전 버전PlanetKit 5.5
    val videoStatus: PlanetKitVideoStatusfun getVideoStatus(subgroupName: String?): VideoStatusResult
    val audioVolume: Int?fun getAudioVolumeLevelSetting(subgroupName: String?): AudioVolumeResult
    val screenSharingSubgroupName: String?val currentScreenShareSubgroupName: String?
    val isDataSessionSupport: Booleanval isDataSessionSupported: Boolean
  • ConferenceListener interface Group call

    이전 버전PlanetKit 5.5
    fun onLeft(conference: PlanetKitConference, reason: PlanetKitDisconnectReason, userRelCode: String?)fun onDisconnected(conference: PlanetKitConference, param: PlanetKitDisconnectedParam)
    fun onPeersHeld(conference:PlanetKitConference, peerHoldReceivedList: List<PlanetKitConferencePeerHoldReceivedParam>fun onPeersOnHold(conference: PlanetKitConference, peerHoldReceivedList: List<PlanetKitConferencePeerHoldReceivedParam>)
    fun onPeersMicMuted(conference: PlanetKitConference, peers: List<PlanetKitConferencePeerInfo>)fun onPeersMicMuted(conference: PlanetKitConference, peers: List<PlanetKitConferencePeer>)
    fun onPeersMicUnMuted(conference: PlanetKitConference, peers: List<PlanetKitConferencePeerInfo>)fun onPeersMicUnmuted(conference: PlanetKitConference, peers: List<PlanetKitConferencePeer>)
    fun onPeerMyMuteRequested(conference: PlanetKitConference, peer: PlanetKitConferencePeerInfo, isMute:Boolean)fun onMuteMyAudioRequestedByPeer(conference: PlanetKitConference, peer: PlanetKitConferencePeer, isMute: Boolean)
    fun onScreenShareUpdated(peer: PlanetKitConferencePeerInfo, subgroupName: String?, screenSharingState: PlanetKitScreenSharingState)fun onScreenShareUpdated( peer: PlanetKitConferencePeer, subgroupName: String?, screenShareState: PlanetKitScreenShareState )
    fun onPeersSharedContentsUnset(conference: PlanetKitConference, peers:List<PlanetKitConferencePeerInfo>)fun onPeersSharedContentsUnset(conference: PlanetKitConference, peers: List<PlanetKitConferencePeer>)
    fun onPeerExclusivelySharedContentsSet(conference: PlanetKitConference, peer: PlanetKitConferencePeerInfo, data: ByteArray, elapsedTimeAfterSetMs: Long)fun onPeerExclusivelySharedContentsSet(conference: PlanetKitConference, peer: PlanetKitConferencePeer, data: ByteArray, elapsedTimeAfterSetMs: Long)
    fun onPeerExclusivelySharedContentsUnset(conference: PlanetKitConference, peer: PlanetKitConferencePeerInfo)fun onPeerExclusivelySharedContentsUnset(conference: PlanetKitConference, peer: PlanetKitConferencePeer)
    fun onJoined(conference: PlanetKitConference)fun onConnected(conference: PlanetKitConference, isVideoHwCodecEnabled: Boolean, isVideoShareModeSupported: Boolean)
    fun onSubgroupUpdated(param: PlanetKitConferencePubSubgroupUpdateParam)fun onSubgroupUpdated(param: PlanetKitConferencePublicSubgroupUpdateParam)
    fun onPeersUnHold(conference: PlanetKitConference, peers: List<PlanetKitConferencePeer>)fun onPeersUnhold(conference: PlanetKitConference, peers: List<PlanetKitConferencePeer>)
    fun onBadNetworkDetected(conference: PlanetKitConference, disconnectAfterSec: Int)fun onNetworkUnavailable(conference: PlanetKitConference, disconnectAfterSec: Int)
    fun onBadNetworkResolved(conference: PlanetKitConference)fun onNetworkReavailable(conference: PlanetKitConference)
  • VerifyListener interface 1-to-1 call

    이전 버전PlanetKit 5.5
    fun onVerified(call: PlanetKitCall, callerInitData: PlanetKitCallInitData)fun onVerified(call: PlanetKitCall, peerStartMessage: PlanetKitCallStartMessage?, peerUseResponderPreparation: Boolean)
    override fun onDisconnected(call: PlanetKitCall, reason: PlanetKitDisconnectReason, userCode: String?)fun onDisconnected(call: PlanetKitCall, param: PlanetKitDisconnectedParam)
  • MakeCallListener interface 1-to-1 call

    이전 버전PlanetKit 5.5
    fun onConnected( call:PlanetKitCall, calleeInitData: PlanetKitCallInitData )fun onConnected( call: PlanetKitCall, param: PlanetKitCallConnectedParam )
    fun onDisconnected( call:PlanetKitCall, reason:PlanetKitDisconnectReason, userCode:String )fun onDisconnected( call:PlanetKitCall, param:PlanetKitDisconnectedParam )
  • AcceptCallListener interface 1-to-1 call

    이전 버전PlanetKit 5.5
    fun onConnected( call:PlanetKitCall, calleeInitData: PlanetKitCallInitData )fun onConnected( call: PlanetKitCall, param: PlanetKitCallConnectedParam )
    fun onDisconnected( call:PlanetKitCall, reason:PlanetKitDisconnectReason, userCode:String )fun onDisconnected( call:PlanetKitCall, param:PlanetKitDisconnectedParam )
  • CallListener interface 1-to-1 call

    이전 버전PlanetKit 5.5
    fun onPeerHeld(call: PlanetKitCall, pausedRecv: Boolean, reason: String?)fun onPeerHold(call: PlanetKitCall, reason: String?)
    fun onPeerUnheld(call: PlanetKitCall)fun onPeerUnhold(call: PlanetKitCall)
    fun onVerified(call: PlanetKitCall, callerInitData: PlanetKitCallInitData)fun onVerified(call: PlanetKitCall, peerStartMessage: PlanetKitCallStartMessage?, peerUseResponderPreparation: Boolean)
    fun onConnected(call: PlanetKitCall, calleeInitData: PlanetKitCallInitData)fun onConnected(call: PlanetKitCall, param: PlanetKitCallConnectedParam)
    fun onDisconnected(call: PlanetKitCall, reason: PlanetKitDisconnectReason, userCode: String?)fun onDisconnected(call: PlanetKitCall, param: PlanetKitDisconnectedParam)
    fun onPeerVideoEnabled(call: PlanetKitCall)fun onVideoEnabledByPeer(call: PlanetKitCall)
    fun onPeerVideoDisabled(call: PlanetKitCall, reason: PlanetKitMediaDisableReason)fun onVideoDisabledByPeer(call: PlanetKitCall, reason: PlanetKitMediaDisableReason)
    fun onPeerMyMuteRequested(call: PlanetKitCall, isMute: Boolean)fun onMuteMyAudioRequestedByPeer(call: PlanetKitCall, isMute: Boolean)
    fun onPeerScreenSharingStarted(call: PlanetKitCall)fun onPeerScreenShareStarted(call: PlanetKitCall)
    fun onPeerScreenSharingStopped(call: PlanetKitCall, reason: Int)fun onPeerScreenShareStopped(call: PlanetKitCall, hasReason: Boolean, reason: Int)
    fun onPeerMicUnMuted(call: PlanetKitCall)fun onPeerMicUnmuted(call: PlanetKitCall)
  • PlanetKitStatistics class 1-to-1 callGroup call

    이전 버전PlanetKit 5.5
    val screenSharingSend:ScreenSharingSend?val myScreenShare:MyScreenShare?
    val screenSharingRecvs: List<ScreenSharingRecv>val peersScreenShare: List<PeerScreenShare>
    data class ScreenSharingSenddata class MyScreenShare
    data class ScreenSharingRecvdata class PeerScreenShare
    val audioSend: AudioSendval myAudio: MyAudio
    val audioRecv: AudioRecvval peerAudio: PeerAudio
    val videoSend:VideoSend?val myVideo:MyVideo?
    val videoRecvs: List<VideoRecv>val peersVideo: List<PeerVideo>
    data class AudioSenddata class MyAudio
    data class AudioRecvdata class PeerAudio
    data class VideoSenddata class MyVideo
    data class VideoRecvdata class PeerVideo
  • PlanetKitScreenShareState class 1-to-1 callGroup call

    이전 버전PlanetKit 5.5
    class PlanetKitScreenSharingStateclass PlanetKitScreenShareState
  • SendDataSessionListener interface 1-to-1 callGroup call

    이전 버전PlanetKit 5.5
    interface SendDataSessionListenerinterface OutboundDataSessionListener
    fun onError( exception:PlanetKitException )fun onError( errReason:PlanetKitDataSessionFailReason )
  • PlanetKitConferenceParam.Builder class Group call

    이전 버전PlanetKit 5.5
    fun stid(stid: String)fun appServerData(appServerData: String)
    fun preferredVideoReceiveHwCodec(isPrefer: Boolean)fun preferredPeerVideoHwCodec(isPrefer: Boolean)
  • PlanetKitConferenceParam class 1-to-1 call

    이전 버전PlanetKit 5.5
    val stid: Stringval appServerData: String
    val preferredVideoReceiveHwCodec: Booleanval preferredPeerVideoHwCodec: Boolean
    val myVideoSendCapability: PlanetKitVideoCapability?val myVideoSendCapability: PlanetKitVideoCapability
  • PlanetKitCallParam class 1-to-1 call

    이전 버전PlanetKit 5.5
    data class PlanetKitCallParamdata class PlanetKitMakeCallParam
    val stid: Stringval appServerData: String
    val callInitData: Stringval callStartMessage: PlanetKitCallStartMessage?
    val isResponderPrepare: Booleanval useResponderPreparation: Boolean
  • PlanetKitCallParam.Builder class 1-to-1 call

    이전 버전PlanetKit 5.5
    class PlanetKitCallParam.Builderclass PlanetKitMakeCallParam.Builder
    fun stid(stid: String)fun appServerData(appServerData: String)
    fun callInitData(callInitData: String)fun callStartMessage(callStartMessage: PlanetKitCallStartMessage)
    fun responderPrepare(isResponderPrepare: Boolean)fun responderPreparation(useResponderPreparation: Boolean)
  • PlanetKitConfiguration.Builder class 1-to-1 callGroup call

    이전 버전PlanetKit 5.5
    fun audioDefaultAttributes( audioDefaultAttributes: AudioDefaultAttributes )fun setAudioDefaultAttributes( audioDefaultAttributes: AudioDefaultAttributes )
    fun serverUrl( serverUrl: String )fun setServerUrl( serverUrl: String )
    fun logToFile( isEnabled: Boolean )fun enableLog( isEnabled: Boolean )
    fun logLevel( logLevel: PlanetKitLogLevel )fun setLogLevel( logLevel: PlanetKitLogLevel )
  • PlanetKitConference interface Group call

    이전 버전PlanetKit 5.5
    fun removePeerVideoView(peer: PlanetKitUser, view: PlanetKitVideoView)fun removePeerVideoView(view: PlanetKitVideoView)
    fun setPeerVolume(peer: PlanetKitUser, @IntRange(from = 0, to = 110) talkerVolume: Int, userData:Any? = null, callback: PlanetKitRequestCallback? = null :BooleanPlanetKitSubgroupManager::boolean setPeerVolumeLevelSetting(@NonNull PlanetKitUser peer, @IntRange(from = 0, to = 110) int talkerVolume, @Nullable Object userData, @Nullable PlanetKitRequestCallback callback)
    fun leave()fun leaveConference()
    val maxPeerVideoReceiveCount : Intval peersVideoMaxCount : Int
    val maxPeerScreenShareReceiveCount : Intval peersScreenShareMaxCount : Int
    fun unHold(userData: Any? = null, callback: PlanetKitRequestCallback? = null): Booleanfun unhold(userData: Any? = null, callback: PlanetKitRequestCallback? = null): Boolean
    fun changeMyScreenShareGroup(toSubgroupName: String?, userData:Any? = null, callback: PlanetKitRequestCallback? = null): Booleanfun changeMyScreenShareDestination(toSubgroupName: String, userData:Any? = null, callback: PlanetKitRequestCallback? = null): Boolean
    fun changeMyScreenShareDestinationToMainRoom(userData:Any? = null, callback: PlanetKitRequestCallback? = null): Boolean
    fun enableVideo(userData: Any? = null, callback: PlanetKitRequestCallback? = null): Booleanfun enableVideo(initialMyVideoState: PlanetKitInitialMyVideoState = PlanetKitInitialMyVideoState.RESUME, userData: Any? = null, callback: PlanetKitRequestCallback? = null): Boolean
    fun setVideoSource(videoSource: VideoSource?)fun setVideoSource(videoSource: PlanetKitCustomVideoSource), fun clearVideoSource()
  • PlanetKitSession interface 1-to-1 callGroup call

    이전 버전PlanetKit 5.5
    interface PlanetKitSessioninterface PlanetKitCall, interface PlanetKitConference
    sid: IntinstanceId: Int
    val isMicMuted: Booleanval isMyAudioMuted: Boolean
    val isAllPeersAudioPlayoutSilenced: BooleanPlanetKitCall::val isPeerAudioSilenced: Boolean
    PlanetKitConference::val isPeersAudioSilenced: Boolean
    val isSendVideoHwCodecEnabled: BooleanCallListener.onConnected
    ConferenceListener.onConnected
    fun setMicMute(isMute: Boolean, userData: Any? = null, callback: PlanetKitRequestCallback? = null): Booleanfun muteMyAudio(isMute: Boolean, userData: Any? = null, callback: PlanetKitRequestCallback? = null): Boolean
    fun startAECReferenceData(userData: Any? = null, callback: PlanetKitRequestCallback? = null): Booleanfun startUserAcousticEchoCancellerReference(userData: Any? = null, callback: PlanetKitRequestCallback? = null): Boolean
    fun stopAECReferenceData(userData: Any? = null, callback: PlanetKitRequestCallback? = null): Booleanfun stopUserAcousticEchoCancellerReference(userData: Any? = null, callback: PlanetKitRequestCallback? = null): Boolean
    fun requestPeerMute(isMute: Boolean, userData: Any? = null, callback: PlanetKitRequestCallback? = null): BooleanPlanetKitCall::fun requestPeerMute(isMute: Boolean, userData: Any? = null, callback: PlanetKitRequestCallback? = null): Boolean
    PlanetKitConference::fun requestPeersMute(isMute: Boolean, userData: Any? = null, callback: PlanetKitRequestCallback? = null): Boolean
    fun requestPeerMute(isMute: Boolean): BooleanPlanetKitCall::fun requestPeerMute(isMute: Boolean): Boolean
    PlanetKitConference::fun requestPeersMute(isMute: Boolean): Boolean
    fun silenceAllPeersAudioPlayout(isSilence: Boolean, userData: Any? = null, callback: PlanetKitRequestCallback? = null): BooleanPlanetKitCall::fun silencePeerAudio(isSilence: Boolean, userData: Any? = null, callback: PlanetKitRequestCallback? = null): Boolean
    PlanetKitConference::fun silencePeersAudio(isSilence: Boolean, userData: Any? = null, callback: PlanetKitRequestCallback? = null): Boolean
    fun makeSendDataSession(@IntRange(from = 100, to = 1000) streamId: Int, type: PlanetKitDataSessionType, listener: SendDataSessionListener)fun makeOutboundDataSession(@IntRange(from = 100, to = 1000) streamId: Int, type: PlanetKitDataSessionType, listener: OutboundDataSessionListener)
    fun makeReceiveDataSession(@IntRange(from = 100, to = 1000) streamId: Int, listener: ReceiveDataSessionListener)fun makeInboundDataSession(@IntRange(from = 100, to = 1000) streamId: Int, listener: InboundDataSessionListener)
    fun unsupportedReceiveDataSession(streamId: Int): Booleanfun unsupportInboundDataSession(streamId: Int): Boolean
    fun getReceiveDataSession(@IntRange(from = 100, to = 1000) streamId: Int): PlanetKitReceiveDataSession?fun getInboundDataSession(@IntRange(from = 100, to = 1000) streamId: Int): PlanetKitInboundDataSession?
    fun getSendDataSession(@IntRange(from = 100, to = 1000) streamId: Int): PlanetKitSendDataSession?fun getOutboundDataSession(@IntRange(from = 100, to = 1000) streamId: Int): PlanetKitOutboundDataSession?
  • PlanetKitAudioVolume class 1-to-1 callGroup call

    이전 버전PlanetKit 5.5
    class PlanetKitAudioVolumeclass PlanetKitAudioDescription
    val averageVolume: Intval averageVolumeLevel: Int
    val subgroupName:String?val sentSubgroupName:String?
  • PlanetKitAudioVolumes class 1-to-1 callGroup call

    이전 버전PlanetKit 5.5
    class PlanetKitAudioVolumesclass PlanetKitAudioDescriptions
  • PlanetKitVerifyCallParam.Builder class 1-to-1 call

    이전 버전PlanetKit 5.5
    fun messageData(messageData: String)fun cCParam(cCParam: PlanetKitCCParam)
  • PlanetKitConferencePeerInfo class Group call

    이전 버전PlanetKit 5.5
    val serviceId: StringPlanetKitConferencePeer::val serviceId: String
    val user: PlanetKitUserPlanetKitConferencePeer::val user: PlanetKitUser
    val userId: StringPlanetKitConferencePeer::val userId: String
    var videoSubgroupName: String?PlanetKitConferencePeer::val currentVideoSubgroupName: String?
    val mediaType:PlanetKitMediaTypePlanetKitConferencePeer::val mediaType:PlanetKitMediaType
    val subgroupNames: Set<String>PlanetKitConferencePeer::val subgroupNames:Set<String>
    val isDataSessionSupport: BooleanPlanetKitConferencePeer::val isDataSessionSupported: Boolean
    val isAudioMuted:Boolean: BooleanPlanetKitConferencePeer::val isAudioMuted: Boolean
    val isOnHold:BooleanPlanetKitConferencePeer::val holdStatus: HoldStatus
    val displayName:String?PlanetKitConferencePeer::val displayName:String?
    val userEquipmentType: PlanetKitUserEquipmentTypePlanetKitConferencePeer::val userEquipmentType: PlanetKitUserEquipmentType
    val sipLocalIP: String?PlanetKitConferencePeer::val sipLocalIP: String?
    val sipDeviceInfo:String?PlanetKitConferencePeer::val sipDeviceInfo:String?
    fun isSameMember(member:PlanetKitConferencePeerInfo): BooleanPlanetKitConferencePeer::fun isSameMember(member:PlanetKitConferencePeer):Boolean
  • PlanetKitConferenceExceptionMessage class Group call

    이전 버전PlanetKit 5.5
    val peer: PlanetKitConferencePeerInfoval peer: PlanetKitConferencePeer
  • PlanetKitConferencePeerHoldReceivedParam class Group call

    이전 버전PlanetKit 5.5
    val peer:PlanetKitConferencePeerInfoval peer:PlanetKitConferencePeer
  • PlanetKitConferencePeerSetSharedContentsParam class Group call

    이전 버전PlanetKit 5.5
    val peer:PlanetKitConferencePeerInfoval peer:PlanetKitConferencePeer
  • OnNoVideoSourceListener interface 1-to-1 callGroup call

    이전 버전PlanetKit 5.5
    fun onNoVideoSource(session: PlanetKitSession)fun onMyVideoNoSourceDetected(call: PlanetKitCall), fun onMyVideoNoSourceDetected(conference: PlanetKitConference)

추가​

  • ConferenceListener interface Group call
    • fun onMyAudioDescriptionUpdated(conference: PlanetKitConference, audioDescription: PlanetKitAudioDescription)
    • fun onPeersAudioDescriptionUpdated(conference: PlanetKitConference, peersAudioDescription:PlanetKitAudioDescriptions)
    • fun onMyScreenShareStoppedByHold(conference: PlanetKitConference)
    • fun removePeerVideoView(view: PlanetKitVideoView)
  • PlanetKitCCParam class 1-to-1 call
    • val peerId: String
    • val peerServiceId: String
    • val mediaType: PlanetKitMediaType
    • fun create(messageData: String): PlanetKitCCParam?
  • PlanetKitConferencePeerclass Group call
    • val screenShareSubgroupName:String?
    • enum class PeerGetFailReason
    • data class VideoStatusResult
    • data class ScreenShareStateResult
    • data class AudioVolumeResult
    • data class HoldStatus
    • fun createPeerControl(): PlanetKitPeerControl?
  • PlanetKitPeerView class Group call
  • PlanetKitMyMediaStatusListener interface 1-to-1 callGroup call
    • fun onMyAudioDescriptionUpdated(audioDescription: PlanetKitAudioDescription)
    • fun onVideoStatusUpdated(videoStatus: PlanetKitVideoStatus)
    • fun onVideoSubgroupUpdated(subgroupName: String?)
    • fun onScreenShareStateUpdated(state: PlanetKitScreenShareState)
    • fun onScreenShareSubgroupUpdated(subgroupName: String?)
    • fun onMyAudioMuted()
    • fun onMyAudioUnmuted()
  • PlanetKitDisconnectedParam data class 1-to-1 callGroup call
    • val reason: PlanetKitDisconnectReason
    • val source: PlanetKitDisconnectSource
    • val byRemote: Boolean
    • val userCode: String?
  • PlanetKitStartFailReason enum 1-to-1 callGroup call
    • TOO_LONG_APP_SERVER_DATA
    • NOT_INITIALIZED
  • PlanetKitDisconnectReason enum 1-to-1 callGroup call
    • INTERNAL_ERROR
    • USER_ERROR
    • INTERNAL_KIT_ERROR
    • AUDIO_TX_NO_SRC
    • UNAVAILABLE_NETWORK
    • APP_DESTROY
    • SYSTEM_SLEEP
    • SYSTEM_LOGOFF
    • SERVICE_ACCESS_TOKEN_ERROR
    • MTU_EXCEEDED
    • APP_SERVER_DATA_ERROR
    • MAX_CALL_TIME_EXCEEDED
    • SERVICE_TOO_MANY_REQUESTS
    • DESKTOP_SCREEN_LOCKED
  • PlanetKitDisconnectSource enum 1-to-1 callGroup call
    • UNDEFINED
    • CALLEE
    • CALLER
    • PARTICIPANT
    • CLOUD_SERVER
    • APP_SERVER
  • PlanetKitCall interface 1-to-1 call
    • val isPeerAudioMuted:Boolean
    • val myUseResponderPreparation: Boolean
    • val myCallStartMessage: PlanetKitCallStartMessage?
    • val peerUseResponderPreparation: Boolean
    • val peerCallStartMessage: PlanetKitCallStartMessage?
    • fun acceptCall( listener: AcceptCallListener, useResponderPreparation: Boolean = false )
    • fun acceptCall( listener: AcceptCallListener, callStartMessage: PlanetKitCallStartMessage, useResponderPreparation: Boolean = false )
    • fun setMyScreenShareVideoShareMode(videoShareMode: Boolean): Boolean
    • fun isMyScreenShareVideoShareModeEnabled(): Boolean
    • fun isRecordOnCloudActivated(): Boolean
    • fun setOnAudioRouteAvailableListChangeListener(listener: OnAudioRouteAvailableListChangeListener?)
    • fun getMyMediaStatus() : PlanetKitMyMediaStatus?
  • PlanetKitCallConnectedParam data class 1-to-1 call
    • val isDataSessionSupported: Boolean
    • val isVideoHwCodecEnabled: Boolean
    • val peerStartMessage: PlanetKitCallStartMessage?
    • val isInResponderPreparation: Boolean
    • val shouldFinishPreparation: Boolean
    • val isVideoShareModeSupported: Boolean
  • PlanetKitCallStartMessage data class 1-to-1 call
    • val data: String
  • PlanetKitConference interface Group call
    • fun getConferencePeer(peerUser: PlanetKitUser): PlanetKitConferencePeer?
    • fun getConferencePeer(peerId: String, peerServiceId: String): PlanetKitConferencePeer?
    • fun removePeerScreenShareView(view: PlanetKitVideoView)
    • val isOnHold: Boolean
    • fun setMyScreenShareVideoShareMode(videoShareMode: Boolean): Boolean
    • fun isMyScreenShareVideoShareModeEnabled(): Boolean
    • fun setOnAudioRouteAvailableListChangeListener(listener: OnAudioRouteAvailableListChangeListener?)
    • fun getMyMediaStatus() : PlanetKitMyMediaStatus?
  • PlanetKitMyView class 1-to-1 callGroup call
    • fun fillColor(@ColorInt color : Int)
    • fun setMe(conference: PlanetKitConference, myViewListener: MyViewListener? =null, userData:Any? =null, ) : Boolean
    • fun setMe(call: PlanetKitCall, myViewListener: MyViewListener? =null, userData:Any?=null): Boolean
    • var scaleType : PlanetKitViewScaleType
    • var blurFactor : Int
    • val myVideoStatus: PlanetKitVideoStatus
    • val myVideoSubgroupName: String?
    • val myScreenShareState: PlanetKitScreenShareState
    • val myScreenShareSubgroupName: String?
    • val myDisplayName: String?
    • val myEquipmentType: PlanetKitUserEquipmentType
    • val isOnHold: Boolean?
    • val isMyAudioMuted: Boolean?
    • val me:PlanetKitUser?
    • fun clearMe()
    • fun resetFirstFrameRendered()
    • interface MyViewListener
    • var mirroredType: PlanetKitMirroredType
  • PlanetKitMyView.MyViewListener interface 1-to-1 callGroup call
    • fun onInitialized(userData: Any?)
    • fun onRenderFirstFrame()
    • fun onAudioDescriptionUpdated(audioDescription:PlanetKitAudioDescription)
    • fun onVideoStatusUpdated(videoStatus: PlanetKitVideoStatus)
    • fun onVideoSubgroupUpdated(subgroupName: String?)
    • fun onMyAudioMuted()
    • fun onMyAudioUnmuted()
    • fun onScreenShareStateUpdated(state: PlanetKitScreenShareState)
    • fun onScreenShareSubgroupUpdated(subgroupName: String?)
    • fun onHold()
    • fun onUnHold()
  • PlanetKitPeerScreenShareView class Group call
    • val isScreenShareStarted : Boolean
    • var scaleType : PlanetKitViewScaleType
    • var blurFactor : Int
    • var mirroredType: PlanetKitMirroredType
    • val peer : PlanetKitConferencePeer?
    • fun fillColor(@ColorInt color : Int)
    • fun setPeer( session: PlanetKitConference, newConferencePeer: PlanetKitConferencePeer, peerScreenShareViewListener: PeerScreenShareViewListener? =null, userData:Any?=null, ) : Boolean
    • fun clearPeer()
    • fun startScreenShare( subgroupName: String? = null, callback: PlanetKitVideoRequestCallback?= null, userData: Any?=null, ) : Boolean
    • fun stopScreenShare(userData: Any?=null, callback: PlanetKitVideoRequestCallback?=null) : Boolean
    • interface PeerScreenShareViewListener
  • PlanetKitPeerScreenShareView.PeerScreenShareViewListener interface Group call
    • fun onInitialized(peer: PlanetKitConferencePeer, userData: Any?)
    • fun onRenderFirstFrame(peer: PlanetKitConferencePeer)
    • fun onScreenShareUpdated(peer: PlanetKitConferencePeer, state: PlanetKitScreenShareState, subgroupName: String?)
    • fun onDisconnected(peer: PlanetKitConferencePeer)
  • PlanetKitDataSessionFailReason enum 1-to-1 callGroup call
    • NONE
    • INTERNAL
    • NOT_INCOMING
    • ALREADY_EXIST
    • INVALID_ID
    • INVALID_TYPE
  • PlanetKitConferenceParam class Group call
    • val playEndToneRegardlessOfConferenceState: Boolean
    • val enableAudioDescription: Boolean
    • val audioDescriptionInterval:Long
  • PlanetKitConferenceParam.Builder class Group call
    • fun enableAudioDescription(enable:Boolean)
    • fun setAudioDescriptionInterval(intervalMS:Long)
    • fun enablePlayEndToneRegardlessOfConferenceState(value: Boolean)
    • fun setInitialMyVideoState(value: PlanetKitInitialMyVideoState)
  • CallListener interface 1-to-1 call
    • fun onMyAudioDescriptionUpdated(call: PlanetKitCall, audioDescription: PlanetKitAudioDescription)
    • fun onPeerAudioDescriptionUpdated(call: PlanetKitCall, audioDescription: PlanetKitAudioDescription)
    • fun onMyScreenShareStoppedByHold(call: PlanetKitCall)
    • fun onRecordOnCloudUpdated(call: PlanetKitCall, activated: Boolean, reason: PlanetKitRecordOnCloudDeactivateReason)
  • PlanetKitSubgroup interface Group call
    • val attribute: PlanetKitSubgroupAttribute?
    • val isSendingScreenShare: Boolean
  • PlanetKit object 1-to-1 callGroup call
    • fun interface OnInitializeCompleteListener
  • VideoSource abstract class 1-to-1 callGroup call
    • protected fun postingFrameDataAvailable(nanoSecondsTimestamp: Long): Boolean
    • protected val isMaxFpsLimitEnabled: Boolean
    • protected val maxFpsLimit: Int
    • protected abstract fun onMaxFpsLimitUpdated(isLimitEnabled: Boolean, maxFps: Int)
  • PlanetKitSubgroupAttribute data class Group call
  • PlanetKitMakeCallParam data class 1-to-1 call
    • val enableAudioDescription: Boolean
    • val audioDescriptionInterval:Long
    • val recordOnCloud: Boolean
    • val playEndToneRegardlessOfCallState: Boolean
  • PlanetKitMakeCallParam.Builder class 1-to-1 call
    • fun enableAudioDescription(enable:Boolean)
    • fun setAudioDescriptionInterval(intervalMS:Long)
    • fun enableRecordOnCloud(value: Boolean)
    • fun enablePlayEndToneRegardlessOfCallState(value: Boolean)
    • fun setInitialMyVideoState(value: PlanetKitInitialMyVideoState)
  • PlanetKitRecordOnCloudDeactivateReason enum class 1-to-1 call
  • PlanetKitLogSizeLimit enum class 1-to-1 callGroup call
  • PlanetKitConfiguration.Builder class 1-to-1 callGroup call
    • fun setLogSizeLimit(logSizeLimit: PlanetKitLogSizeLimit)
  • PlanetKitVerifyCallParam class 1-to-1 call
    • val enableAudioDescription: Boolean
    • val audioDescriptionInterval:Long
    • val playEndToneRegardlessOfCallState: Boolean
  • PlanetKitVerifyCallParam.Builder class 1-to-1 call
    • fun enableAudioDescription(enable:Boolean)
    • fun setAudioDescriptionInterval(intervalMS:Long)
    • fun enablePlayEndToneRegardlessOfCallState(value: Boolean)
  • PlanetKitVideoView class 1-to-1 callGroup call
    • var mirroredType: PlanetKitMirroredType
  • PlanetKitMirroredType enum class 1-to-1 callGroup call
  • PlanetKitDataSessionClosedReason enum class 1-to-1 callGroup call
  • OutboundDataSessionListener interface 1-to-1 callGroup call
    • void onClosed(@NonNull PlanetKitOutboundDataSession dataSession, @NonNull PlanetKitDataSessionClosedReason closedReason)
  • InboundDataSessionListener interface 1-to-1 callGroup call
    • void onClosed(@NonNull PlanetKitInboundDataSession dataSession, @NonNull PlanetKitDataSessionClosedReason closedReason)
  • PlanetKitPeerControl class Group call
    • val peer: PlanetKitConferencePeer
    • fun startScreenShare(subgroupName: String? = null, callback: PlanetKitVideoRequestCallback?= null, userData: Any?=null) : Boolean
    • fun stopScreenShare(userData: Any?=null, callback: PlanetKitVideoRequestCallback?=null) : Boolean
    • fun startVideo(resolution: PlanetKitVideoResolution, subgroupName: String? = null, callback: PlanetKitVideoRequestCallback?= null, resolutionCallback: PlanetKitPeerVideoResolutionCallback?=null, userData: Any?=null) : Boolean
    • fun stopVideo(userData: Any?=null, callback: PlanetKitVideoRequestCallback?=null) : Boolean
    • fun register(peerControlListener: PeerControlListener, userData: Any? = null, callback: PlanetKitRequestCallback? = null): Boolean
    • fun unregister(userData: Any? = null, callback: PlanetKitRequestCallback? = null): Boolean
  • PlanetKitPeerControl.PeerControlListener interface Group call
    • fun onVideoUpdated(peer: PlanetKitConferencePeer, videoStatus: PlanetKitVideoStatus, subgroupName: String?)
    • fun onMicMuted(peer: PlanetKitConferencePeer)
    • fun onMicUnmuted(peer: PlanetKitConferencePeer)
    • fun onScreenShareUpdated(peer: PlanetKitConferencePeer, state: PlanetKitScreenShareState, subgroupName: String?)
    • fun onSubscribed(peer: PlanetKitConferencePeer, subgroup: PlanetKitSubgroup)
    • fun onUnsubscribed(peer: PlanetKitConferencePeer, subgroupName: String?)
    • fun onSharedContentsSet(peer: PlanetKitConferencePeer, param: PlanetKitConferencePeerSetSharedContentsParam)
    • fun onSharedContentsUnSet(peer: PlanetKitConferencePeer)
    • fun onHold(peer: PlanetKitConferencePeer, reason:String?)
    • fun onUnhold(peer: PlanetKitConferencePeer)
    • fun onAudioDescriptionUpdated(peer: PlanetKitConferencePeer, audioDescription: PlanetKitAudioDescription)
    • fun onDisconnected(peer: PlanetKitConferencePeer)
  • PlanetKitMyMediaStatus interface 1-to-1 callGroup call
    • val myVideoStatus: PlanetKitVideoStatus
    • val myVideoSubgroupName: String?
    • val myScreenShareState: PlanetKitScreenShareState
    • val myScreenShareSubgroupName: String?
    • val isMyAudioMuted: Boolean
    • fun addHandler(listener: PlanetKitMyMediaStatusListener, userData:Any?, callback: PlanetKitRequestCallback)
    • fun removeHandler(listener: PlanetKitMyMediaStatusListener, userData:Any?, callback: PlanetKitRequestCallback)
  • OnAudioRouteAvailableListChangeListener interface 1-to-1 callGroup call
    • fun onAudioRouteAvailableListChanged(connectedList: List<PlanetKitAudioRoute>)
  • PlanetKitCameraManager interface 1-to-1 callGroup call
    • val resolution: PlanetKitVideoResolution
    • var cameraType: PlanetKitCameraType
    • val isStarted: Boolean
    • val fps: Int
    • fun setStateListener(listener: StateListener?)
    • fun setManualResolution(resolution: PlanetKitVideoResolution)
    • fun setDefaultResolution()
    • fun setVirtualBackgroundPlugin(plugin: PlanetKitPluginVirtualBackground) :Boolean
    • fun addCameraTypeChangedListener(listener: CameraTypeChangedListener)
    • fun removeCameraTypeChangedListener(listener: CameraTypeChangedListener)
    • fun setVideoSourceInterceptor(interceptor: PlanetKitVideoInterceptor?)
    • fun startPreview(view: PlanetKitVideoView): Boolean
    • fun stopPreview(view: PlanetKitVideoView): Boolean
    • fun enableDumpFrame(enable: Boolean)
  • PlanetKitCameraManager.StateListener interface 1-to-1 callGroup call
    • fun onStart()
    • fun onStop()
    • fun onError(@ErrorCode code: Int)
  • PlanetKitCameraManager.CameraTypeChangedListener interface 1-to-1 callGroup call
    • fun onChanged(isFrontCamera: Boolean)
  • PlanetKitPluginVirtualBackground interface 1-to-1 callGroup call
    • fun getCurrentVirtualBackgroundType(): VirtualBackgroundType
    • fun setVirtualBackgroundWithBlur(@IntRange(from = 1, to = 25) radius: Int)
    • fun setVirtualBackgroundWithImage(inputImage: Bitmap)
    • fun clearVirtualBackground()
  • PlanetKitPluginVirtualBackground.VirtualBackgroundType enum class 1-to-1 callGroup call
    • NONE(0)
    • BLUR(1)
    • IMAGE(2)
  • PlanetKitPluginProviderVirtualBackground class 1-to-1 callGroup call
    • fun getPlugin(): PlanetKitPluginVirtualBackground
  • PlanetKitInitialMyVideoState enum class 1-to-1 callGroup call
    • RESUME(0)
    • PAUSE(1)
  • PlanetKitCustomVideoSource abstract class 1-to-1 callGroup call
    • var maxFps: Int? = null
    • fun addMyVideoView(view: PlanetKitVideoView)
    • fun removeMyVideoView(view: PlanetKitVideoView)
    • protected fun postFrameData(frameData: FrameData): Boolean
    • protected fun postingFrameDataAvailable(): Boolean
    • abstract fun onMaxFpsLimitUpdated(isLimitEnabled: Boolean, maxFps: Int)
  • PlanetKitCustomVideoSource.FrameData abstract class 1-to-1 callGroup call
  • PlanetKitCameraResolution enum class 1-to-1 callGroup call
    • QVGA
    • VGA
    • HD

삭제​

  • ScreenCapturerVideoSource class 1-to-1 callGroup call
    • fun stop(reason: VideoSource.VideoSourceStopReason): Boolean
    • fun useDeviceRotation(): Boolean
  • PlanetKitMediaDisableReason enum class 1-to-1 callGroup call
    • NOT_SUPPORT
    • NO_MEDIA_SRC
    • NO_RECV_MEDIA
  • CameraVideoSource class 1-to-1 callGroup call
  • PlanetKitVideoView class 1-to-1 callGroup call
    • override fun getRenderView(): AndromedaRenderView
  • PlanetKitVerifyCallParam.Builder class 1-to-1 call
    • fun myScreenShareSendCapability(capability: PlanetKitVideoCapability)
  • PlanetKitVerifyCallParam data class 1-to-1 call
    • val myScreenShareSendCapability: PlanetKitVideoCapability?
  • PlanetKitConferenceRoomType enum class Group call
  • PlanetKitMakeCallParam.Builder class 1-to-1 call
    • fun myScreenShareSendCapability(capability: PlanetKitVideoCapability)
  • PlanetKitMakeCallParam data class 1-to-1 call
    • val myScreenShareSendCapability: PlanetKitVideoCapability?
  • SendDataSessionListener interface 1-to-1 callGroup call
    • void onUnsupportedDataSession(@NonNull PlanetKitSendDataSession dataSession)
  • PlanetKitConferenceParam class Group call
    • val apiKey: String?
    • val roomType: PlanetKitConferenceRoomType
    • val myScreenShareSendCapability: PlanetKitVideoCapability?
    • val disconnectOnBadNetwork: Boolean
  • PlanetKitConferenceParam.Builder class Group call
    • fun apiKey(apiKey: String)
    • fun roomType(roomType: PlanetKitConferenceRoomType)
    • fun myScreenShareSendCapability(capability: PlanetKitVideoCapability)
    • fun disconnectOnBadNetwork(disconnectOnBadNetwork: Boolean)
  • PlanetKitCallParam.Builder class 1-to-1 call
    • fun apiKey(apiKey: String)
  • PlanetKitCallParam class 1-to-1 call
    • val apiKey: String?
  • PlanetKitCallInitData class 1-to-1 call
  • PlanetKitError enum 1-to-1 callGroup call
    • SESSION_FAIL_REASON_ALREADY_EXIST
    • SESSION_FAIL_REASON_INVALID_SESSION_TYPE
    • SESSION_FAIL_REASON_FAILED_TO_MAKE_DATA_SESSION
  • PlanetKitConfiguration.Builder class 1-to-1 callGroup call
    • fun logToConsole( isEnabled: Boolean )
  • PlanetKitConference interface Group call
    • fun initialize(context: Context)
    • val memberVolumes: PlanetKitAudioVolumes?
    • val isHighPriorityAudio: Boolean
    • fun sendShortData( targetUsers: List<PlanetKitUser>, type: String, shortData: ByteArray, userData: Any? = null, callback: PlanetKitRequestCallback? = null): Boolean
    • fun sendShortData( targetUsers: List<PlanetKitUser>, type: String, shortData: ByteArray): Boolean
    • fun setAudioHighPrioritySend( isHighPriority: Boolean, userData: Any? = null, callback: PlanetKitRequestCallback? = null): Boolean
    • val roomType: PlanetKitConferenceRoomType
  • PlanetKitCall interface 1-to-1 call
    • val myCallInitData: PlanetKitCallInitData?
    • val peerCallInitData: PlanetKitCallInitData?
    • fun acceptCall(mediaType: PlanetKitMediaType, listener: AcceptCallListener, callInitData:PlanetKitCallInitData )
    • fun acceptCall( listener: AcceptCallListener, callInitData: PlanetKitCallInitData = PlanetKitCallInitData() )
    • val peerVolume:PlanetKitAudioVolume?
    • fun initialize(context: Context)
    • fun reject()
  • PlanetKitLogStorage class 1-to-1 callGroup call
  • PlanetKitLogStorageType enum 1-to-1 callGroup call
  • PlanetKitConferencePeer class Group call
    • var audioSubgroupName: String?
    • var audioTaggedSubgroupName: String?
  • PlanetKitSession class 1-to-1 callGroup call
    • val myVolume: PlanetKitAudioVolume
  • PlanetKitIntent class 1-to-1 call
  • PlanetKitStartFailReason enum 1-to-1 callGroup call
    • KIT_CALL_INIT_DATA_INVALID_SIZE
  • PlanetKitDisconnectReason enum 1-to-1 callGroup call
    • LOCAL_MIC_NO_SRC
    • REMOTE_MIC_NO_SRC
    • LOCAL_INTERNAL_ERROR
    • REMOTE_INTERNAL_ERROR
    • LOCAL_USER_ERROR
    • REMOTE_USER_ERROR
    • LOCAL_INTERNAL_KIT_ERROR
    • REMOTE_INTERNAL_KIT_ERROR
    • BAD_NETWORK_IN_CONFERENCE
    • UNAVAILABLE_NETWORK_IN_CALL
    • SERVICE_APIKEY_ERROR
    • WRONG_ROOM_ATTRIBUTE
  • PlanetKitSubgroupManager interface Group call
    • boolean tagMainRoomVideoSend(@Nullable String subgroupName, @Nullable java.lang.Object userData, @Nullable PlanetKitRequestCallback callback)
    • PlanetKitSubgroup getMyTagVideoSubgroup()
  • PlanetKitConferencePeerInfo class Group call
    • var videoTaggedSubgroupName: String?
  • DefaultCameraVideoSource class 1-to-1 callGroup call