メインコンテンツまでスキップ

3.6.2. Interpreting imageattr Attributes (imageattr 属性の解釈)

3.6.2. Interpreting imageattr Attributes (imageattr 属性の解釈)

[RFC6236] は "a=imageattr" をアドバイザリーフィールドとして定義しています。これは, 送信側が使用できるビデオ形式を絶対的に制約するものではなく, 優先値の指示を与えることを意味します。

この仕様は, より具体的な動作を規定します。特定の解像度のビデオを生成している MediaStreamTrack ("トラック解像度") が, 同じまたはそれより低い解像度 ("エンコーダ解像度") でトラックビデオをエンコードする RtpSender に添付され, 送信側を参照し有効な "a=imageattr recv" 属性を含むリモート記述が適用された場合, 送信側が属性で指定されたサイズ基準を超える解像度を送信しないことを保証するために, 以下のルールに従わなければなりません。これらのルールは, トラックがその解像度を変更するか別のトラックに置き換えられる場合を含め, 属性がリモート記述に存在する限り従わなければなりません。

RtpSender の設定方法に応じて, 特定の解像度で単一のエンコーディングを生成している場合もあれば, シミュルキャスト (セクション 3.7) がネゴシエートされている場合は, それぞれが独自の特定の解像度を持つ複数のエンコーディングを生成している場合もあります。さらに, 設定に応じて, 各エンコーディングは必要に応じて解像度を下げる柔軟性を持つ場合もあれば, 特定の出力解像度にロックされている場合もあります。

RtpSender によって生成される各エンコーディングについて, リモート記述の対応する "m=" セクション内の "a=imageattr recv" 属性のセットが処理され, 何を送信すべきかが決定されます。エンコーディング用に選択されたメディア形式を参照する属性のみが考慮されます; このような各属性は, 最も高い "q=" 値を持つ属性から始めて個別に評価されます。複数の属性が同じ "q=" 値を持つ場合, それらを含む "m=" セクションに現れる順序で評価されます。JSEP エンドポイントはメディア形式ごとに最大 1 つの "a=imageattr recv" 属性を含むことに注意してください。ただし, JSEP エンドポイントは, このような複数の属性を含む "m=" セクションを持つ非 JSEP エンドポイントからセッション記述を受信する可能性があります。

各 "a=imageattr recv" 属性について, 以下のルールが適用されます。この処理が成功した場合, エンコーディングはそれに応じて送信され, そのエンコーディングについてそれ以上の属性は考慮されません。それ以外の場合, 前述の順序で次の属性が評価されます。提供されたすべての属性を正常に処理できない場合, エンコーディングを送信してはならず, アプリケーションにエラーを発生させる必要があります。

  • 属性からの制限がエンコーダ解像度と比較されます。以下に述べる特定の制限のみが考慮されます; 画像アスペクト比などの他の値は無視しなければなりません。回転したビデオを生成している MediaStreamTrack を考慮する場合, チェックには回転していない解像度を使用しなければなりません。これは, 受信側が受信側回転の実行をサポートしているかどうかに関係なく必要です (例えば, ビデオ方向調整 (CVO) [TS26.114] を通じて)。これにより, マッチングロジックが大幅に簡素化されます。

  • 属性に "1.0" 以外に設定された "sar=" (サンプルアスペクト比) 値が含まれている場合, 受信側が非正方形ピクセルを受信したいことを示しており, これは満たすことができず, 属性を使用してはなりません。

  • エンコーダ解像度が属性によって許可される最大サイズを超え, エンコーダがその解像度を調整できる場合, エンコーダは制限を満たすためにダウンスケーリングを適用する必要があります。ダウンスケーリングは, 丸めによるわずかな差異を無視して, エンコーディングの画像アスペクト比を変更してはなりません。たとえば, エンコーダ解像度が 1280x720 で, 属性が最大 640x480 を指定した場合, 予想される出力解像度は 640x360 になります。ダウンスケーリングを適用できない場合, 属性を使用してはなりません。

  • エンコーダ解像度が属性によって許可される最小サイズより小さい場合, 属性を使用してはなりません; エンコーダはアップスケーリングを適用してはなりません。JSEP 実装は, おそらくソフトウェアデコーダへのフォールバックを介して, 任意に小さい解像度の受信を許可することで, この状況を回避する必要があります。

  • エンコーダ解像度が最大サイズと最小サイズの範囲内にある場合, アクションは必要ありません。