音声と映像の設定 — Windows
以下の項目について、音声や映像の設定を変更できます。 公開された そして 購読済み ストリーム:
- オーディオまたはビデオのみの公開
- 音声のみのセッションでの発表
- パブリッシャーが使用するカメラの選択
- 配信者の動画のローカル画面をミラーリングする
- パブリッシャーが使用するオーディオソースの切り替え
- 動画の解像度とフレームレートの設定
- カスタムビデオキャプチャーの使用
- カスタムオーディオドライバの使用
- 音質の調整
- Opus DTX によるオーディオ帯域幅の削減
- 加入者の音声音量の設定
- オーディオまたはビデオのみの購読
- ストリームがオーディオかビデオかを検出する
- パブリッシャーの動画画質低下設定の設定
オーディオまたはビデオのみの公開
以下を設定することで、音声と映像のオン/オフを切り替えることができます。 PublishAudio そして PublishVideo Publisher オブジェクトのプロパティ。たとえば、次のコードはオーディオをオフにします。
publisher.PublishAudio = false;
音声のみのセッションでの発表
を設定する。 音声のみ セッションでは、 hasVideoTrack パラメーターの Publisher() コンストラクタを false そして、その capturer パラメータを null あなたが 各パブリッシャー・オブジェクトをインスタンス化する を作成します。例えば、以下のコードは音声のみのセッションのパブリッシャーを作成します:
mPublisher = new Publisher(Context.Instance, renderer: publisherVideoRenderer, capturer: null, hasVideo: false);
パブリッシャーが使用するカメラの選択
に電話する。 VideoCapturer.EnumerateDevices システム上で利用可能なビデオデバイス(通常はカメラ)を表す VideoDevice オブジェクトの一覧を取得します。その後、以下のいずれかを使用して CreateVideoCapturer() VideoDevice オブジェクトのメソッドを使用して、そのデバイスを映像ソースとするビデオキャプチャを作成します。その後、Publisher オブジェクトをインスタンス化する際に、そのビデオキャプチャを使用できます:
var devices = VideoCapturer.EnumerateDevices();
var selectedDevice = devices[0];
capturer = selectedDevice.CreateVideoCapturer(VideoCapturer.Resolution.High);
publisher = new Publisher(Context.Instance, renderer: publisherVideo, capturer: capturer);
VideoDevice クラスには以下が含まれます Name そして Id ビデオデバイスを識別するためのプロパティ。
配信者の動画のローカル画面をミラーリングする
を設定することができます。 MirrorOnLocalRender プロパティを使用して、パブリッシャのローカルでレンダリングされたビデオをミラーリングすることができます (true)または(false).このプロパティは GetCaptureSettings() Publisher オブジェクト用のカスタムビデオキャプチャ機能のメソッド。詳細については、以下を参照してください。 カスタムビデオキャプチャーの使用.
この設定は、パブリッシャのクライアント アプリケーションでレンダリングされる動画にのみ影響します。サブスクライブしているクライアントの動画には影響しません。
パブリッシャーが使用するオーディオソースの切り替え
パブリッシャーが使用するオーディオ入力ソース(マイク)は、簡単に変更できます。静的関数を呼び出して AudioDevice.EnumerateInputAudioDevices() メソッドを呼び出して、利用可能な入力デバイスを表すAudioDevice.InputAudioDeviceオブジェクトのリストを取得します。メソッドを呼び出します。 AudioDevice.SetInputAudioDevice(audioInput) メソッドを使用して、パブリッシャーが使用する音声入力デバイスを設定します。
動画の解像度とフレームレートの設定
パブリッシャーのストリームの解像度とフレームレートは VideoCapturer オブジェクトを使用します。 パブリッシャー・オブジェクトをインスタンス化する.
注: 参照 1080pデベロッパーガイド 1080p解像度を使用する際の注意事項については、こちらをご覧ください。
をインスタンス化する方法はいくつかあります。 VideoCapturer オブジェクトを呼び出します。ひとつは OpenTok.VideoCapturer.EnumerateDevices() メソッドを使用して、利用可能なビデオデバイスのリストを取得します。次に CreateVideoCapturer() メソッドをインスタンス化します。 VideoCapturer オブジェクトを作成します。たとえば、以下のコードでは、デフォルトのシステム・ビデオ・キャプチャを使用し、解像度を 720p に設定したパブリッシャを作成しています (VideoCapturer.Resolution.High)、フレームレートを30フレーム/秒に設定する:
var devices = VideoCapturer.EnumerateDevices();
var selectedDevice = devices[0];
capturer = selectedDevice.CreateVideoCapturer(VideoCapturer.Resolution.High,
VideoCapturer.VideoCapturer.FrameRate.Fps30);
publisher = new Publisher(Context.Instance, renderer: publisherVideoRenderer, capturer: capturer);
選択されたビデオデバイスが選択された解像度またはフレームレートに対応していない場合、ビデオキャプチャは利用可能な最も近い設定を使用します。
なお、OpenTok Media Router を使用するセッション( メディアモード ルーティングに設定されている場合)、フレームレートを下げると、ストリームが使用する帯域幅が比例して減少する。ただし、メディアモードが中継に設定されているセッショ ンでは、フレームレートを下げてもストリームの帯域幅は減少しない。
カスタムビデオキャプチャーの使用
VideoCapturer.EnumerateDevices() を使用して、利用可能な映像デバイス(カメラ)の一覧を取得します。以下のいずれかを使用してください。 CreateVideoCapturer() VideoDevice クラスのメソッドを使用して、ビデオデバイスに基づいて VideoCapturer オブジェクトをインスタンス化します。
OpenTok Windows SDK には、カスタムビデオキャプチャ機能を定義するために使用できる IVideoCapturer インターフェースが含まれています。この IVideoCapturer インターフェースを実装するカスタムクラスを作成して、カスタムビデオキャプチャ機能を作成します。カスタムビデオキャプチャクラスのインスタンスを Publisher()Publisher オブジェクトをインスタンス化します。
OpenTok Windows SDK は、 Start(IVideoFrameConsumer frameConsumer) カスタムビデオキャプチャからビデオのキャプチャを開始するための、ビデオキャプチャオブジェクトのメソッド。SDKには、カスタムキャプチャ用のビデオフレームコンシューマを定義するIVideoFrameConsumerインターフェースが含まれています。
OpenTok Windows SDK は、 Consume(VideoFrame frame) 新しいビデオフレームをレンダリングする必要がある場合の、カスタムビデオフレームコンシューマーオブジェクトのメソッド。OpenTok Windows SDK で定義されている VideoFrame クラスは、ビデオフレームを表す VideoFrame クラスを含んでいます。
カスタム動画キャプチャツールを使用して、画面共有のストリームを配信することができます。詳細やコード例については、以下を参照してください。 スクリーン共有.
また、 カスタム動画レンダラー 動画用。
カスタムオーディオドライバの使用
デフォルトでは、OpenTok Windows SDK は、デバイスのマイクを使用してオーディオをキャプチャし、パブリッシュされたストリームに送信します。また、スピーカー(またはヘッドフォン)を使用して、サブスクライブされたストリームからのオーディオを再生します。サブスクライバーおよびパブリッシャー向けのオーディオデータの読み取りおよび書き込みを行うカスタムオーディオドライバーを実装することができます。実装を作成するには、 IAudioDevice インターフェースとそのメソッド。その IAudioDevice.InitAudio(AudioDevice.AudioBus audioBus) このメソッドは、AudioDevice が初期化される際に呼び出されます。以下の AudioBus そのメソッドに渡されたオブジェクトを使用して、オーディオデータの読み書きを行い、その ReadRenderData(buffer, numberOfSamples) そして WriteCaptureData(buffer, numberOfSamples) のメソッドがある。
さらに、次の IAudioDeviceExtension インターフェース。このインターフェースを実装する CustomAudioDevice が、 AudioDevice.SetCustomAudioDevice(), この実装には、デバイスの列挙、特定のデバイスの選択、通知の購読を行うための追加のメソッドが含まれており、これらはデフォルトの静的な実装ではなく、カスタムオーディオデバイス実装に内部的に紐付けられます。
SDKに含まれるMMAudioDeviceクラスは、Windowsのmmdeviceapi.hインターフェースを使用して、このインターフェースを実装しています:
readonly MMAudioDevice audioDevice;
...
audioDevice = new MMAudioDevice(dispatcher);
AudioDevice.SetCustomAudioDevice(context, audioDevice);
/* Subscribe to notifications: */
audioDevice.InputDeviceAdded += AudioInputDeviceAdded;
audioDevice.InputDeviceRemoved += AudioInputDeviceRemoved;
audioDevice.DefaultInputDeviceChanged += AudioDefaultInputDeviceChanged;
/* Alternatively, you can use the following code to subscribe to
notifications and yield the same result: */
AudioDevice.Notifications notifications = new AudioDevice.Notifications(dispatcher);
notifications.InputDeviceAdded += AudioInputDeviceAdded;
notifications.InputDeviceRemoved += AudioInputDeviceRemoved;
notifications.DefaultInputDeviceChanged += AudioDefaultInputDeviceChanged;
/* Call methods */
audioDevice.SetInputAudioDevice(myInputAudioDevice.Id);
/* Alternatively, you can use the static methods in AudioDevice and yield the same result: */
AudioDevice.SetInputAudioDevice(myInputAudioDevice);
音質の調整
について パブリッシャー.ビルダー クラスには、音質を調整するためのプロパティがあります。これにより、高音質(または低音質)のオーディオを使用するストリームを公開できます:
オーディオビットレート (Numbers) - 公開するオーディオの希望ビットレート。対応する値の範囲は6,000~510,000です(無効な値は無視されます)。(無効な値は無視されます。) 高品質のオーディオを有効にするには、この値を設定します (または、低品質のオーディオで帯域幅の使用量を減らすには、この値を設定します)。
以下は推奨設定です:
- 8,000~12,000(ナローバンド(NB)スピーチ用
- 16,000~20,000(ワイドバンド(WB)スピーチ用
- フルバンド(FB)スピーチで28,000~40,000ドル
- フルバンド(FB)音楽用48,000~64,000ドル
このオプションを設定しない場合、OpenTok が自動的にストリームのオーディオビットレートを設定します。
オートゲインコントロール (Boolean) - 公開オーディオの自動ゲインコントロールを有効にするかどうか。これを false 高音質オーディオをパブリッシュする場合、( AutoGainControl プロパティの Publisher.Builder).デフォルト値は true.を設定した場合、この設定は無視されます。 DisableAudioProcessing への true (公開ストリームのエコーキャンセル、自動ゲインコントロール、ノイズ抑制を無効にする)。
オーディオ処理を無効にする (Boolean) - 公開オーディオのエコーキャンセル、自動ゲインコントロール、ノイズ抑制を無効にするかどうか。これを true 高音質オーディオをパブリッシュする場合、( DisableAudioProcessing プロパティの Publisher.Builder).デフォルト値は false.
エコーキャンセル (Boolean) - 公開音声のエコーキャンセレーションを有効にするかどうか。これを false 高音質オーディオをパブリッシュする場合、( EchoCancellation プロパティの Publisher.Builder).デフォルト値は true.を設定した場合、この設定は無視されます。 DisableAudioProcessing への true (公開ストリームのエコーキャンセル、自動ゲインコントロール、ノイズ抑制を無効にする)。
ステレオ (Boolean) - ステレオ・オーディオを公開するかどうか。デフォルト値は false.
ノイズ抑制 (Boolean) - 公開オーディオのノイズ抑制を有効にするかどうか。これを false 高音質オーディオをパブリッシュする場合、( NoiseSuppression プロパティの Publisher.Builder).デフォルト値は true.を設定した場合、この設定は無視されます。 DisableAudioProcessing への true (公開ストリームのエコーキャンセル、自動ゲインコントロール、ノイズ抑制を無効にする)。
Opus DTX によるオーディオ帯域幅の削減
オーパスDTX(不連続伝送) は、参加者が話していないときに帯域幅の使用量を削減できるオーディオコーデックである。これは、多くの音声参加者がいる大規模なセッションで役立ちます。
を設定することで、Opus DTX を有効にします。 OpusDtx プロパティの Publisher.Builder ~する際に使用するオブジェクト パブリッシャーの作成) から true.
詳細については、こちらをご覧ください Vonage Video API ナレッジベース記事.
加入者の音声音量の設定
を呼び出すことで、各加入者の音声ボリュームを個別に設定できます。 Subscriber.AudioVolume 財産である。
オーディオまたはビデオのみの購読
デフォルトでは、Subscriber オブジェクトは、オーディオおよびビデオが利用可能な場合にそれらを購読するように初期化されます。
以下の設定を行うことで、音声をオンまたはオフに切り替えることができます。 SubscribeToAudio Subscriber オブジェクトのプロパティ:
subscriber.SubscribeToAudio = false; // audio off
subscriber.SubscribeToAudio = true; // audio on
[設定] を設定することで、動画をオンまたはオフに切り替えることができます。 SubscribeToVideo Subscriber オブジェクトのプロパティ:
subscriber.SubscribeToVideo = false; // video off
subscriber.SubscribeToVideo = true; // video on
ただし、ストリームを配信しているクライアントが音声または映像を含んでいる場合にのみ、音声または映像を購読できることに注意してください。たとえば、次のように設定すると SubscribeToVideo への true は、ストリームを公開しているクライアントがオーディオのみを公開している場合は、効果がありません。
ストリームがオーディオかビデオかを検出する
以下を確認できます。 HasAudio そして HasVideo Stream オブジェクトのプロパティを確認して、オーディオまたはビデオが含まれているかどうかを確認する
if (!stream.HasAudio) {
// You may want to adjust the user interface
}
if (!stream.HasVideo) {
// You may want to adjust the user interface
}
例えば ストリームを購読する、ストリームに音声や動画が含まれているかどうかに応じて、ユーザーインターフェースを調整したい場合があるかもしれません。たとえば、ストリームに音声が含まれているかどうかをユーザーに示したい場合や、ストリームに動画が含まれていない場合は、購読者のビューを表示しないようにしたい場合などです。
パブリッシャーの動画画質低下設定の設定
帯域幅やCPUが制限されている場合、ビデオエンジンはパブリッシャービデオのフレームレートや解像度を下げ、制限に合わせることができる。
「劣化優先度」は、この動作を微調整できる設定項目です。
開発者は、ユースケースや要件に応じて、劣化プリファレンスを定義し、適用する責任がある。
これはプリファレンスとして機能し、ビデオエンジンは選択されたプリファレンスに従おうとするが、結果は保証されない。
を使用する場合、このプリファレンスは異なる動作をすることがあります。 スケーラブルビデオビデオエンジンは、解像度を落とす代わりにレイヤーを削除することができる。
コンテンツのヒント とデグラデーション・プリファレンスは、異なるが関連した目的を果たす:Content Hint は伝送されるコンテンツのタイプを記述し、Degradation preference はエンコーディング戦略を制御します。コンテンツヒントを設定すると、ビデオエンジンは自動的に適切なデグラデーションプリファレンスを決定します(たとえば、"text" は自動的に解像度を維持するように選択します)。劣化プリファレンスを明示的に設定すると、この自動選択が上書きされます。
この値は、提供された DegradationPreference 価値観の違いだ:
未設定
publisher.DegradationPreference = DegradationPreference.NotSet;
デフォルト値です。ビデオエンジンが最適な画質低下設定を決定します。
フレームレートと解像度を維持する
publisher.DegradationPreference = DegradationPreference.MaintainFrameRateAndResolution;
ビデオエンジンは、フレームレートを安定させ、解像度を下げないように努めます。
フレームレートを維持する
publisher.DegradationPreference = DegradationPreference.MaintainFrameRate;
ビデオエンジンはフレームレートを一定に保つよう努めますが、必要に応じて解像度を下げる場合があります。
解像度を維持する
publisher.DegradationPreference = DegradationPreference.MaintainResolution;
ビデオエンジンは解像度を下げることはありませんが、必要に応じてフレームレートを下げる場合があります。
バランスが取れている
publisher.DegradationPreference = DegradationPreference.Balanced;
ビデオエンジンは、必要に応じて解像度とフレームレートの両方を調整し、バランスを取るよう努めます。