ビデオ制約:希望解像度とフレームレートの設定

Vonage Video APIにより、パブリッシャはビデオの解像度とフレームレートに好みの制約を設定することで、ビデオストリームを最適化できます。これらの制約は、帯域幅の使用を管理し、デバイスの機能に対応し、加入者に合わせたユーザー体験を提供するのに役立ちます。

このガイドでは preferredResolution そして preferredFrameRate パブリッシャー向けのAPI。

注: これらのAPIは現在、JavaScript SDKでのみ利用可能です。他のSDKでのサポート予定は発表されていません。

概要

ビデオストリームを公開する際、帯域幅の節約、UI要件との整合、または特定の加入者ロール(サムネイルや低モーション画面など)のリソース消費の制限など、さまざまな理由でビデオ品質を動的に調整したい場合があります。VonageのパブリッシャーAPIは、ビデオトラックの好ましい解像度とフレームレートを調整するメソッドを公開しています。これらの制約は、最適な結果を得るために標準的な WebRTC API を使用してビデオ入力デバイスに強制されますが、最終的にはすべての加入者が受信するものに影響します。

ビデオ解像度とフレームレートの制御

出版社が指定できる:

  • 望ましい解像度:ビデオストリームに必要な幅と高さ(ピクセル単位)。
  • 希望フレームレート:ビデオストリームの希望フレーム数(fps)。

以下の方法で動的に制御できます。 その後 パブリッシャーが初期化されます:

// Set preferred resolution (width x height)
await publisher.setPreferredResolution({ width: 640, height: 360 });

// Set preferred frame rate
await publisher.setPreferredFrameRate(15);

これらの設定は、パブリッシャーから出力されるビデオトラックを直接制御し、すべての加入者の品質に影響を与えます。しかし、実際のネットワーク状況やデバイスの能力によって、これらの値が制限されたり、上書きされたりすることがあります。

優先解像度の設定

方法だ: publisher.setPreferredResolution(preferredResolution)

  • preferredResolution を持つオブジェクトである。 width そして height プロパティ(いずれもピクセル単位の正の整数)。
  • 解像度は、最初に公開した解像度より大きくすることはできません。例えば、640×480で公開した場合、それ以上の解像度を設定することはできません。

典型的な用途:

publisher.setPreferredResolution({ width: 320, height: 240 });

検証:

  • ビデオをキャプチャしているパブリッシャー (publishVideo: true).
  • 両方 width そして height は正の整数でなければならない。
  • 解像度は、最初のパブリッシング解像度より大きくすることはできない。

エラー事例:

  • 音声のみのパブリッシャーで呼ばれた場合、または入力値が無効な場合にスローされます。

優先フレームレートの設定

方法だ: publisher.setPreferredFrameRate(frameRate)

  • frameRate は1以上の整数でなければならない。

典型的な用途:

publisher.setPreferredFrameRate(15);

検証:

  • ビデオトラックがアクティブなパブリッシャーからコールされなければならない。
  • フレームレートは1以上の整数でなければならない。

エラー事例:

  • 音声のみのパブリッシャーで呼ばれた場合、または frameRate が無効な場合にスローされます。

ベストプラクティス

  • 理想的な解像度とフレームレートが事前に分かっている場合は、パブリッシャー作成時に以下の方法で設定してください。 OT.initPublisher() (例えば resolution そして frameRate).購読者の場合は、これらの設定を省略するか、または preferredResolution: 'auto' を呼び出すと Session.subscribe().
  • サブスクライバーAPI (subscriber.setPreferredResolution() / subscriber.setPreferredFrameRate()) を使用して、1 人のサブスクライバがストリームを受信/デコード/レンダリングする方法を変更できます。これは、そのサブスクライバにのみ影響し、パブリッシャが送信する内容や他のサブスクライバが受信する内容は変更されません。
  • パブリッシャーAPI (publisher.setPreferredResolution() / publisher.setPreferredFrameRate()) を使用して、パブリッシャーが送信する内容を変更します。これはそのストリームのすべての購読者に影響し、購読者は自動的に更新された設定を受け取ります。パブリッシャーの解像度を下げたい場合は preferredResolution というメソッドがある:
    • CPUの制限やネットワークの問題など、パブリッシャーデバイスが苦戦していることに気づき、WebRTCスタックが通常行うよりも迅速に負担を軽減したい場合。
    • デバイスのバッテリー残量が少なく、通話時間を延ばすために電力消費を最小限に抑えたい場合。
    • 同じデバイスから画面共有を開始したり、追加のパブリッシャーを起動したりする際に、それらのアクティビティのために計算リソースを解放する必要がある場合。
  • パブリッシャの優先解像度/フレーム・レートは、パブリッシャの初期化時に指定された値を超えることはありません。必要な最大解像度とフレーム・レートを指定してパブリッシャを初期化し、使用するケースに応じてこれらの制限内で動的に解像度を下げたり上げたりしてください。
  • 例えば、コンテンツに適したフレームレートを選択する:
    • 静的なスライド、ダッシュボード、動きの少ない画面、または帯域幅の使用を最小限に抑える場合は5fps。
    • 低モーション画面や帯域幅が重視されるシナリオのための15fps
    • フルモーションビデオや高画質要求のための30fps
  • ネットワークの状況により、SDKが希望の解像度とフレームレートを維持できない場合があります。帯域幅やCPUが制限された場合、SDKは自動的に公開/サブスクライブされたビデオ品質を低下させることがあります(たとえば、1080pのプリファレンスは、ネットワークの状態が悪いときに一時的に低い解像度に低下することがあります)。
  • 優先解像度とフレームレートは現在、JavaScript SDKでのみ利用可能です。他のSDKにこの機能を追加する予定はありません。

特記事項

  • あなたが設定した制約は、次のことに影響する。 全加入者 をローカルUIだけでなく、ストリームにも適用する。
  • ネットワークとバックエンドは、現在の接続の健全性と利用可能な帯域幅に基づいて、最終的に配信される実際のビデオ品質を決定します。
  • これらのAPIはJavaScript SDKでのみ利用可能であり、他のSDKは現時点では動的なVideo制約の変更をサポートしていません。

その他のリソース