リリースノート
Android向けPlanetKit 6.0のリリースノートです。
PlanetKit 6.0.3
リリース日:2025-07-04
16KBページサイズに対応
- Googleの要求事項に従って、16KBメモリーページのソートを遵守するためにパッチを適用しました。
- これで、PlanetKitで作成または参照する以下のネイティブライブラリーが16KBのソートを遵守します。
arm64-v8a/libplanet-kit.soarm64-v8a/libplanetkit-renderengine.soarm64-v8a/libimage_processing_util_jni.soarm64-v8a/libsurface_util_jni.so
Kotlinバージョンのアップデート
- Kotlinバージョンを
1.6.21から1.8.22にアップグレードしました。- このアップデートは、PlanetKitで使用される16KBページのソートと互換性のあるモジュールをサポートするために必要でした。
- 参考:プロジェクトで
1.8.22より低いKotlinバージョンを使用する場合、互換性の問題を避けるため、1.8.22以上にアップグレードしてください。
特定のシナリオで発生する断続的なクラッシュ修正
- curlバージョン
8.11.1の内部問題により、特定の条件で断続的なクラッシュが発生する可能性がありました。 - この問題は、curl
8.11.1の公式パッチを適用することで解決されました。
PlanetKitPluginProviderVirtualBackgroundモジュールのアップデート
- プラグインモジュール
PlanetKitPluginProviderVirtualBackgroundが16KBページのソートをサポートするバージョン1.0.1にアップデートされました。
マイグレーション
-
build.gradleでバージョンをアップデートしてください。implementation ('com.linecorp.planetkit:plugin-virtualbackground:1.0.1') {
exclude group: 'com.linecorp.planetkit', module: 'planetkit'
}
PlanetKit 6.0
リリース日:2025-05-16
Android OSバージョンをAndroid 15(APIレベル35)にアップグレード
- PlanetKitは今後、Android 15(APIレベル35)を対象とします。
- 参考:アプリケーションは、引き続きAPIレベル35より低い対象SDKバージョン(
targetSdkVersion)を使用できます。
API
- 変更なし
通話中のマイク使用有無によってマイクデバイスを制御
- 通話中にマイクを使用しないとき(例:ミュートまたは通話一時停止)、PlanetKitがマイクデバイスをオフにするように変更されました。
- PlanetKitでは、マイク制御のための2つの方法を提供します。
setMicMuteControlMethodを通じて希望する方法を選択できます。デフォルト値は、AUDIO_MANAGERです。 - 詳しくは、APIドキュメントを参照してください。
API
追加
PlanetKitMicMuteControlMethodenum class 1-to-1 callGroup callAUDIO_MANAGERAUDIO_DRIVER
PlanetKitVerifyCallParam.Builderclass 1-to-1 callfun setMicMuteControlMethod(value: PlanetKitMicMuteControlMethod)
PlanetKitMakeCallParam.Builderclass 1-to-1 callfun setMicMuteControlMethod(value: PlanetKitMicMuteControlMethod)
PlanetKitConferenceParam.Builderclass Group callfun setMicMuteControlMethod(value: PlanetKitMicMuteControlMethod)
カスタムオーディオソースのためのAudioSourceをPlanetKitCustomAudioSourceに置き換え
- 以前のバージョンでカスタムオーディオソースを実装するには、
AudioSourceを拡張する必要がありましたが、AudioSourceはPlanetKit内部でも使用され、インターフェースが複雑でした。 - PlanetKit 6.0バージョンから新しい
PlanetKitCustomAudioSourceを導入し、カスタムオーディオソースの開発を簡素化しました。既存のAudioSourceはdeprecatedされました。
API
変更
-
PlanetKitCallinterface 1-to-1 call以前のバージョン PlanetKit 6.0.0 fun setAudioSource(audioSource: AudioSource?)fun setCustomAudioSource(audioSource: PlanetKitCustomAudioSource) -
PlanetKitConferenceinterface Group call以前のバージョン PlanetKit 6.0.0 fun setAudioSource(audioSource: AudioSource?)fun setCustomAudioSource(audioSource: PlanetKitCustomAudioSource)
追加
PlanetKitCustomAudioSourceclass 1-to-1 callPlanetKitCallinterface 1-to-1 callfun clearCustomAudioSource()
PlanetKitConferenceinterface Group callfun clearCustomAudioSource()
削除
AudioSourceclass 1-to-1 call
サンプルコード
-
ステップ1:カスタムオーディオソースのクラスを実装します。
object CustomAudioSource : PlanetKitCustomAudioSource() {
private const val FRAME_DURATION_MS: Long = 20
private var thread: Thread? = null
fun start() {
thread = Thread {
while(true) {
val frame: AudioFrame = makeYourAudioFrame()
postFrameData(frame)
Thread.sleep(FRAME_DURATION_MS)
}
}
thread?.start()
}
fun stop() {
thread?.interrupt()
thread?.join()
}
} -
ステップ2:カスタムオーディオソースを設定して開始します。
fun setCustomAudioSource(call: PlanetKitCall, audioSource: CustomAudioSource) {
call.setCustomAudioSource(audioSource)
audioSource.start()
} -
ステップ3:カスタムオーディオソースを解除して停止します。
fun clearCustomAudioSource(call: PlanetKitCall, audioSource: CustomAudioSource) {
call.clearCustomAudioSource()
audioSource.stop()
}
PlanetKitCCParamを使用して通話受信中にクラウド通話の録音有効化の可否を確認
- 通話受信時にクラウド通話の録音が有効になっているかどうかを示すフィールドを
PlanetKitCCParamに追加しました。
API
追加
PlanetKitCCParamclass 1-to-1 callval isRecordOnCloudEnabled: Boolean
ビデオ通話の有効化時のレスポンスタイプの設定APIを削除
- これで、1対1音声通話で相手がビデオ通話を有効にするとき、ローカルユーザーのビデオは常に一時停止状態に設定されます。
- 以前のバージョンでは、相手が音声通話をビデオ通話に切り替えるとき、ローカルユーザーのビデオ送信を自動的に開始するかどうか
responseOnEnableVideo()を使用して決定できました。 - しかし、このAPIは個人情報保護の問題と潜在的な誤用の可能性があるため、バージョン6.0から削除し、
onVideoEnabledByPeerはonVideoEnabledByPeerAndMyVideoPausedに変更しました。 - したがって、6.0 バージョンからは、相手がビデオ通話を有効にするとき、ローカルユーザーのビデオは一時停止された状態のままになります。
- 以前のバージョンでは、相手が音声通話をビデオ通話に切り替えるとき、ローカルユーザーのビデオ送信を自動的に開始するかどうか
- この変更により、以前
PlanetKitResponseOnEnableVideo.SENDを利用していたコードは、onVideoEnabledByPeerAndMyVideoPausedイベントを受信した後、手動でビデオを再生する方式にアップデートする必要があります。- 詳しくは、以下のサンプルコードを参照してください。
サンプルコード
- 6.0バージョンで以前
PlanetKitResponseOnEnableVideo.SENDを使用して実装していた動作を再現するには、次のように実装します。
private val callListener = object: MakeCallListener, AcceptCallListener {
override fun onVideoEnabledByPeerAndMyVideoPaused(call: PlanetKitCall) {
...
call.resumeMyVideo()
}
}
API
変更
-
CallListenerinterface 1-to-1 call以前のバージョン PlanetKit 6.0.0 fun onVideoEnabledByPeer(call: PlanetKitCall)fun onVideoEnabledByPeerAndMyVideoPaused(call: PlanetKitCall)
削除
PlanetKitResponseOnEnableVideoenum class 1-to-1 callPlanetKitMakeCallParam.Builderclass 1-to-1 callfun responseOnEnableVideo(responseOnEnableVideo: PlanetKitResponseOnEnableVideo)
PlanetKitVerifyCallParam.Builderclass 1-to-1 callfun responseOnEnableVideo(responseOnEnableVideo: PlanetKitResponseOnEnableVideo)
ピアのボリューム設定APIの改善
- 以前のサブグループ基盤のボリューム制御を個々のピアに対する統合ボリューム設定APIに置き換えました。
- 6.0以前のバージョンでは、サブグループごとにボリュームが制御されていました。6.0バージョンからは、サブグループに関係なくボリュームを設定できます。
- この仕様変更に伴い、関連APIを修正しました。
API
変更
-
PlanetKitConferencePeerclass Group call以前のバージョン PlanetKit 6.0.0 fun getAudioVolumeLevelSetting(subgroupName: String?): AudioVolumeResultfun getAudioVolumeLevelSetting(): AudioVolumeResult
追加
PlanetKitPeerControlclass Group callfun setVolumeLevelSetting(@IntRange(from = 0, to = 110) volumeLevel: Int, userData: Any? = null, callback: PlanetKitRequestCallback? = null): Boolean
PlanetKitPeerViewclass Group callfun setVolumeLevelSetting(@IntRange(from = 0, to = 110) volumeLevel: Int, userData: Any? = null, callback: PlanetKitRequestCallback? = null): Boolean
削除
PlanetKitSubgroupinterface Group callfun getPeerVolumeLevelSetting(user: PlanetKitUser): Int
PlanetKitSubgroupManagerinterface Group callfun setPeerVolumeLevelSetting(peer: PlanetKitUser, subgroupName: String?, @IntRange(from = 0, to = 110) talkerVolume: Int, userData: Any?, callback: PlanetKitRequestCallback?): Booleanfun setPeerVolumeLevelSetting(peer: PlanetKitUser, @IntRange(from = 0, to = 110) talkerVolume: Int, userData: Any?, callback: PlanetKitRequestCallback?): Boolean
ビデオ性能の設定APIの改善
- ビデオ性能(capability)の設定APIでサムネイル解像度はサポートされなくなりました。
- ビデオハードウェアコーデックの設定は、これにより各1対1通話またはグループ通話ごとに設定する代わりに、
PlanetKitを通じて設定されます。
API
変更
-
PlanetKitVideoCapabilityclass 1-to-1 callGroup call以前のバージョン PlanetKit 6.0.0 val maxResolution: PlanetKitVideoResolutionval maxResolution: PlanetKitVideoResolutionCapability
追加
PlanetKitVideoResolutionCapabilityenum class 1-to-1 callGroup callQVGA(1)VGA(2)HD(3)
PlanetKitPreferredHardwareCodecdata class 1-to-1 callGroup callval callVideoSend: Booleanval callVideoReceive: Booleanval conferenceVideoSend: Booleanval conferenceVideoReceive: Boolean
PlanetKitobject 1-to-1 callGroup callfun getCallDeviceDefaultVideoSendCapability(): PlanetKitVideoCapability?fun getCallDeviceDefaultVideoReceiveCapability(): PlanetKitVideoCapability?fun getConferenceDeviceDefaultVideoSendCapability(): PlanetKitVideoCapability?fun getConferenceDeviceDefaultVideoReceiveCapability(): PlanetKitVideoCapability?fun setPreferredHardwareCodec(preferredHardwareCodec: PlanetKitPreferredHardwareCodec)fun getPreferredHardwareCodec(): PlanetKitPreferredHardwareCodec
削除
PlanetKitVideoCapabilityclass 1-to-1 callGroup callpreferredHwCodec: Boolean
setVideoSourceとclearVideoSourceをsetCustomVideoSourceとclearCustomVideoSourceに名称変更
- API名をより明確に変更しました。
API
変更
-
PlanetKitCallinterface 1-to-1 call以前のバージョン PlanetKit 6.0.0 fun setVideoSource(videoSource: PlanetKitCustomVideoSource)fun setCustomVideoSource(videoSource: PlanetKitCustomVideoSource)fun clearVideoSource()fun clearCustomVideoSource() -
PlanetKitConferenceinterface Group call以前のバージョン PlanetKit 6.0.0 fun setVideoSource(videoSource: PlanetKitCustomVideoSource)fun setCustomVideoSource(videoSource: PlanetKitCustomVideoSource)fun clearVideoSource()fun clearCustomVideoSource()
ConferenceListenerの使用されないコールバックの除去
- 使用されなくなったAPIを除去しました。
- これで、
ConferenceListener.onPeerListUpdatedを使用して参加したピア数に対する情報を得ることができます。
API Change
削除
ConferenceListenerinterface Group callfun onRoomUpdated(joinedPeerCount: Int)
setSpeakerOnおよびisSpeakerOnメソッドをPlanetKitAudioSwitchに移動
setSpeakerOnメソッドをPlanetKitCallおよびPlanetKitConferenceでPlanetKitAudioSwitchに移動しました。これで、このメソッドは成功または失敗を示すBooleanを返します。isSpeakerOnメソッドをPlanetKitCallおよびPlanetKitConferenceでPlanetKitAudioSwitchに移動しました。
API
変更
-
PlanetKitCallinterface 1-to-1 call以前のバージョン PlanetKit 6.0.0 fun setSpeakerOn(isSpeakerOn: Boolean)PlanetKitAudioSwitch::fun setSpeakerOn(isSpeakerOn: Boolean): Booleanval isSpeakerOn: BooleanPlanetKitAudioSwitch::val isSpeakerOn: Boolean -
PlanetKitConferenceinterface Group call以前のバージョン PlanetKit 6.0.0 fun setSpeakerOn(isSpeakerOn: Boolean)PlanetKitAudioSwitch::fun setSpeakerOn(isSpeakerOn: Boolean): Booleanval isSpeakerOn: BooleanPlanetKitAudioSwitch::val isSpeakerOn: Boolean
外付けカメラを提供
- 今回のリリースでは、外付け(USB)カメラのサポートが追加されました。
- 外付けカメラのサポート有無はAndroid端末によります。
- 外付けカメラを使用するには、Android端末が
android.hardware.camera.external機能に対応している必要があります。 - これは、
packageManager.hasSystemFeature(PackageManager.FEATURE_CAMERA_EXTERNAL)またはadb shell pm list features | grep "android.hardware.camera.external"を使用して確認できます。
- 外付けカメラを使用するには、Android端末が
サンプルコード
- 外付けカメラに切り替える
PlanetKit.getCameraManager().startPreview(yourVideoView)
...
if (PlanetKitCameraType.EXTERNAL.isAvailable) {
PlanetKit.getCameraManager().cameraType = PlanetKitCameraType.EXTERNAL
}
- 外付けカメラの使用可否をモニタリングする
private val usbCameraAvailabilityListener = UsbCameraAvailabilityListener { isAvailable ->
// For example, update your UI components based on camera availability.
}
fun onViewCreated() {
PlanetKit.getCameraManager().addUsbCameraAvailabilityListener(usbCameraAvailabilityListener)
}
fun onDestroyView() {
PlanetKit.getCameraManager().removeUsbCameraAvailabilityListener(usbCameraAvailabilityListener)
}
API
追加
PlanetKitCameraTypeenum class 1-to-1 callGroup callEXTERNAL
PlanetKitCameraManagerinterface 1-to-1 callGroup callval supportDeviceFeatureExternalCamera: Booleanfun interface UsbCameraAvailabilityListenerfun addUsbCameraAvailabilityListener(listener: UsbCameraAvailabilityListener)fun removeUsbCameraAvailabilityListener(listener: UsbCameraAvailabilityListener)