カスタムビデオソース
PlanetKitは、基本的にビデオ通話開始時にカメラデバイスを自動的に感知して制御し、カメラでキャプチャーしたビデオをビデオ通話に使用します。ただし、アプリケーションの要求事項によっては、これを変更する必要があります。ユーザーのビデオの代わりに、外部ソースから取得したビデオを画面に表示するのが一例です。
このような要求を満たすために、PlanetKitは希望するビデオフレームを直接供給できるカスタムビデオソース(custom video source)機能を提供します。この機能を通じて、ユーザーが希望するビデオフレームを直接PlanetKitモジュールにレンダリングし、相手に伝えることができます。
Note
カスタムビデオソースを使用している間は、PlanetKitがカメラデバイスを制御しません。
| 対応する通話タイプ | SDKの最低バージョン |
|---|---|
| 1対1通話、グループ通話(カンファレンス) | PlanetKit 7.0 |
活用事例
以下のようなアプリケーションの要求事項がある場合、カスタムビデオソースを活用して実装できます。
- 映像ファイルをビデオソースとして使用したいとき
- ライブ二元生中継やウェブストリーミングを受信してビデオソースとして使用したいとき
- カメラデバイスに対する制御をPlanetKitではなくアプリケーションで直接したいとき
実装手順
カスタムビデオソース機能を実装する手順は、次のとおりです。
カスタムビデオソースクラスを実装する
CustomCameraを相続するクラスを作ってメソッドを実装します。
class CustomVideoSource : public PlanetKit::CustomCamera {
public:
void OnStart() override {
// Start custom video source thread
m_videoThread = std::thread(&CustomVideoSource::VideoThreadProc, this);
}
void OnStop() override {
// Stop custom video source thread
m_bRunning = false;
if (m_videoThread.joinable()) {
m_videoThread.join();
}
}
void VideoThreadProc() {
m_bRunning = true;
const auto frameInterval = std::chrono::milliseconds(66); // ~15fps (1000ms / 15 = 66.67ms)
while (m_bRunning) {
// Read from file
PlanetKit::SVideoFrame sVideoFrame;
// Tick count as microseconds
sVideoFrame.llTick =
std::chrono::duration_cast<std::chrono::microseconds>(
std::chrono::steady_clock::now().time_since_epoch())
.count();
this->WriteFrameData(sVideoFrame);
// Maintain 15fps timing
std::this_thread::sleep_for(frameInterval);
}
}
private:
std::thread m_videoThread;
std::atomic<bool> m_bRunning = false;
};
カスタムビデオソースを使用する
カスタムビデオソースを使用するには、実装したカスタムビデオソースのオブジェクトを引数としてCameraControllerのChangeCamera()を呼び出します。
class YourCameraManager {
// Change to custom video source
void SetCustomVideoSource() {
PlanetKit::CameraControllerPtr pCameraController =
PlanetKit::PlanetKitManager()::GetInstance()->GetCameraController();
pCameraController->ChangeCamera(m_pYourCustomVideoSource);
}
...
private:
PlanetKit::CustomCameraPtr m_pYourCustomVideoSource =
PlanetKit::MakeAutoPtr<CustomVideoSource>();
};
カスタムビデオソースをカメラに戻しておく
カスタムビデオソースをカメラに戻しておくには、カメラオブジェクトを引数としてCameraControllerのChangeCamera()を呼び出します。
class YourCameraManager {
...
// Change to camera device
void ChangeCamera() {
PlanetKit::CameraControllerPtr pCameraController =
PlanetKit::PlanetKitManager()::GetInstance()->GetCameraController();
PlanetKit::CameraInfoArray aCameraInfos;
pCameraController->GetCapturerInfo(aCameraInfos);
pCameraController->ChangeCamera(aCameraInfos.GetAt(0));
}
// Deselect camera
void DeselectCamera() {
PlanetKit::CameraControllerPtr pCameraController =
PlanetKit::PlanetKitManager()::GetInstance()->GetCameraController();
pCameraController->ChangeCamera(nullptr);
}
};
関連API
カスタムビデオソース機能とこれに関連するAPIは、次のとおりです。