音声と映像の設定 — iOS
以下の項目について、音声や映像の設定を変更できます。 公開された そして 購読済み ストリーム:
- オーディオまたはビデオのみの公開
- 音声のみのセッションでの発表
- パブリッシャーが使用するカメラの選択
- パブリッシャーのカメラが切り替わったことを検知する
- 動画の解像度とフレームレートの設定
- カメラのトーチ(懐中電灯)を有効にする
- カメラのズーム設定
- カスタムビデオキャプチャーの使用
- カスタムオーディオドライバの使用
- 公開されたストリームへの音声および動画の変換の適用
- 音質の調整
- Opus DTX によるオーディオ帯域幅の削減
- 加入者の音声音量の設定
- オーディオまたはビデオのみの購読
- ストリームがオーディオかビデオかを検出する
- パブリッシャーの動画画質低下設定の設定
オーディオまたはビデオのみの公開
以下の設定を行うことで、音声と映像のオン/オフを切り替えることができます。 publishAudio そして publishVideo プロパティ。たとえば、次のコードは音声をオフにします:
publisher.publishAudio = NO;
音声のみのセッションでの発表
を設定する。 音声のみ セッションでは、 videoTrack OTPublisherSettings オブジェクトのプロパティを NO あなたが 各OTPublisherオブジェクトを初期化する を作成します。例えば、以下のコードは音声のみのセッションのパブリッシャーを作成します:
OTPublisherSettings *_publisherSettings = [[OTPublisherSettings alloc] init];
_publisherSettings.videoTrack = NO;
_publisher = [[OTPublisher alloc]
initWithDelegate:self
settings:_publisherSettings];
パブリッシャーが使用するカメラの選択
ストリームの配信に使用するカメラを指定(または変更)できます:
publisher.cameraPosition = AVCaptureDevicePositionFront; // front camera
publisher.cameraPosition = AVCaptureDevicePositionBack; // back camera
に注意してほしい。 cameraPosition プロパティは OTPublisherKit クラスでは使用できません。OTPublisherKit クラスで カスタムビデオキャプチャーの実装カスタムビデオキャプチャコードで使用するカメラを定義することができます。
パブリッシャーのカメラが切り替わったことを検知する
ストリームをパブリッシュするカメラが変更されると、パブリッシャーデリゲートは [OTPublisher publisher:didChangeCameraPosition:] というメッセージを送った:
- (void)publisher:(OTPublisher *)publisher didChangeCameraPosition:(AVCaptureDevicePosition)position
{
if (position == AVCaptureDevicePositionFront) {
// front camera
} else {
// back camera
}
}
動画の解像度とフレームレートの設定
パブリッシャーのストリームの解像度とフレームレートは、 cameraResolution そして cameraFrameRate に渡しする OTPublisherSettings オブジェクトのプロパティ [OTPublisher initWithDelegate:settings:] メソッドを使用する:
OTPublisherSettings *_publisherSettings = [[OTPublisherSettings alloc] init];
_publisherSettings.cameraResolution = OTCameraCaptureResolutionHigh;
_publisherSettings.cameraFrameRate = OTCameraCaptureFrameRate30FPS;
_publisher = [[OTPublisher alloc]
initWithDelegate:self
settings:_publisherSettings];
なお、OpenTok Media Router を使用するセッション( メディアモード ルーティングに設定されている場合)、フレームレートを下げると、ストリームが使用する帯域幅が比例して減少する。ただし、メディアモードが中継に設定されているセッショ ンでは、フレームレートを下げてもストリームの帯域幅は減少しない。
注: 参照 1080pデベロッパーガイド 1080p解像度を使用する際の注意事項については、こちらをご覧ください。
カメラのトーチ(懐中電灯)を有効にする
を使用する。 cameraTorch パブリッシャープロパティは、ビデオキャプチャ中にカメラのフラッシュライト(トーチ)を有効または無効にします:
OTPublisherSettings *settings = [[OTPublisherSettings alloc] init];
// ...
_publisher = [[OTPublisher alloc] initWithDelegate:self settings:settings];
// ...
_publisher.cameraTorch = YES;
デフォルト値は NO (懐中電灯は使わない)。
すべてのデバイスのカメラにカメラのフラッシュライトがあるわけではないことに注意してください。アクティブなカメラがカメラのフラッシュライト機能をサポートしていない場合(例えば、フロントカメラは通常サポートしていません)、このメソッドを呼び出しても効果はありません。
カメラのズーム設定
を使用する。 cameraZoomFactor カメラのズーム比(倍率)を設定するパブリッシャープロパティ:
OTPublisherSettings *settings = [[OTPublisherSettings alloc] init];
// ...
_publisher = [[OTPublisher alloc] initWithDelegate:self settings:settings];
// ...
_publisher.cameraZoomFactor = 0.7;
比率/倍率の値の範囲は、0.5から最大ズーム倍率までです。0.5から1.0の間の値は超広角(ズームアウト)を表し、1.0から最大ズーム倍率の間の値はズームインを表します。実際に適用されるズーム倍率は、アクティブなカメラの設定でサポートされる範囲にクランプされます - カメラが超広角をサポートしていない場合、1.0以下に設定されたズーム倍率は有効にならず、ズームは適用されません。カメラがサポートする最大ズーム倍率を超える値の場合、ズーム倍率はサポートされる最大値に設定されます。
カスタムビデオキャプチャーの使用
OTPublisher クラスは、iOS デバイスのカメラから動画をキャプチャします。カスタム動画ストリーム API を使用し、OTPublisherKit クラスおよび OTVideoCapture クラスを利用して、カスタム動画キャプチャ機能を定義することができます。 例については、OpenTok iOS SDK の samples ディレクトリにある「Project 2: Let's Build OTPublisher」サンプル(または opentok-ios-sdk-samples (GitHub上のリポジトリ)。
また、 カスタム動画レンダラー 動画用。
カスタムオーディオドライバの使用
デフォルトでは、OpenTok iOS SDK はデバイスのマイクを使用して音声を取得し、公開されたストリームに送信します。また、スピーカー(またはヘッドフォン)を使用して、購読しているストリームからの音声を再生します。 [OTAudioDeviceManager setAudioDevice:] オーディオサンプルのキャプチャおよびレンダリングを行うためのカスタムオーディオドライバを設定する方法:
myAudioDevice = [[MyAudioDevice alloc] init];
[OTAudioDeviceManager setAudioDevice:_myAudioDevice];
電話 [OTAudioDeviceManager setAudioDevice:] OTSession オブジェクトを初期化する前に、 [OTAudioDevice setAudioBus:] オーディオバスオブジェクトを設定するメソッド。このオブジェクトは、OTAudioBusプロトコルによって定義されており、 [OTAudioBus writeCaptureData:numberOfSamples:] メソッドと、 [OTAudioBus readRenderData:numberOfSamples:] メソッド。これらのメソッドは、パブリッシャーのオーディオストリームへの書き込み用、あるいはサブスクライブされたストリームからの読み取り用に、オーディオサンプルが利用可能になった際に呼び出されます。
例については、OpenTok iOS SDKのsamplesディレクトリにある「Project 7: External Audio Device」サンプル(または opentok-ios-sdk-samples (GitHub上のリポジトリ)。
公開されたストリームへの音声および動画の変換の適用
Vonage Media Processor ライブラリに用意されている既製のトランスフォーマーを使用することも、独自のオーディオまたはビデオトランスフォーマーを作成して、公開済みの動画に適用することもできます。詳しくは、 本題.
音質の調整
パブリッシャーストリームの音質を微調整するには、以下の方法があります:
オーディオ・ビットレート パブリッシャー設定
@property (nonatomic) int audioBitrate
パブリッシュされるオーディオの希望するビットレート(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ドル
Opus DTX によるオーディオ帯域幅の削減
オーパスDTX(不連続伝送) は、参加者が話していないときに帯域幅の使用量を削減できるオーディオコーデックです。これは、多数の音声参加者がいる大規模なセッションで役立ちます。Opus DTX を有効にするには、 enableOpusDtx プロパティの OTPublisherKitSettings オブジェクトに渡します。 [OTPublisherKit initWithDelegate:settings:] メソッド(~のとき) パブリッシャーの作成)。詳細については、こちらをご覧ください。 Vonage Video API ナレッジベース記事.
加入者の音声音量の設定
を設定することで、各加入者の音声ボリュームを個別に設定できます。 OTSubscriberKit.audioVolume 財産である。
オーディオまたはビデオのみの購読
デフォルトでは、Subscriber オブジェクトは、オーディオおよびビデオが利用可能な場合にそれらを購読するように初期化されます。
いつ ストリームを購読するまた、最初にオーディオとビデオのどちらをサブスクライブするかを指定することもできます(利用可能な場合)。例えば、以下のコードはオーディオ・ストリームのみを購読します:
_subscriber = [[OTSubscriber alloc]
initWithStream:stream delegate:self];
_subscriber.subscribeToAudio = NO;
Subscriberオブジェクトを作成した後、オーディオのオン/オフを切り替えるには、次のようにします。 subscribeToAudio() メソッドを呼び出します:
_subscriber.subscribeToAudio = NO; // audio off
_subscriber.subscribeToAudio = YES; // audio on
ビデオのオン/オフは subscribeToVideo() メソッドを呼び出します:
subscriber.subscribeToVideo = NO; // video off
subscriber.subscribeToVideo = YES; // video on
ただし、オーディオまたはビデオを購読できるのは、ストリームを公開しているクライアントがオーディオまたはビデオを含んでいる場合のみであることに注意してください。たとえば subscribeToVideo(false) は、ストリームを公開しているクライアントがオーディオのみを公開している場合は、効果がありません。
ストリームがオーディオかビデオかを検出する
デフォルトでは、サブスクライバーオブジェクトはオーディオとビデオの両方を再生します(利用可能な場合)。ストリームにオーディオまたはビデオがあるかどうか(ストリームのパブリッシャーがオーディオまたはビデオをストリーミングしている場合)は hasAudio そして hasVideo プロパティを使用する:
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" は自動的に解像度を維持するように選択します)。劣化プリファレンスを明示的に設定すると、この自動選択が上書きされます。
この値は、提供された OTDegradationPreference 価値観の違いだ:
未設定
_publisher.degradationPreference = OTDegradationPreferenceNotSet;
デフォルト値です。ビデオエンジンが最適な画質低下設定を決定します。
フレームレートと解像度を維持する
_publisher.degradationPreference = OTDegradationPreferenceMaintainFrameRateAndResolution;
ビデオエンジンは、フレームレートを安定させ、解像度を下げないように努めます。
フレームレートを維持する
_publisher.degradationPreference = OTDegradationPreferenceMaintainFrameRate;
ビデオエンジンはフレームレートを一定に保つよう努めますが、必要に応じて解像度を下げる場合があります。
解像度を維持する
_publisher.degradationPreference = OTDegradationPreferenceMaintainResolution;
ビデオエンジンは解像度を下げることはありませんが、必要に応じてフレームレートを下げる場合があります。
バランスが取れている
_publisher.degradationPreference = OTDegradationPreferenceBalanced;
ビデオエンジンは、必要に応じて解像度とフレームレートの両方を調整し、バランスを取るよう努めます。