パブリッシャーの動画に関する制約 — Web
一旦 Publisherを初期化しました, 出力されるビデオトラックの推奨解像度とフレームレートを設定できます。これにより、さまざまなUIサイズ(サムネイル、タイル、全画面)や加入者のデバイスに応じて、帯域幅とCPU使用率を最適化できます。
このトピックには以下のセクションが含まれます:
パブリッシャーの動画に関する制約事項の理解
出版社は、 優先 ビデオトラックの解像度とフレームレート:SDKは、キャプチャデバイスおよび出力トラックに制約を適用します。パブリッシャーが、小型のUIターゲット向けに小さいサイズや低いフレームレートを設定すると、サブスクライバーは帯域幅とCPU負荷の低減というメリットを得られます。なお、配信される画質は、デバイスの性能やネットワーク状況によってさらに変動する可能性があることにご留意ください。
希望の解像度を設定する
電話 publisher.setPreferredResolution(preferredResolution) 希望するピクセル寸法を設定するには:
await publisher.setPreferredResolution({ width: 640, height: 360 });
preferredResolutionはオブジェクトです:{ width: number, height: number }.- 指定する解像度は、当初の公開解像度を超えてはなりません。
- これは、パブリッシャーが動画をキャプチャしている場合にのみ適用されます(
publishVideo: true).
以下の場合はエラーが発生します:
- このパブリッシャーは音声のみです。
widthまたはheightは正の整数ではありません。- 要求された解像度は、初期の公開解像度を超えています。
try {
// If the initial publish was 640x480, this will throw:
await publisher.setPreferredResolution({ width: 1920, height: 1080 });
} catch (error) {
console.error('Failed to set preferred resolution:', error.message);
}
希望のフレームレートの設定
電話 publisher.setPreferredFrameRate(frameRate) 希望するフレームレート(fps)を設定するには:
await publisher.setPreferredFrameRate(15);
frameRate正の整数(1以上)でなければなりません。- 有効なビデオトラックが必要です。
以下の場合はエラーが発生します:
- このパブリッシャーは音声のみです。
frameRate1以上の有効な整数ではありません。
制約が納期に与える影響
優先制約は、以下の出力ビデオトラックに影響を与えます。 全加入者 ストリームへ。ただし、以下の理由により、実際に配信される解像度やフレームレートはこれより低くなる場合があります:
- キャプチャデバイスの制限事項
- ブラウザまたはOSの制限
- ネットワーク状況と適応型メディアの決定
ベストプラクティス
- 理想的な解像度とフレームレートが事前に分かっている場合は、パブリッシャー作成時に以下の方法で設定してください。
OT.initPublisher()(例えばresolutionそしてframeRate).購読者の場合は、これらの設定を省略するか、またはpreferredResolution: 'auto'を呼び出すとSession.subscribe(). - サブスクライバーAPI (
subscriber.setPreferredResolution()/subscriber.setPreferredFrameRate()) によって、ある 1人の加入者 ストリームを受信/デコード/レンダリングします。これはそのサブスクライバーにのみ影響し、パブリッシャーが送信する内容や他のサブスクライバーが受信する内容には影響しません。 - パブリッシャーAPI (
publisher.setPreferredResolution()/publisher.setPreferredFrameRate()) によって、その 出版社 送信します。これにより、そのストリームのすべての購読者に影響が及び、更新された設定が自動的に適用されます。次のような場合など、preferredResolution メソッドを使用してパブリッシャーの解像度を下げることを検討するとよいでしょう:- CPUの制限やネットワークの問題など、パブリッシャーデバイスが苦戦していることに気づき、WebRTCスタックが通常行うよりも迅速に負担を軽減したい場合。
- デバイスのバッテリー残量が少なく、通話時間を延ばすために電力消費を最小限に抑えたい場合。
- 同じデバイスから画面共有を開始したり、追加のパブリッシャーを起動したりする際に、それらのアクティビティのために計算リソースを解放する必要がある場合。
- パブリッシャの優先解像度/フレーム・レートは、パブリッシャの初期化時に指定された値を超えることはありません。必要な最大解像度とフレーム・レートを指定してパブリッシャを初期化し、使用するケースに応じてこれらの制限内で動的に解像度を下げたり上げたりしてください。
- 適切なフレームレートを使用してください:
- 5 fps — 静的なダッシュボード、スライド、帯域幅に敏感なUI
- 15 fps — 動きの少ないコンテンツ
- 30 fps — フルモーション/高画質動画
- ネットワークの状況により、SDKが希望の解像度とフレームレートを維持できない場合があります。帯域幅やCPUが制限された場合、SDKは自動的に公開/サブスクライブされたビデオ品質を低下させることがあります(たとえば、1080pのプリファレンスは、ネットワークの状態が悪いときに一時的に低い解像度に低下することがあります)。
- 現在、これらのAPIがサポートされています JavaScript SDKでのみ.
例
// Lower quality for mobile users
if (isMobileUser) {
publisher.setPreferredResolution({ width: 320, height: 180 });
publisher.setPreferredFrameRate(15);
}
// Higher quality for desktop
if (isDesktopUser) {
publisher.setPreferredResolution({ width: 1280, height: 720 });
publisher.setPreferredFrameRate(30);
}
// Error when using resolution above initial publish
try {
await publisher.setPreferredResolution({ width: 1920, height: 1080 }); // If initial was 640x480, throws error
} catch (error) {
console.error(error.message);
}
// Debugging: Current track settings
const videoTrack = publisher.getVideoSource().track;
const { width, height, frameRate } = videoTrack.getSettings();
console.log('Current resolution:', width, 'x', height);
console.log('Current frame rate:', frameRate);
トラブルシューティング
エラーの処理
呼び出しを try/catch また、制約が無効である場合や、環境がそれらの制約を満たせない場合には、ユーザーにわかりやすいメッセージを表示します。
async function setPublisherQuality(publisher, preferredResolution, preferredFrameRate) {
try {
await publisher.setPreferredResolution(preferredResolution);
await publisher.setPreferredFrameRate(preferredFrameRate);
} catch (err) {
showMessage('Unable to apply video constraints. Check your device and network.');
console.error(err);
}
}
ネットワークに関する考慮事項
ネットワーク環境に制約がある場合、メディアパイプラインは、設定の優先度にかかわらず、配信される解像度やフレームレートを低下させる可能性があります。画質が低下するモードについては、UI上にその旨を示すインジケーターを実装することを検討してください。