Vonage Media Processor ライブラリの使用とメディア変換の適用
Vonage Media Processorライブラリにあるプリビルドトランスフォーマーを使用するか、独自のカスタムオーディオトランスフォーマーまたはビデオトランスフォーマーを作成して、公開ビデオに適用できます。
を使用することができます。 PublisherKit.setAudioTransformers() そして PublisherKit.setVideoTransformers() ストリームにオーディオおよびビデオトランスフォーマーを適用する方法。
重要だ:
メディア変換は、すべてのデバイスでサポートされているわけではありません。詳しくは お客様のご要望.
Vonage Video Android SDKには、トランスフォーマーを実装する2つの方法があります:
-
中程度 - ビデオの場合は、以下のビデオトランスフォーマーに含まれる背景ぼかしと背景置換を適用できます。 ボネージ・メディア・ライブラリー.参照 Vonageメディアライブラリからビデオトランスを適用する.オーディオの場合は、オーディオ・トランスに含まれるノイズ・サプレッション・オーディオ・トランスを適用することができます。 ボネージ・メディア・ライブラリー.参照 Vonageメディアライブラリからオーディオトランスを適用する.
-
上級 - 自分で作ることができる カスタム・ビデオ・トランス そして カスタムオーディオトランス.
お客様のご要望
Vonage Media Library のトランスフォーマーは、Android API レベル 23 以降を搭載した以下のデバイスでサポートされています。
- サムスン・ギャラクシーS8以上
- Google Pixel 5以上
- OPPO A94以上
- クアルコムのSnapdragon 835以上のAndroid携帯電話
- Qualcomm Snapdragon 765G以上を使用するAndroid携帯電話
他のデバイスでテストし、サポートを確認する。
トランスフォーマーには十分なプロセッサーのサポートが必要です。サポートされているデバイスであっても、バックグラウンドプロセスによって利用可能な処理リソースが制限される場合、トランスフォーマーが安定しないことがあります。Vonage Media Libraryからのトランスフォーマーだけでなく、カスタムメディアトランスフォーマーにも同様の制限が適用される場合があります。
Androidでは、省電力(例えば、バッテリー駆動時間の延長)のために、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.35.1'
ライブラリを読み込まずに PublisherKit.VideoTransformer(String name, String properties) または PublisherKit.AudioTransformer(String name, String properties) を呼び出した場合、返されるトランスフォーマーは null になります。以下のエラーコードを伴う例外が発生します。 0x0A000006 - OTC_MEDIA_TRANSFORMER_OPENTOK_TRANSFORMERS_LIBRARY_NOT_LOADED.
Vonageメディアライブラリからビデオトランスを適用する
を使用する。 PublisherKit.VideoTransformer(String name, String properties) コンストラクタを使用して、Vonage Media Library の名前付きトランスフォーマを使用する動画トランスフォーマを作成します。
変圧器は2台対応:
-
背景をぼかす。 このフィルターでは
nameパラメータを"BackgroundBlur".を設定する。propertiesトランスフォーマーのプロパティを定義するJSON文字列へのパラメータ。背景ぼかしトランスフォーマーの場合、このJSONには1つのプロパティが含まれます――radius-- に設定できる。 に設定できる。"High","Low","None"あるいは"Custom. もしradiusプロパティを "Custom "にしてcustom_radiusJSON文字列にプロパティを追加します:"{\"radius\":\"Custom\",\"custom_radius\":\"value\"}"(ここでcustom_radius(ぼかし半径を定義する正の整数です)。コピーPublisher publisher = new Publisher.Builder(MainActivity.this).build(); ArrayList<PublisherKit.VideoTransformer> videoTransformers = new ArrayList<>(); PublisherKit.VideoTransformer backgroundBlur = publisher.new VideoTransformer( "BackgroundBlur", "{\"radius\":\"High\"}" ); videoTransformers.add(backgroundBlur); publisher.setVideoTransformers(videoTransformers); -
バックグランドの交換 このフィルターでは
nameパラメータを"BackgroundReplacement". そして、propertiesパラメータをJSON文字列に変換します。JSONの形式は次のとおりです。"{\"image_file_path\":\"path/to/image\"}"ここでimage_file_pathは、仮想背景として使用するローカル画像の絶対ファイルパスです。サポートされている画像形式はPNGとJPEGです。コピーPublisher publisher = new Publisher.Builder(MainActivity.this).build(); ArrayList<PublisherKit.VideoTransformer> videoTransformers = new ArrayList<>(); PublisherKit.VideoTransformer backgroundReplacement = publisher.new VideoTransformer( "BackgroundReplacement", "{\"image_file_path\":\"path-to-image-file\"}" ); videoTransformers.add(backgroundReplacement); publisher.setVideoTransformers(videoTransformers);
Vonageメディアライブラリからオーディオトランスを適用する
を使用する。 PublisherKit.AudioTransformer(String name, String properties) コンストラクタを使用して、Vonage Media Library の名前付きトランスフォーマを使用するオーディオトランスフォーマを作成します。
変圧器は1台対応:
-
ノイズ抑制。 このフィルターでは
nameパラメータを"NoiseSuppression".を設定する。propertiesパラメータに、トランスフォーマーのプロパティを定義する 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() メソッドを使用する:
Publisher publisher = new Publisher.Builder(MainActivity.this).build();
MyCustomTransformer transformer = new MyCustomTransformer();
PublisherKit.VideoTransformer myCustomTransformer = publisher.new VideoTransformer("myTransformer", transformer);
ArrayList<PublisherKit.VideoTransformer> videoTransformers = new ArrayList<>();
videoTransformers.add(myCustomTransformer);
publisher.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.CustomAudioTransformer インターフェースを実装するオブジェクトを PublisherKit.setAudioTransformers() メソッドを使用する:
Publisher publisher = new Publisher.Builder(MainActivity.this).build();
MyCustomAudioTransformer transformer = new MyCustomAudioTransformer();
PublisherKit.AudioTransformer myCustomTransformer = publisher.new AudioTransformer("myTransformer", transformer);
ArrayList<PublisherKit.VideoTransformer> audioTransformers = new ArrayList<>();
audioTransformers.add(myCustomTransformer);
publisher.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ベースのサンプル GitHub上の「opentok-android-sdk-samples」リポジトリで。