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

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

を使用することができます。 otc_publisher_set_video_transformers() そして otc_publisher_set_audio_transformers() 関数を使用して、公開されているストリームにオーディオとビデオのトランスフォーマーを適用することができます。

重要だ: 現在のところ、アップルのシリコンMacのみサポートされています。参照 システム要件 をご覧ください。

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

また、独自のカスタム・オーディオ・トランスやカスタム・ビデオ・トランスを作成することもできます。

システム要件

現在、Vonage Media LibraryトランスフォーマーはAppleシリコンMacでのみサポートされています。

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

macOSは、(ノートパソコンのバッテリーを長持ちさせるなど)エネルギーを節約するために、CPUの性能を絞ることがあります。その結果、トランスフォーマーのパフォーマンスが最適化されず、不要なオーディオやビデオのアーチファクトが発生することがあります。システムを 違う このような場合は、低消費電力モードを使用する。

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

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

Vonage Media Libraryの統合

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

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

Vonageメディアライブラリは、Pod "VonageClientSDKVideoMacOSTransformers" として利用可能です。 で使用できます。 ココアポッズ.

もし otc_video_transformer_create() または otc_audio_transformer_create() がライブラリをロードせずに実行された場合、返される変換子はNULLになる。errnoを使用する必要があります。errnoは、エラー発生時にシステム・コールによって設定されるグローバル変数で、何が間違っていたかを示します。これは <cerrno> ヘッダーのエラーコードが表示されます。ライブラリーが見つからない場合のエラーコードは 0x0A000006.

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

現在、Vonage Media Libraryのトランスフォーマーは、背景ぼかしのみサポートされています。このトランスフォーマーには

を使用する。 otc_video_transformer_create() 関数を使用して、Vonage Media Library の名前付きトランスフォーマーを使用するビデオトランスフォーマーを作成します。

変圧器は2台対応:

  • 背景をぼかす。

    • を設定する。 type パラメータを OTC_MEDIA_TRANSFORMER_TYPE_VONAGE (SDKで定義されています)。 これは、Vonage Media Library のトランスフォーマーを使用していることを示します。
    • を設定する。 name パラメータを "BackgroundBlur".
    • を設定する。 properties パラメータに、トランスフォーマのプロパティを定義する JSON 文字列を渡します。 背景ぼかしトランスフォーマの場合、JSONの形式は「{"radius": "None"}」です。 パラメータ radius プロパティは、"None"、"High"、"Low"、および "Custom "です。 もし radius プロパティを "Custom "にして custom_radius プロパティを JSON 文字列に追加する:"{"radius": "カスタム", "custom_radius": "値"}"(ここで custom_radius は正の整数 ぼかし半径を定義する正の整数)。
    • を設定する。 callback パラメータを NULL.(このパラメータはカスタムビデオトランスフォーマーに使用される)。
    • を設定する。 userData パラメータを NULL.(このパラメータはカスタムビデオトランスフォーマーに使用される)。
    otc_video_transformer *backgroundBlur = otc_video_transformer_create(
      OTC_MEDIA_TRANSFORMER_TYPE_VONAGE,
      "BackgroundBlur",
      "{\"radius\":\"High\"}",
      NULL,
      NULL
    );
    
  • バックグランドの交換

    • を設定する。 type パラメータを OTC_MEDIA_TRANSFORMER_TYPE_VONAGE (SDKで定義されています)。 これは、Vonage Media Library のトランスフォーマーを使用していることを示します。
    • を設定する。 name パラメータを "BackgroundReplacement".
    • を設定する。 properties パラメータに、トランスフォーマのプロパティを定義する JSON 文字列を指定します。 背景置換トランスフォーマの場合、JSON の形式は "{"image_file_path": "path/to/image"}" です、 ここで image_file_path は、仮想背景として使用するローカル画像の絶対ファイルパスです。 サポートされている画像形式はPNGとJPEGです。
    • を設定する。 callback パラメータを NULL.(このパラメータはカスタムビデオトランスフォーマーに使用される)。
    • を設定する。 userData パラメータを NULL.(このパラメータはカスタムビデオトランスフォーマーに使用される)。
    otc_video_transformer *backgroundReplacement = otc_video_transformer_create(
      OTC_MEDIA_TRANSFORMER_TYPE_VONAGE,
      "BackgroundReplacement",
      "{\"image_file_path\":\"path-to-image\"}",
      NULL,
      NULL
    );
    

