カスタムビデオソース
PlanetKitは、基本的にビデオ通話開始時にカメラデバイスを自動的に感知して制御し、カメラでキャプチャーしたビデオをビデオ通話に使用します。ただし、アプリケーションの要求事項によっては、これを変更する必要があります。ユーザーのビデオの代わりに、外部ソースから取得したビデオを画面に表示するのが一例です。
このような要求を満たすために、PlanetKitは希望するビデオフレームを直接供給できるカスタムビデオソース(custom video source)機能を提供します。この機能を通じて、ユーザーが希望するビデオフレームを直接PlanetKitモジュールにレンダリングし、相手に伝えることができます。
Note
カスタムビデオソースを使用している間は、PlanetKitがカメラデバイスを制御しません。
対応する通話タイプ | SDKの最低バージョン |
---|---|
1対1通話、グループ通話(カンファレンス) | PlanetKit 5.5 |
実装手順
カスタムビデオソース機能を実装する手順は、次のとおりです。
カスタムビデオソースクラスを実装する
PlanetKitCustomCamera
を相続するクラスを作ってメソッドを実装します。
import PlanetKit
class CustomCamera: PlanetKitCustomCamera {
static var shared = CustomCamera()
// Implement the abstract method to handle FPS limit updates
override func processFpsLimitUpdate(enabled: Bool, fps: Int32) {
// Handle the FPS limit update
// If `enabled` is true, adjust your frame generation logic to according to the `fps`
}
// Method to simulate video buffer processing
func processVideoBuffer(buffer: CMSampleBuffer) {
guard let targetBuffer = PlanetKitVideoBuffer.getPreferredSampleBuffer(buffer) else {
return
}
let timestamp = CMSampleBufferGetPresentationTimeStamp(targetBuffer)
// Check if video buffer can be sent. If false, drop the buffer.
guard isVideoSendAvailable(timestamp: timestamp) else { return }
let videoBuffer = PlanetKitVideoBuffer(sampleBuffer: targetBuffer,
timestamp: timestamp,
rotation: .rotation0,
position: .unknown,
sender: nil,
source: .camera)
sendVideo(videoBuffer: videoBuffer)
}
}
カスタムビデオソースを使用する
カスタムビデオソースを使用するには、実装したカスタムビデオソースのオブジェクトを引数としてPlanetKitCameraManager
のsetCustomCamera()
を呼び出します。
PlanetKitCameraManager.shared.setCustomCamera(CustomCamera.shared)
カスタムビデオソースをカメラに戻しておく
カスタムビデオソースをカメラに戻しておくには、PlanetKitCameraManager
のresetToDefaultCamera()
を呼び出します。
PlanetKitCameraManager.shared.resetToDefaultCamera()
関連API
カスタムビデオソース機能とこれに関連するAPIは、次のとおりです。
-
PlanetKitCustomCamera
-
PlanetKitCameraManager
のsetCustomCamera()
-
PlanetKitCameraManager
のresetToDefaultCamera()
活用例
以下のようなアプリケーションの要求事項がある場合、カスタムビデオソースを活用して実装できます。
- 映像ファイルをビデオソースとして使用したいとき
- ライブ二元生中継やウェブストリーミングを受信してビデオソースとして使用したいとき
- カメラデバイスに対する制御をPlanetKitではなくアプリケーションで直接したいとき