본문으로 건너뛰기

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()가 호출됩니다.
  • userAgentisVideoHwCodecSupport 정보는 onComplete에 의해 제공되므로 관련 API가 삭제되었습니다.

API 변경

변경
  • PlanetKit class 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 class 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 인터페이스 제거

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

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 DefaultCameraVideoSourcePlanetKitCameraManager로 교체

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

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 로그 설정 업데이트

  • 로깅 정책에 따라 적절한 PlanetKitLogLevelPlanetKitLogSizeLimit을 사용할 수 있습니다.
  • 로그 파일의 크기를 설정할 수 있습니다.
  • 로그 레벨이 단순화되었습니다.
  • 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 class 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의 동작과 일치합니다.
  • useResponderPreparationPlanetKitCallStartMessage와는 다른 기능이기 때문에 PlanetKitCallStartMessage에서 분리되었습니다.
  • PlanetKitCallStartMessage의 최대 크기는 200바이트로 제한됩니다.
  • 관련 API들이 변경되었습니다.

API 변경

추가
  • PlanetKitCall class 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 class 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 CallListeneronVerifiedonConnected 파라미터 변경

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

  • 피어 정보를 나타내던 PlanetKitConferencePeerInfoPlanetKitConferencePeer에 통합되었습니다.
  • 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.holdReasonPlanetKitConferencePeerInfo.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 class 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 class Group call
    • val roomType: PlanetKitConferenceRoomType
  • PlanetKitDisconnectReason class 1-to-1 callGroup call
    • WRONG_ROOM_ATTRIBUTE

Breaking change PlanetKitConferencedisableVideo()에서 reason 파라미터를 제거

  • PlanetKitConferencedisableVideo 메서드의 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 class 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 class 1-to-1 call
    • fun onMyAudioDescriptionUpdated(call: PlanetKitCall, audioDescription: PlanetKitAudioDescription)
    • fun onPeerAudioDescriptionUpdated(call: PlanetKitCall, audioDescription: PlanetKitAudioDescription)
  • ConferenceListener class 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 class 1-to-1 call
    • val peerVolume:PlanetKitAudioVolume?
  • PlanetKitConference class 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 DefaultCameraVideoSourceclass 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 SendDataSessionListenerReceiveDataSessionListener의 인터페이스 변경

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

API 변경

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

    이전 버전PlanetKit 5.5
    class SendDataSessionListenerclass 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 stidappServerData로 이름 변경

  • 이것은 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 제거

  • isHighPriorityAudiosetAudioHighPrioritySend가 제거되었습니다.
  • 관련 API가 제거되었습니다.

API 변경

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

Breaking change PlanetKitIntent 제거

  • PlanetKitIntentlocalBroadCast 라이브러리에 의존하여 구현되었으나, 해당 라이브러리는 더 이상 사용되지 않습니다. 애플리케이션은 CallListenerConferenceListener의 구현을 사용하여 동일한 기능을 구현할 수 있습니다. 데모 앱은 동일한 기능을 구현하기 위해 다른 오픈 소스(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 표시 이름에 제한 추가

  • PlanetKitConferenceParammyDisplayName 속성은 이제 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 class Group call

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

Enhancement isPeerAudioMuted 추가

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

API 변경

추가
  • PlanetKitCall class 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 class 1-to-1 call
    • fun onMyScreenShareStoppedByHold(call: PlanetKitCall)
  • ConferenceListener class 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 class Group call

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

Enhancement 클라우드 레코딩 지원

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

API 변경

변경
  • PlanetKitCall class 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 class 1-to-1 call
    • fun onRecordOnCloudUpdated(call: PlanetKitCall, activated: Boolean, reason: PlanetKitRecordOnCloudDeactivateReason)
  • PlanetKitCall class 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 DefaultCameraVideoSourceclass 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 class 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 class 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 class 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 class 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 class 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(<br>&nbsp;&nbsp;conference:PlanetKitConference,<br>&nbsp;&nbsp;peer:PlanetKitConferencePeerInfo<br>)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 class 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
    class SendDataSessionListenerclass 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 class 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 class 1-to-1 callGroup call

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

추가

  • ConferenceListener class 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 class 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 class 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 class 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 class Group call
    • val attribute: PlanetKitSubgroupAttribute?
    • val isSendingScreenShare: Boolean
  • PlanetKit class 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 class 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 class 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 class 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 class 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