音声と映像の設定 — Android

以下の項目について、音声や映像の設定を変更できます。 公開された そして 購読済み ストリーム:

オーディオまたはビデオのみの公開

以下の関数を呼び出すことで、音声と映像のオン/オフを切り替えることができます。 setPublishAudio() そして setPublishVideo() Publisher オブジェクトのメソッド(ブール値を引数として渡す)。たとえば、次のコードはオーディオをオフにします:

mPublisher.setPublishAudio(false);

音声のみのセッションでの発表

を設定する。 音声のみ セッションで videoTrack() メソッドに渡す。 falseいつ 各パブリッシャー・オブジェクトをインスタンス化する を作成します。例えば、以下のコードは音声のみのセッションのパブリッシャーを作成します:

mPublisher = new Publisher.Builder(context)
  .name("Bob's video")
  .videoTrack(false)
  .build();

パブリッシャーが使用するカメラの選択

を呼び出すことで、ストリームの公開に使用するカメラを切り替えることができます。 cycleCamera() メソッドを呼び出します:

mPublisher.cycleCamera();

カスタムビデオキャプチャを使用している場合は BaseVideoCapturer.キャプチャスイッチ インターフェースの動作を定義する。 Publisher.cycleCamera() メソッドを使用する。

パブリッシャーの動画のローカル表示をミラーリングする

を設定することができます。 mirrorInLocalRender を呼び出して返されるCaptureSettingsオブジェクトのプロパティです。 getCaptureSettings() のメソッドを使用する。 capturer プロパティを設定します。これを true パブリッシャーのローカルでレンダリングされたビデオをミラーリングしたり、あるいは false を選択し、ミラーリングしないようにします。前面カメラを使用する場合は、ビデオをミラーリングすることをお勧めします。

を設定することもできます。 mirrorInLocalRender を作成する際のCaptureSettingsオブジェクトのプロパティ カスタムビデオキャプチャ.

この設定は、パブリッシャのクライアント アプリケーションでレンダリングされる動画にのみ影響します。サブスクライブしているクライアントの動画には影響しません。

パブリッシャーの内蔵キャプチャーは、前面カメラを使用する場合はローカルでレンダリングされたビデオがミラーリングされますが、背面カメラを使用する場合はミラーリングされません。

パブリッシャーのカメラが切り替わったことを検知する

パブリッシャーが使用するカメラが変更されると changedCamera(Publisher publisher, int newCameraId)) Publisher.CameraListenerオブジェクトのメソッドが呼び出されます。

@Override
public void changedCamera(publisher, newCameraId) {
    //The publisher's camera changed.
}

動画の解像度とフレームレートの設定

パブリッシャーのストリームの解像度とフレームレートを設定するには、 resolution() そして frameRate() Publisher.Builder オブジェクトのメソッドを パブリッシャー・オブジェクトをインスタンス化する:

mPublisher = new Publisher.Builder(context)
  .name("Bob's video")
  .resolution(CameraCaptureResolution.HIGH)
  .frameRate(CameraCaptureFrameRate.FPS_30)
  .build();

なお、OpenTok Media Router を使用するセッション( メディアモード ルーティングに設定されている場合)、フレームレートを下げると、ストリームが使用する帯域幅が比例して減少する。ただし、メディアモードが中継に設定されているセッショ ンでは、フレームレートを下げてもストリームの帯域幅は減少しない。

注: 参照 1080pデベロッパーガイド 1080p解像度を使用する際の注意事項については、こちらをご覧ください。

カメラのトーチ(懐中電灯)を有効にする

に電話する。 Publisher.setCameraTorch() メソッドを使用して、ビデオ撮影中にカメラのフラッシュライト(トーチ)を有効または無効にします:

Publisher publisher = new Publisher.Builder(MainActivity.this).build();
  // ...
  publisher.setCameraTorch(true);

デフォルト値は false (懐中電灯は使わない)。

すべてのデバイスのカメラにカメラのフラッシュライトがあるわけではないことに注意してください。アクティブなカメラがカメラのフラッシュライト機能をサポートしていない場合(例えば、フロントカメラは通常サポートしていません)、このメソッドを呼び出しても効果はありません。

カメラのズーム設定

に電話する。 Publisher.setCameraZoomFactor() メソッドを使ってカメラのズーム比(倍率)を設定します:

Publisher publisher = new Publisher.Builder(MainActivity.this).build();
  // ...
  publisher.setCameraZoomFactor(0.7);

比率/倍率の値の範囲は、0.5から最大ズーム倍率までです。0.5から1.0の間の値は超広角(ズームアウト)を表し、1.0から最大ズーム倍率の間の値はズームインを表します。実際に適用されるズーム倍率は、アクティブなカメラの設定でサポートされる範囲にクランプされます - カメラが超広角をサポートしていない場合、1.0以下に設定されたズーム倍率は有効にならず、ズームは適用されません。カメラがサポートする最大ズーム倍率を超える値の場合、ズーム倍率はサポートされる最大値に設定されます。

カスタムビデオキャプチャーの使用

