カスタム動画のキャプチャ(Android)

概要

このチュートリアルでは、OpenTok Android アプリケーションのビデオキャプチャ機能を変更するために必要な手順を順を追って説明します。

プロジェクトの設定

このセクションのコードは、Basic-Video-Capturer-Camera-2-Javaプロジェクトの vonage-video-android-sdk-サンプル レポジトリにクローンする必要があります。まだの場合は、レポをローカル・ディレクトリにクローンする必要がある。コマンドラインで

git clone git@github.com:opentok/opentok-android-sdk-samples.git

を開く。 Basic-Video-Capturer-Camera-2-Java プロジェクトをAndroid Studioで実行する。

コードを詳しく見ていく

この例では、アプリはカスタムビデオキャプチャ機能を使用して、ビデオ画像をミラーリングしています。これは、カスタムビデオキャプチャ機能の設定に関する基本的な原理を説明するためのものです。

MirrorVideoCapturer を拡張したカスタムクラスです。 BaseVideoCapturer クラス(OpenTok Android SDK で定義されている)。この BaseVideoCapturer class を使用すると、OpenTok パブリッシャーで使用するカスタム動画キャプチャ機能を定義できます:

publisher = new Publisher.Builder(MainActivity.this)
    .capturer(new MirrorVideoCapturer(MainActivity.this))
    .build();

について getCaptureSettings() メソッドは、カスタムビデオキャプチャで使用される設定を提供します:

@Override
public synchronized CaptureSettings getCaptureSettings() {
    CaptureSettings captureSettings = new CaptureSettings();
    captureSettings.fps = desiredFps;
    captureSettings.width = (null != cameraFrame) ? cameraFrame.getWidth() : 0;
    captureSettings.height = (null != cameraFrame) ? cameraFrame.getHeight() : 0;
    captureSettings.format = BaseVideoCapturer.NV21;
    captureSettings.expectedDelay = 0;
    return captureSettings;
}

について BaseVideoCapturer.CaptureSetting クラス(以下を定義する) capturerSettings プロパティ)は、OpenTok Android SDK によって定義されています。このサンプルコードでは、ビデオキャプチャのフォーマットが、ピクセルフォーマットとして NV21 を使用し、特定のフレームレート、特定の縦サイズ、および特定の横サイズになるように設定されています。

について BaseVideoCapturer startCapture() このメソッドは、パブリッシャーがOpenTokセッションへストリームとして送信する動画のキャプチャを開始したときに呼び出されます。これは、 Session.publish(publisher) メソッドが呼び出される:

@Override
public synchronized int startCapture() {
    Log.d(TAG,"startCapture enter (cameraState: "+ cameraState +")");

    if (null != camera && CameraState.OPEN == cameraState) {
        return startCameraCapture();
    } else if (CameraState.SETUP == cameraState) {
        Log.d(TAG,"camera not yet ready, queuing the start until camera is opened");
        executeAfterCameraOpened = () -> startCameraCapture();
    } else {
        throw new Camera2Exception("Start Capture called before init successfully completed");
    }

    Log.d(TAG,"startCapture exit");

    return 0;
}

おめでとうございます!Android版「Custom Video Capturer」のチュートリアルを完了しました。
ここで作成したコードをさらに試したり調整したりすることもできますし、あるいは 次のステップ の下にある。

次のステップ

ここでの作業が終わったら、以下の役立つリソースを活用して、OpenTokアプリケーションの構築と機能強化を続けてください: