メディア・プロセッサー(アンドロイド)

Vonage Media Processorライブラリにあるプリビルドトランスフォーマーを使用するか、独自のカスタムオーディオトランスフォーマーまたはビデオトランスフォーマーを作成して、公開ビデオに適用できます。

を使用することができます。 PublisherKit.setAudioTransformers() そして PublisherKit.setVideoTransformers() メソッドを使用して、ストリームにオーディオとビデオのトランスフォーマーを適用します。

重要だ: メディア変換は、すべてのデバイスでサポートされているわけではありません。見る 顧客要求. Vonage Media Libraryの背景ぼかしフィルタはベータ機能として利用可能です。

Vonage Video Android SDKには、トランスフォーマーを実装する2つの方法があります:

お客様のご要望

Vonage Media Libraryのトランスフォーマーは、以下のデバイスのAndroid API Level 24以上でサポートされています:

  • サムスン・ギャラクシーS8以上
  • Google Pixel 5以上
  • OPPO A94以上
  • クアルコムのSnapdragon 835以上のAndroid携帯電話
  • Qualcomm Snapdragon 765G以上を使用するAndroid携帯電話

他のデバイスでテストし、サポートを確認する。

トランスフォーマーには十分なプロセッサーのサポートが必要です。サポートされているデバイスであっても、バックグラウンドプロセスによって利用可能な処理リソースが制限される場合、トランスフォーマーが安定しないことがあります。Vonage Media Libraryからのトランスフォーマーだけでなく、カスタムメディアトランスフォーマーにも同様の制限が適用される場合があります。

iOSは、(バッテリーの寿命を延ばすなど)エネルギーを節約するために、CPUのパフォーマンスを絞ることがあります。その結果、トランスフォーマーのパフォーマンスが最適化されず、不要なオーディオやビデオのアーチファクトが発生することがあります。このような場合は、低電力モードを無効にすることをお勧めします。

多くの動画変換(背景ぼかしなど)は、セグメンテーションを使用して、背景から話者を分離します。最良の結果を得るには、適切な照明と無地の背景を使用してください。照明が不十分であったり、背景が複雑であったりすると、映像にアーチファクトが発生することがあります(たとえば、話し手や話し手がかぶっている帽子が背景と一緒にぼやけてしまうことがあります)。

変換に関係なく、できるだけ多くのサポート対象デバイスでベンチマークテストを実施する必要があります。

Vonage Media Libraryの統合

Vonage Media LibraryをSDKに統合するとサイズが大きくなるため、OpenTok SDK v2.27.2から、メディアトランスフォーマはオプトインのVonage Media Library経由で利用できるようになりました。このライブラリは明示的にプロジェクトに追加する必要があります。

Vonage Media Libraryは当初OpenTok SDKに組み込まれていました。OpenTok SDKのバージョンが2.27.2より古い場合は、直接次のページに移動してください。 Vonageメディアライブラリからビデオトランスを適用する そして Vonageメディアライブラリからオーディオトランスを適用する.

Mavenのバージョンは https://central.sonatype.com/artifact/com.vonage/client-sdk-video-transformers. アーティファクトIDは "client-sdk-video-transformers".

アプリのbuild.gradleファイルを修正し、以下のコード・スニペットを dependencies セクションを参照されたい:

implementation 'com.vonage:client-sdk-video-transformers:2.33.0'

もし PublisherKit.VideoTransformer(String name, String properties) または PublisherKit.AudioTransformer(String name, String properties) がライブラリをロードせずに作成された場合、返されるトランスフォーマーは NULL になります。次のエラーコードで例外が発生します。 0x0A000006 - OTC_MEDIA_TRANSFORMER_OPENTOK_TRANSFORMERS_LIBRARY_NOT_LOADED.

Vonageメディアライブラリからビデオトランスを適用する

注: Vonage Media Libraryトランスフォーマーのサポートはベータ機能です。

を使用する。 PublisherKit.VideoTransformer(String name, String properties) コンストラクタを使用して、Vonage Media Library の名前付きトランスフォーマを使用する動画トランスフォーマを作成します。

現在のところ、1つのトランスフォーマーのみがサポートされています:背景ぼかし。背景をぼかすには name パラメータを "BackgroundBlur". を設定する。 properties パラメータに、トランスフォーマのプロパティを定義する JSON 文字列を渡します。 背景ぼかしトランスフォーマの場合、このJSONには1つのプロパティが含まれます。 radius -- に設定できる。 に設定できる。 "High", "Low"あるいは "None".

ArrayList<PublisherKit.VideoTransformer> videoTransformers = new ArrayList<>();
PublisherKit.VideoTransformer backgroundBlur = new PublisherKit.VideoTransformer(
    "BackgroundBlur",
    "{\"radius\":\"High\"}"
);
videoTransformers.add(backgroundBlur);
mPublisher.setVideoTransformers(videoTransformers);

Vonageメディアライブラリからオーディオトランスを適用する

を使用する。 PublisherKit.AudioTransformer(String name, String properties) コンストラクタを使用して、Vonage Media Library の名前付きトランスフォーマを使用するオーディオトランスフォーマを作成します。