Publisher クラスは、デバイスのカメラから直接動画を取得する標準の動画キャプチャ機能を実装しています。PublisherKit クラスを使用すると、カスタム動画キャプチャ機能を実装することができます。

OpenTok Android SDK には、BaseVideoCapturer クラスが含まれています。このクラスをオーバーライドして、カスタムビデオキャプチャクラスを作成します。 capturer() メソッドを実行する必要があります。 パブリッシャー・オブジェクトをインスタンス化する:

// Use a custom video capturer.
// CustomVideoCapturer extends BaseVideoCapturer:
mCapturer = new CustomVideoCapturer();

mPublisher = new Publisher.Builder(context)
  .name("Bob's video")
  .capturer(mCapturer)
  .build();

あるいは、PublisherKit クラスを使用してカスタムパブリッシャーの実装を定義している場合は、 capturer PublisherKit クラスを継承するクラスのプロパティ:

// Use a custom video capturer.
// CustomVideoCapturer extends BaseVideoCapturer:
mCapturer = new CustomVideoCapturer();
mPublisher.capturer = mCapturer;

について getCaptureSettings() BaseVideoCapturer クラスのこのメソッドは、フレームレート、幅、高さ、ビデオ遅延、ビデオ形式など、ビデオキャプチャ機能の設定を返します。ビデオキャプチャオブジェクトでは、次のようにこのメソッドをオーバーライドして、独自のビデオキャプチャ設定を定義することができます。

@Override
public CaptureSettings getCaptureSettings() {
    // Set the preferred capturing size
    configureCaptureSize(640, 480);

    CaptureSettings settings = new CaptureSettings();
    settings.fps = mCaptureFPS;
    settings.width = mCaptureWidth;
    settings.height = mCaptureHeight;
    settings.format = NV21;
    settings.expectedDelay = 0;
    return settings;
}

に電話する。 startCapture() カスタムビデオキャプチャからビデオのキャプチャを開始するための、ビデオキャプチャオブジェクトのメソッド。

BaseVideoCapturer クラスには、さらに provideByteArrayFrame(byte[] data, int format, int width, int height, int rotation, boolean mirrorX) そして provideIntArrayFrame(int[] data, int format, int width, int height, int rotation, boolean mirrorX). これらのメソッドを呼び出すことで、動画の1フレームをバイト配列または整数配列として指定します。

例については、OpenTokHelloWorld サンプルアプリケーション内の OpenTokVideoCapturer クラスを参照してください。

カスタム動画キャプチャツールを使用して、画面共有のストリームを配信します。詳細については、以下を参照してください。 スクリーン共有.

また、 カスタム動画レンダラー 動画用。

カスタムオーディオドライバの使用

デフォルトでは、OpenTok Android SDK はデバイスのマイクを使用して音声をキャプチャし、公開ストリームに送信します。また、スピーカー(またはヘッドフォン)を使用して、購読中のストリームからの音声を再生します。OpenTok Android SDK で定義されている `BaseAudioDevice` を継承するクラスを作成してください:

public class CustomAudioDevice extends BaseAudioDevice

それから AudioDeviceManager.setAudioDevice() オーディオサンプルのキャプチャおよびレンダリングに、オーディオデバイスクラスのインスタンスを使用するようにアプリを設定する方法:

AudioDeviceManager.setAudioDevice(customAudioDevice);

BaseAudioDevice クラスには、 getAudioBus() OpenTok Android SDK で定義されている、AudioBus オブジェクトを返すメソッド。AudioBus には readRenderData() 購読中のオーディオストリームからオーディオサンプルを読み込むためのメソッドです。また、これには a writeCaputureData() パブリッシャーのオーディオストリームにオーディオサンプルを供給する方法。

例については、の「Basic-Audio-Driver」および「Advanced-Audio-Driver」サンプルを参照してください。 vonage-video-android-sdk-サンプル (GitHub上のリポジトリ)。

公開されたストリームへの音声および動画の変換の適用

Vonage Media Processor ライブラリに用意されている既製のトランスフォーマーを使用することも、独自のオーディオまたはビデオトランスフォーマーを作成して、公開済みの動画に適用することもできます。詳しくは、 本題.

音質の調整

パブリッシャーストリームの音質を微調整するには、以下の方法があります:

パブリッシャーストリームのオーディオビットレートは audioBitrate() のメソッドを使用する。 PublisherKit.Builder オブジェクトを使用する。 パブリッシャーをインスタンス化する.
パブリッシュされるオーディオの希望するビットレート(bits per second)。設定可能な値の範囲は6,000~510,000です(無効な値は無視されます)。(無効な値は無視されます。) 高品質な音声を有効にする (または低品質の音声で帯域幅の使用量を減らす) には、この値を設定します。このオプションを設定しないと、OpenTok は自動的にストリームの音声ビットレートを割り当てます。

以下は推奨設定です:

  • 8,000~12,000(ナローバンド(NB)スピーチ用
  • 16,000~20,000(ワイドバンド(WB)スピーチ用
  • フルバンド(FB)スピーチで28,000~40,000ドル
  • フルバンド(FB)音楽用48,000~64,000ドル

音声セッションのオーディオ出力モードの設定

デフォルトでは、OpenTok Android SDK は、音声の再生にヘッドセットのスピーカーではなく、デバイスのスピーカーを使用します。これは、映像と音声の両方を扱うアプリにとっては望ましい設定です。ただし、 音声のみのセッションヘッドセットスピーカーを使用してオーディオを再生することが望ましいです。以下の通話を行うことで、アプリにこれを行わせることができます:

AudioDeviceManager.getAudioDevice().setOutputMode(
    OutputMode.Handset);

Opus DTX によるオーディオ帯域幅の削減

オーパスDTX(不連続伝送) は、参加者が話していないときに帯域幅の使用量を削減できるオーディオコーデックです。これは、多数の音声参加者がいる大規模なセッションで役立ちます。Opus DTX を有効にするには、 enableOpusDtx() のメソッドを使用する。 PublisherKit.Builder オブジェクトを使用する。 パブリッシャーをインスタンス化する.詳細はこちらをご覧ください。 Vonage Video API ナレッジベース記事.

加入者の音声音量の設定

を呼び出すことで、各加入者の音声ボリュームを個別に設定できます。 Subscriber.setAudioVolume() メソッドを使用する。

オーディオまたはビデオのみの購読

デフォルトでは、Subscriber オブジェクトは、オーディオおよびビデオが利用可能な場合にそれらを購読するように初期化されます。

次の関数を呼び出すことで、音声のオン/オフを切り替えることができます。 setSubscribeToAudio() メソッドを呼び出します:

mSubscriber.setSubscribeToAudio(false); // audio off
mSubscriber.setSubscribeToAudio(true);  // audio on

ビデオのオン/オフは setSubscribeToVideo() メソッドを呼び出します:

mSubscriber.setSubscribeToVideo(false); // video off
mSubscriber.setSubscribeToVideo(true);  // video on

ただし、オーディオまたはビデオを購読できるのは、ストリームを公開しているクライアントがオーディオまたはビデオを含んでいる場合のみであることに注意してください。たとえば subscribeToVideo(false) は、ストリームを公開しているクライアントがオーディオのみを公開している場合は、効果がありません。

ストリームがオーディオかビデオかを検出する

以下を確認できます。 hasAudio() そして hasVideo() Stream オブジェクトに音声や動画が含まれているかどうかを確認する方法

if (!mStream.hasAudio()) {
	// You may want to adjust the user interface
}
if (!mStream.hasVideo()) {
	// You may want to adjust the user interface
}

例えば ストリームを購読する、ストリームに音声や動画が含まれているかどうかに応じて、ユーザーインターフェースを調整したい場合があるかもしれません。たとえば、ストリームに音声が含まれているかどうかをユーザーに示したい場合や、ストリームに動画が含まれていない場合は、購読者のビューを表示しないようにしたい場合などです。

パブリッシャーの動画画質低下設定の設定

帯域幅やCPUが制限されている場合、ビデオエンジンはパブリッシャービデオのフレームレートや解像度を下げ、制限に合わせることができる。

「劣化優先度」は、この動作を微調整できる設定項目です。

開発者は、ユースケースや要件に応じて、劣化プリファレンスを定義し、適用する責任がある。

これはプリファレンスとして機能し、ビデオエンジンは選択されたプリファレンスに従おうとするが、結果は保証されない。

を使用する場合、このプリファレンスは異なる動作をすることがあります。 スケーラブルビデオビデオエンジンは、解像度を落とす代わりにレイヤーを削除することができる。

コンテンツのヒント とデグラデーション・プリファレンスは、異なるが関連した目的を果たす:Content Hint は伝送されるコンテンツのタイプを記述し、Degradation preference はエンコーディング戦略を制御します。コンテンツヒントを設定すると、ビデオエンジンは自動的に適切なデグラデーションプリファレンスを決定します(たとえば、"text" は自動的に解像度を維持するように選択します)。劣化プリファレンスを明示的に設定すると、この自動選択が上書きされます。

この値は、提供された DegradationPreference 価値観の違いだ:

未設定

mPublisher.setDegradationPreference(DegradationPreference.DegradationPreferenceNotSet);

デフォルト値です。ビデオエンジンが最適な画質低下設定を決定します。

フレームレートと解像度を維持する

mPublisher.setDegradationPreference(DegradationPreference.DegradationPreferenceMaintainFrameRateAndResolution);

ビデオエンジンは、フレームレートを安定させ、解像度を下げないように努めます。

フレームレートを維持する

mPublisher.setDegradationPreference(DegradationPreference.DegradationPreferenceMaintainFrameRate);

ビデオエンジンはフレームレートを一定に保つよう努めますが、必要に応じて解像度を下げる場合があります。

解像度を維持する

mPublisher.setDegradationPreference(DegradationPreference.DegradationPreferenceMaintainResolution);

ビデオエンジンは解像度を下げることはありませんが、必要に応じてフレームレートを下げる場合があります。

バランスが取れている

mPublisher.setDegradationPreference(DegradationPreference.DegradationPreferenceBalanced);

ビデオエンジンは、必要に応じて解像度とフレームレートの両方を調整し、バランスを取るよう努めます。