トランスフォーマーを作成したら、それをパブリッシャーに適用するには otc_publisher_set_video_transformers() 関数である:

// Array of video transformers
otc_video_transformer *video_transformers[] = {
  background_blur
};

otc_publisher_set_video_transformers(publisher, video_transformers, 1);

の最後のパラメータは otc_publisher_set_video_transformers() のサイズである。 transformers の配列になります。 この例では、パブリッシャーに 1 つの動画トランスフォームを適用しています。複数のトランスフォーマーを適用するには オブジェクトに複数の otc_video_transformer オブジェクトを追加することで、複数のトランスフォーマーを適用できます。 transformers に渡される配列である。 otc_publisher_set_video_transformers().

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

を使用する。 otc_audio_transformer_create() 関数を使用して、Vonage Media Library の名前付きトランスフォーマーを使用するオーディオトランスフォーマーを作成します。

変圧器は1台対応:

  • ノイズ抑制。

    • を設定する。 type パラメータを OTC_MEDIA_TRANSFORMER_TYPE_VONAGE (SDKで定義されています)。 これは、Vonage Media Library のトランスフォーマーを使用していることを示します。
    • を設定する。 name パラメータを "NoiseSuppression".
    • を設定する。 properties パラメータに、トランスフォーマーのプロパティを定義する JSON 文字列を指定します。 ノイズ抑制トランスフォーマーの場合、現在のところプロパティはないので、JSONのフォーマットは""である。 JSONのフォーマットは""です。
    • を設定する。 callback パラメータを NULL.(このパラメーターはカスタムオーディオトランスフォーマーに使用されます)。
    • を設定する。 userData パラメータを NULL.(このパラメーターはカスタムオーディオトランスフォーマーに使用されます)。
    otc_audio_transformer *noise_suppression = otc_audio_transformer_create(
      OTC_MEDIA_TRANSFORMER_TYPE_VONAGE,
      "NoiseSuppression",
      "{}",
      NULL,
      NULL
    );
    

トランスフォーマーを作成したら、それをパブリッシャーに適用するには otc_publisher_set_audio_transformers() 関数である:

// Array of audio transformers
otc_audio_transformer *audio_transformers[] = {
  noise_suppression
};

otc_publisher_set_audio_transformers(publisher, audio_transformers, 1);

の最後のパラメータは otc_publisher_set_audio_transformers() のサイズである。 transformers の配列になります。 この例では、1つのオーディオトランスをパブリッシャーに適用しています。複数のトランスフォーマーを適用するには オブジェクトに複数の otc_audio_transformer オブジェクトを追加することで、複数のトランスフォーマーを適用することができます。 transformers に渡される配列である。 otc_publisher_set_audio_transformers().

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

を使用する。 otc_video_transformer_create() 関数を使用してビデオ・トランスフォームを作成する。

  • を設定する。 type パラメータを OTC_MEDIA_TRANSFORMER_TYPE_CUSTOM (SDKで定義)。 こ れは、 カ ス タ ムの ト ランス ポー タ を作成 し てい る こ と を示 し ます。
  • を設定する。 name パラメータに、トランスフォーマーの一意な名前を指定します。
  • を設定する。 properties パラメータ NULL.(このパラメータは を使用する場合に使用されます)。
  • を設定する。 callback パラメータをコールバック関数に渡す。この関数は のインスタンスです。 video_transform_callback 型で、SDK で定義されています。この関数には2つのパラメータがあります: user_data -- 次のパラメータを参照)。 frame -- 型のインスタンス のインスタンスである。 otc_video_frame (SDKで定義)がコールバック関数に渡されます。 に渡されます。コールバック関数内でビデオフレームデータを変換する。
  • を設定する。 userData パラメータ(オプション)には、コールバック関数に渡すユーザーデータを指定します。

