メディアプロセッサ(Windows)

Vonage Media Processor ライブラリにあらかじめ用意されているトランスフォーマを使用するか、または公開されているビデオに適用する独自のカスタムオーディオトランスフォーマを作成することができます。 を作成することもできます。

を使用することができます。 Publisher.AudioTransformers そして Publisher.VideoTransformers プロパティを使用して、ストリームにオーディオとビデオのトランスフォームを適用します。

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

システム要件

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のレポにある。