メディアプロセッサ(Windows)
Vonage Media Processor ライブラリにあらかじめ用意されているトランスフォーマを使用するか、または公開されているビデオに適用する独自のカスタムオーディオトランスフォーマを作成することができます。 を作成することもできます。
を使用することができます。 Publisher.AudioTransformers そして Publisher.VideoTransformers
プロパティを使用して、ストリームにオーディオとビデオのトランスフォームを適用します。
Vonage Video Windows SDKには、トランスフォーマーを実装する2つの方法があります:
中程度 - ビデオの場合は、以下のビデオトランスフォーマーに含まれる背景ぼかしと背景置換を適用できます。 ボネージ・メディア・ライブラリー.参照 Vonageメディアライブラリからビデオトランスを適用する.オーディオの場合は、オーディオ・トランスに含まれるノイズ・サプレッション・オーディオ・トランスを適用することができます。 ボネージ・メディア・ライブラリー.参照 Vonageメディアライブラリからオーディオトランスを適用する.
上級 - 自分で作ることができる カスタム・ビデオ・トランス そして カスタムオーディオトランス.
システム要件
NVIDIA GPUは、Vonage Media Libraryトランスフォーマーを使用する際に最適なパフォーマンスを発揮します。
他のコンフィギュレーションでテストし、サポートを確認する。
トランスフォーマーには十分なプロセッサーのサポートが必要です。サポートされているデバイスであっても、バックグラウンドプロセスによって利用可能な処理リソースが制限される場合、トランスフォーマーが安定しないことがあります。Vonage Media Libraryからのトランスフォーマーだけでなく、カスタムメディアトランスフォーマーにも同様の制限が適用される場合があります。
Windows は、(バッテリーの寿命を延ばすなど)エネルギーを節約するために、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メディアライブラリからオーディオトランスを適用する.
nugetパッケージは "Vonage.Client.Video.Transformers".プロジェクトにインストールしてください。
もし VideoTransformer(string name, string properties) または AudioTransformer(string name, string properties) がライブラリをロードせずに作成された場合、返されるトランスフォーマーは NULL になります。次のエラーコードで例外が発生します。 0x0A000006 - OTC_MEDIA_TRANSFORMER_OPENTOK_TRANSFORMERS_LIBRARY_NOT_LOADED.
Vonageメディアライブラリからビデオトランスを適用する
を使用する。 VideoTransformer(string name, string properties)
メソッドを使用して、Vonage Media Library の名前付きトランスフォームを使用するビデオトランスフォームを作成します。
変圧器は2台対応:
背景をぼかす。 このフィルターでは
nameパラメータを"BackgroundBlur". を設定する。propertiesパラメータをJSON文字列に変換する。JSONのフォーマットは"{"radius": "None"}"である。 パラメータradiusプロパティは "None"、"High"、"Low "である。 もしradiusプロパティを "Custom "にしてcustom_radiusプロパティを JSON 文字列に追加する:"{"radius": "カスタム", "custom_radius": "値"}"(ここでcustom_radiusは正の整数 ぼかし半径を定義する正の整数)。VideoTransformer backgroundBlur = new VideoTransformer("BackgroundBlur", "{\"radius\":\"High\"}"); List<VideoTransformer> transformers = new ArrayList<VideoTransformer> { backgroundBlur }; publisher.VideoTransformers = transformers;バックグランドの交換 このフィルターでは
nameパラメータを"BackgroundReplacement". を設定する。propertiesパラメータをJSON文字列に変換する。JSONのフォーマットは"{"image_file_path": "path/to/image"}"である。image_file_pathは、仮想背景として使用するローカル画像の絶対ファイルパスです。サポートされている画像形式はPNGとJPEGです。VideoTransformer backgroundReplacement = new VideoTransformer("BackgroundReplacement", "{\"image_file_path\":\"path-to-image\"}"); List<VideoTransformer> transformers = new ArrayList<VideoTransformer> { backgroundReplacement }; publisher.VideoTransformers = transformers;
Vonageメディアライブラリからオーディオトランスを適用する
を使用する。 AudioTransformer(string name, string properties)
メソッドを使用して、Vonage Media Library の名前付きトランスフォーマーを使用するオーディオトランスフォーマーを作成します。
変圧器は1台対応:
ノイズ抑制。 このフィルターでは
nameパラメータを"NoiseSuppression".を設定する。propertiesパラメータに、トランスフォーマーのプロパティを定義する JSON 文字列を渡します。ノイズ抑制トランスフォーマの場合、この JSON には今のところプロパティは含まれていません。空の文字列に設定します。"".AudioTransformer noiseSuppression = new AudioTransformer("NoiseSuppression", ""); List<AudioTransformer> transformers = new ArrayList<AudioTransformer> { noiseSuppression }; publisher.AudioTransformers = transformers;
カスタムビデオトランスフォーマーの作成
を実装したクラスを作成する。ICustomVideoTransformer
インターフェースを実装する。を実装する。 ICustomVideoTransformer.Transform() メソッドに変換を加える。 VideoFrame オブジェクトが渡される。
メソッドに渡された ICustomVideoTransformer.Transform メソッドはビデオフレームごとにトリガーされる:
public class MyCustomTransformer : IVideoTransformer
{
public void Transform(VideoFrame frame)
{
// transformer implementation
PixelFormat pixelFormat = frame.PixelFormat;
int numberOfPlanes = frame.NumberOfPlanes;
//invert U and V planes
IntPtr[] planes = new IntPtr[] { frame.GetPlane(0), frame.GetPlane(2), frame.GetPlane(1) };
int[] strides = new int[] { frame.GetPlaneStride(0), frame.GetPlaneStride(2), frame.GetPlaneStride(1) };
frame.ConvertInPlace(pixelFormat, planes, strides);
}
}
次に PublisherKit.VideoTransformers を実装するオブジェクトを含む配列に変換します。
を実装するオブジェクトを含む配列:
MyCustomTransformer myCustomTransformer = new();
List<VideoTransformer> transformers = new ArrayList<VideoTransformer>
{
myCustomTransformer
};
publisher.VideoTransformers = transformers;
Vonage Media ライブラリ トランスフォーマー(前のセクションを参照)とカスタム トランスフォーマーを組み合わせたり、複数のカスタム トランスフォーマーを適用したりできます。
に使用する ArrayList に複数の VideoTransformer オブジェクトを追加することで、複数のカスタム トランスフォーマを適用できます。
オブジェクトを PublisherKit.VideoTransformers 財産である。
カスタムオーディオトランスの作成
を実装したクラスを作成する。 ICustomAudioTransformer
インターフェースを実装する。を実装する。 ICustomAudioTransformer.Transform() に変換を加える
を AudioData オブジェクトが渡される。メソッドに渡された CustomAudioTransformer.Transform() メソッド
はオーディオフレームごとにトリガーされます。次の例では、単純な振幅リミッターをオーディオに適用しています。
を適用します:
public class MyCustomTransformer : IAudioTransformer
{
private const short CROP_LIMIT = (short)(short.MaxValue * 0.5);
public unsafe void Transform(AudioData frame)
{
// transformer implementation
short* data = (short*)frame.SampleBuffer;
int samplesXChannels = (int)frame.NumberOfSamples * (int)frame.NumberOfChannels;
for (int s = 0; s < samplesXChannels; ++s)
{
if (data[s] > CROP_LIMIT)
data[s] = CROP_LIMIT;
else if (data[s] < -CROP_LIMIT)
data[s] = -CROP_LIMIT;
}
}
}
次に OTPublisherKit.AudioTransformers を実装するオブジェクトを含む配列に変換します。
を実装するオブジェクトを含む配列に変換します:
MyCustomTransformer myCustomTransformer = new();
List<VideoTransformer> transformers = new ArrayList<VideoTransformer>
{
myCustomTransformer
};
publisher.AudioTransformers = transformers;
に使用するArrayListに複数のOTPublisherKit.AudioTransformerオブジェクトを追加することで、複数のカスタムトランスを適用できます。
オブジェクトを OTPublisherKit.AudioTransformers 財産である。
パブリッシャーのためのビデオトランスのクリア
パブリッシャーのビデオトランスをクリアするには Publisher.VideoTransformers プロパティを空の配列に置き換える。
publisher.VideoTransformers = new ArrayList<VideoTransformer> {};
某出版社のオーディオ・トランスの片付け
パブリッシャーのオーディオトランスをクリアするには Publisher.AudioTransformers プロパティを空の配列に置き換える。
publisher.AudioTransformers = new ArrayList<AudioTransformer> {};
サンプルアプリ
参照 このサンプル にて。 vonage-video-windows-sdk-samples GitHubのレポにある。