変圧器は1台対応:

  • ノイズ抑制。 このフィルターでは name パラメータを "NoiseSuppression".を設定する。 properties パラメータに、トランスフォーマーのプロパティを定義する JSON 文字列を渡します。ノイズ抑制トランスフォーマの場合、このJSONには今のところプロパティは含まれていません。空のJSON文字列に設定します。 "{}".

    Publisher publisher = new Publisher.Builder(MainActivity.this).build();
    ArrayList<PublisherKit.AudioTransformer> audioTransformers = new ArrayList<>();
    PublisherKit.AudioTransformer noiseSuppression = publisher.new AudioTransformer(
        "NoiseSuppression",
        ""
    );
    audioTransformers.add(noiseSuppression);
    publisher.setAudioTransformers(audioTransformers);
    

カスタムビデオトランスフォーマーの作成

を実装したクラスを作成する。 PublisherKit.CustomVideoTransformer インターフェースを実装する。を実装する。 PublisherKit.CustomVideoTransformer.onTransform​(BaseVideoRenderer.Frame frame) メソッドを使用する。その PublisherKit.CustomVideoTransformer.onTransform​(BaseVideoRenderer.Frame frame) メソッドはビデオフレームごとに起動される。 メソッドの実装では、変換を frame オブジェクトが渡される:

public class MyCustomTransformer implements PublisherKit.CustomVideoTransformer {
    @Override
    public void onTransform(BaseVideoRenderer.Frame frame) {
        // Replace this with code to transform the frame:
        frame.convertInPlace(frame.getYplane(), frame.getVplane(), frame.getUplane(), frame.getYstride(), frame.getUvStride());
    }
}

次に、PublisherKit.CustomVideoTransformer インターフェースを実装するオブジェクトを PublisherKit.setVideoTransformers() メソッドを使用する:

MyCustomTransformer transformer = new MyCustomTransformer();
ArrayList<PublisherKit.VideoTransformer> videoTransformers = new ArrayList<>();
videoTransformers.add(transformer);
mPublisher.setVideoTransformers(videoTransformers);

Vonage Media ライブラリ トランスフォーマ(前のセクションを参照)をカスタム トランスフォーマと組み合わせたり、複数のカスタム トランスフォーマを適用したりできます。 に渡される ArrayList に複数の PublisherKit.VideoTransformer オブジェクトを追加することで、複数のカスタム トランスフォーマを適用できます。 に渡すことで、複数のカスタム トランスフォーマを適用できます。 PublisherKit.setVideoTransformers() メソッドを使用する。

に使用する配列に複数のOTPublisherKit.VideoTransformerオブジェクトを追加する。 オブジェクトを OTPublisherKit.videoTransformers 財産である。

カスタムオーディオトランスの作成

を実装したクラスを作成する。 PublisherKit.CustomAudioTransformer インターフェースを実装する。を実装する。 PublisherKit.CustomAudioTransformer.onTransform​(AudioData audioData) メソッドを使用する。 その PublisherKit.CustomAudioTransformer.onTransform​(AudioData audioData) メソッドは各オーディオフレームに対してトリガーされる。 メソッドの実装では、変換を frame オブジェクトが渡されます。 次の例では、オーディオにシンプルな振幅リミッターを適用しています:

public class MyCustomAudioTransformer implements PublisherKit.CustomAudioTransformer {
    private short CROP_LIMIT = (short)(32767 * 0.05);
    @Override
    public void onTransform(AudioData audioData) {
        int samplesPerChannel = (int)audioData.getNumberOfSamples() * (int)audioData.getNumberOfChannels();
        ShortBuffer samples = audioData.getSampleBuffer().asShortBuffer();
        for (int s = 0; s < samplesPerChannel; ++s) {
            short sample = samples.get(s);
            if (sample > CROP_LIMIT)
                samples.put(s, CROP_LIMIT);
            else if (sample < -CROP_LIMIT)
                samples.put(s, (short)-CROP_LIMIT);
        }
    }
}

次に、PublisherKit.CustomAudioRransformerインターフェイスを実装したオブジェクトを PublisherKit.setAudioTransformers() メソッドを使用する:

MyCustomAudioTransformer transformer = new MyCustomAudioTransformer();
ArrayList<PublisherKit.VideoTransformer> audioTransformers = new ArrayList<>();
audioTransformers.add(transformer);
mPublisher.setAudioTransformers(audioTransformers);

に渡されたArrayListに複数のPublisherKit.AudioTransformerオブジェクトを追加することで、複数のカスタムトランスフォーマーを適用できます。 に複数のPublisherKit.AudioTransformerオブジェクトを追加することで適用できます。 PublisherKit.setAudioTransformers() メソッドを使用する。

パブリッシャーのためのビデオトランスのクリア

パブリッシャーの動画トランスフォームを消去するには、空の ArrayList を に空の ArrayList を渡してください。 PublisherKit.setVideoTransformers() メソッドを使用する。

videoTransformers.clear();
mPublisher.setVideoTransformers(videoTransformers);

某出版社のオーディオ・トランスの片付け

パブリッシャーの音声トランスフォームを消去するには、空の ArrayList を を PublisherKit.setAudioTransformers() メソッドを使用する。

audioTransformers.clear();
mPublisher.setAudioTransformers(videoTransformers);

サンプルアプリ

参照 このJavaベースのサンプル そして このKotlinベースのサンプル.