基本的な例を挙げよう:

void on_transform_black_white(void* user_data, struct otc_video_frame* frame)
{
    // implement transformer on the otc_video_frame data
}

otc_video_transformer *black_white_border = otc_video_transformer_create(
  OTC_MEDIA_TRANSFORMER_TYPE_CUSTOM,
  "blacknwhite",
  NULL,
  on_transform_black_white,
  NULL
);

トランスフォーマーを作成したら、それをパブリッシャーに適用するには otc_publisher_set_video_transformers() 関数である:

// Array of video transformers
otc_video_transformer *video_transformers[] = {
  black_white_border
};

otc_publisher_set_video_transformers(publisher, video_transformers, 1);

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

を使用する。 otc_audio_transformer_create() 関数を使用してオーディオ・トランスを作成します。

  • を設定する。 type パラメータを OTC_MEDIA_TRANSFORMER_TYPE_CUSTOM (SDKで定義)。 これは、カスタムのトランスフォーマーを作成していることを示します。(このバージョンでは このバージョンでは、Vonage Media Libraryの定義済みオーディオトランスはサポートされていません)。
  • を設定する。 name パラメータに、トランスフォーマーの一意な名前を指定します。
  • を設定する。 properties パラメータ NULL.(このパラメータは を使用する場合に使用されます)。
  • を設定する。 callback パラメータをコールバック関数に渡す。この関数は のインスタンスです。 audio_transform_callback 型で、SDK で定義されています。この関数には2つのパラメータがあります: user_data -- 次のパラメータを参照)。 frame -- 型のインスタンス のインスタンスである。 otc_audio_data (SDKで定義)がコールバック関数に渡されます。 に渡されます。コールバック関数内でオーディオデータを変換します。
  • を設定する。 userData パラメータ(オプション)には、コールバック関数に渡すユーザーデータを指定します。

基本的な例を挙げよう:

void on_transform_audio(void* user_data, struct otc_video_frame* frame)
{
    // implement transformer on the otc_audio_data audio data
}

otc_audio_transformer *lowpass_filter = otc_video_transformer_create(
  OTC_MEDIA_TRANSFORMER_TYPE_CUSTOM,
  "lowpassFilter",
  NULL,
  on_transform_audio,
  NULL
);

トランスフォーマーを作成したら、それをパブリッシャーに適用するには otc_publisher_set_audio_transformers() 関数である:

// Array of audio transformers
otc_audio_transformer *audio_transformers[] = {
  lowpass_filter
};

otc_publisher_set_audio_transformers(publisher, audio_transformers, 1);

の最後のパラメータは otc_publisher_set_audio_transformers() のサイズである。 transformers の配列になります。 この例では、1つのオーディオトランスをパブリッシャーに適用しています。複数のトランスフォーマーを適用するには 複数の otc_audio_transformer オブジェクトを transformers に渡される配列である。 otc_publisher_set_audio_transformers().

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

パブリッシャーの動画トランスフォームをクリアするには、空の配列を otc_publisher_set_video_transformers() 関数である。

otc_audio_transformer empty_array[] = {};
otc_publisher_set_video_transformers(publisher, empty_array, 0);

を使用する。 otc_video_transformer_delete() 関数を使用して otc_audio_transformer インスタンスを削除します:

otc_video_transformer_delete(lowpass_filter);

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

パブリッシャーの音声トランスフォームをクリアするには、空の配列を otc_publisher_set_audio_transformers() 関数である。

otc_video_transformer empty_array[] = {};
otc_publisher_set_audio_transformers(publisher, empty_array, 0);

を使用する。 otc_audio_transformer_delete() 関数を使用して otc_audio_transformer インスタンスを削除します:

otc_audio_transformer_delete(black_white_border);

サンプルアプリ

参照 このサンプル にて。 opentok-macos-sdk-samples GitHubのレポにある。