メディアプロセッサー(iOS)

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

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

重要だ: メディア変換はすべてのデバイスでサポートされているわけではありません。見る 顧客要求.

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

お客様のご要望

Vonage Media Libraryの変圧器は、Apple A11 Bionicチップセット以上、以下のデバイスとオペレーティングシステムの組み合わせでサポートされています:

装置 対応OS
iPhone 11以上 iOS 13以上
iPad Air 4以上 iPadOS 14.1以上
iPad mini第5世代以上 iPadOS 14以上
iPad Pro 第5世代以上 iPadOS 14.5以上
iPhone SE 第2世代以上 iOS 13.4以上

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

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

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

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

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

Vonage Media Libraryの統合

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

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

Vonageメディアライブラリは、SwiftパッケージマネージャまたはCocoaPodsのいずれかを使用して統合することができます:

スイフト・パッケージ・マネージャー

VonageClientSDK Video Transformers を追加するには、次のようにします。 Vonage Client SDK ビデオトランスフォーマー リポジトリを Swift パッケージの依存関係として使用します。

パッケージの依存関係を Xcode プロジェクトに追加するには ファイル > スイフト・パッケージ > 依存パッケージの追加 をクリックし、リポジトリのURLを入力する。

ココアポッド

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

ℹ️ もし [OTVideoTransformer initWithName:properties:] または [OTAudioTransformer initWithName:properties:] がライブラリをロードせずに作成された場合、返されるトランスフォーマーは NULL になります。次のエラーコードで例外が発生します。 0x0A000006 - OTC_MEDIA_TRANSFORMER_OPENTOK_TRANSFORMERS_LIBRARY_NOT_LOADED.

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

を使用する。 [OTVideoTransformer initWithName: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 は正の整数 ぼかし半径を定義する正の整数)。

    NSMutableArray * myVideoTransformers = [[NSMutableArray alloc] init];
    OTVideoTransformer *backgroundBlur = [[OTVideoTransformer alloc] initWithName:@"BackgroundBlur"
                                                                       properties:@"{\"radius\":\"High\"}"];
    [myVideoTransformers addObject:backgroundBlur];
    _publisher.videoTransformers = [[NSArray alloc] initWithArray:myVideoTransformers];
    
  • バックグランドの交換 このフィルターでは name パラメータを "BackgroundReplacement". を設定する。 properties パラメータをJSON文字列に変換する。JSONのフォーマットは"{"image_file_path": "path/to/image"}"である。 image_file_path は、仮想背景として使用するローカル画像の絶対ファイルパスです。サポートされている画像形式はPNGとJPEGです。

    NSMutableArray * myVideoTransformers = [[NSMutableArray alloc] init];
    OTVideoTransformer *backgroundReplacement = [[OTVideoTransformer alloc] initWithName:@"BackgroundReplacement"
                                                                       properties:@"{\"image_file_path\":\"path-to-image\"}];
    [myVideoTransformers addObject:backgroundReplacement];
    _publisher.videoTransformers = [[NSArray alloc] initWithArray:myVideoTransformers];
    

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

を使用する。 OTAudioTransformer initWithName:properties: メソッドを使用して、Vonage Media Library の名前付きトランスフォームを使用するビデオトランスフォームを作成します。

変圧器は1台対応:

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

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

を実装したクラスを作成する。 OTCustomVideoTransformer プロトコルを実装します。OTCustomVideoTransformer transform:]` メソッドを実装し、このメソッドに渡された `OTVideoFrame` オブジェクトに変換を適用します。OTCustomVideoTransformer transform:]` メソッドはビデオフレームごとに起動されます:

@interface CustomTransformer : NSObject <OTCustomVideoTransformer>

@end


@implementation CustomTransformer
- (void)transform:(nonnull OTVideoFrame *)videoFrame {
    OTPixelFormat pixelFormat = videoFrame.format.pixelFormat;
    int strides[] =
    {
        [videoFrame getPlaneStride:0],
        [videoFrame getPlaneStride:2],
        [videoFrame getPlaneStride:1]
    };
    uint8_t* planes[] =
    {
        [videoFrame getPlaneBinaryData:0],
        [videoFrame getPlaneBinaryData:2],
        [videoFrame getPlaneBinaryData:1]
    };
    [videoFrame convertInPlace:pixelFormat planes:planes strides:strides];
}
@end

次に OTPublisherKit.videoTransformers を実装するオブジェクトを含む配列に変換します。 を実装するオブジェクトを含む配列:

CustomTransformer* myCustomTransformer;
myCustomTransformer = [CustomTransformer alloc];
OTVideoTransformer *invertColors = [[OTVideoTransformer alloc] initWithName:@"invertColors" transformer:border];

NSMutableArray * myVideoTransformers = [[NSMutableArray alloc] init];

[myVideoTransformers addObject:invertColors];

_publisher.videoTransformers = [[NSArray alloc] initWithArray:myVideoTransformers];

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

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

を実装したクラスを作成する。 OTCustomAudioTransformer プロトコルを実装する。 [OTCustomAudioTransformer transform:] に変換を加える を OTAudioData オブジェクトが渡される。メソッドに渡された [OTCustomAudioTransformer transform:] メソッド はオーディオフレームごとにトリガーされます。次の例では、単純な振幅リミッターをオーディオに適用しています。 を適用します:

@interface CustomAudioTransformer : NSObject <OTCustomAudioTransformer>

@end

@implementation CustomAudioTransformer

- (void)transform:(nonnull OTAudioData *)audioData {
    int CROP_LIMIT = 32767 * 0.05;

    int samplesPerChannel = (int)audioData.numberOfSamples * (int)audioData.numberOfChannels;
    int16_t* buffer = audioData.sampleBuffer;

    for (int s = 0; s < samplesPerChannel; ++s) {
        int sample = buffer[s];
        NSLog(@"CustomAudioTransformer. Samples %d", sample);
        if (sample > CROP_LIMIT)
            buffer[s] = CROP_LIMIT;
        else if (sample < -CROP_LIMIT)
            buffer[s] = -CROP_LIMIT;
    }
}

@end

次に OTPublisherKit.audioTransformers を実装するオブジェクトを含む配列に変換します。 を実装するオブジェクトを含む配列に変換します:

CustomAudioTransformer* customAudioTransformer;
ArrayList<PublisherKit.AudioTransformer> audioTransformers = new ArrayList<>();
customAudioTransformer = [CustomAudioTransformer alloc];
OTAudioTransformer *audiotrans = [[OTAudioTransformer alloc] initWithName:@"audio"
                                                              transformer:customAudioTransformer];

NSMutableArray * myAudioTransformers = [[NSMutableArray alloc] init];
[myAudioTransformers addObject:audiotrans];
_publisher.audioTransformers = [[NSArray alloc] initWithArray:myAudioTransformers];

に使用するArrayListに複数のOTPublisherKit.AudioTransformerオブジェクトを追加することで、複数のカスタムトランスを適用できます。 オブジェクトを OTPublisherKit.audioTransformers 財産である。

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

パブリッシャーのビデオトランスをクリアするには OTPublisherKit.videoTransformers プロパティを空の配列に置き換える。

_publisher.videoTransformers = [[NSArray alloc] init];

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

パブリッシャーのオーディオトランスをクリアするには OTPublisherKit.audioTransformers プロパティを空の配列に置き換える。

_publisher.audioTransformers = [[NSArray alloc] init];

サンプルアプリ

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