Copyright © 2025 World Wide Web Consortium. W3C® liability, trademark and permissive document license rules apply.
この仕様は MediaStreamTrack
を拡張し、
完全な再現に十分なリソースを利用できない場合にメディアを
どのように扱うべきかについてのユーザーの選好を示す
任意のヒントを提供します。
この任意のヒントにより、
MediaStreamTrack
のシンク、たとえば RTCPeerConnection
([webrtc] で定義) または MediaRecorder
([mediastream-recording] で定義) のように、トラックの音声または
映像
コンテンツを処理するものが、ユーザーの選好に適した処理パラメーターを
選択できるようになります。
このセクションは、この 文書の公開時点におけるステータスを説明します。現在の W3C 公開物およびこの技術報告書の最新改訂の一覧は、 W3C 標準および草案 インデックスで確認できます。
この文書は、Web リアルタイム コミュニケーション作業部会により、 勧告トラックを用いた 作業草案として公開されました。
作業草案としての公開は、 W3C およびそのメンバーによる支持を意味するものではありません。
これは草案文書であり、いつでも他の文書により更新、置換、または廃止される可能性があります。 この文書を作業中のもの以外として引用することは適切ではありません。
この文書は、 W3C 特許 ポリシー の下で運営されているグループによって作成されました。 W3C は、 グループの成果物に関連して行われた 特許開示の公開一覧 を維持しています。このページには、 特許を開示するための手順も含まれています。個人が、 必須クレーム を含むとその個人が信じる特許について実際の知識を有する場合、 W3C 特許ポリシー第6節 に従ってその情報を開示しなければなりません。
この文書は、 2025年8月18日版 W3C プロセス文書 によって管理されます。
音声および音楽を処理するために使用されるアルゴリズムは大きく異なります。 音声タイプのコンテンツ向けに開発されたエコーキャンセルアルゴリズムは、 音楽ではうまく機能しない可能性があり、ノイズ抑制アルゴリズムはドラムの スネアやその他の「ノイズの多い」コンテンツを除去してしまう可能性があります。 これは音声をより明瞭にしますが、音楽信号にはあまり適していません。
映像については、Web カメラのコンテンツは多くの場合ノイズ除去を必要とし、 ダウンスケールされた場合や高い量子化レベルの場合でも、多くの場合 判別可能です。テキストコンテンツが多いプレゼンテーションまたは Web ページの スクリーンキャストコンテンツは、量子化レベルが高すぎる場合、または コンテンツがダウンスケールされるか、その他の方法でぼやける場合、 完全に判別不能になります。
メディアコンテンツの自動検出がない場合、MediaStreamTrack
コンシューマーは、経験に基づく推測しかできません。この推測は、
chrome.desktopCapture のようなスクリーンキャストコンテンツには
テキストコンテンツが含まれており、低い量子化レベルを使用し、
ビットレート要件を満たすために大幅にフレームをドロップする必要がある、
という仮定に基づく場合があります。別の仮定として、通常の USB 映像デバイスは
Web カメラ映像を提供し、より高い量子化レベルとダウンスケーリングが
許容可能である、というものがあります。
この経験に基づく推測は通常は適切ですが、誤っている場合には最適でない 設定につながります。これは、映画やビデオゲームのストリーミングなどの 高モーションコンテンツをスクリーンキャストし、それをテキストとして扱う場合に、 高いフレームドロップとして現れます。一方で、非常に詳細なコンテンツを通常の Web カメラ映像として扱うと、ビットレート要件を満たすために可読性を超えて 量子化またはダウンスケールされたときに、コンテンツがぼやけすぎます。 この不一致は、HDMI 映像キャプチャカードが USB Web カメラとして認識されるが、 実際には Web ページのテキストをスクリーンキャストしている場合にも発生する可能性があります。
場合によっては、Web アプリケーションがより精度の高い推測を行うか、 ユーザー入力を受け取って、どの種類のコンテンツがエンコードされているかを コンシューマーに通知できます。ビデオゲームコンテンツをストリーミングする Web アプリケーションは、個々のフレームの詳細を犠牲にして、デスクトップキャプチャの 動きを保持できます。音楽スタジオアプリケーションは、ノイズ抑制が音楽トラックから スネアを除去することを防ぐことができます。
これらの設定は、エンコーダーレベルの設定を完全に置き換えることを意図したものではなく、 映像エンコーダー、音声処理ステップ、またはより広範なチューニングについての 幅広い知識を必要としない、より単純なヒントで補完することを意図しています。
この仕様の別のセクションでは、MediaStreamTrack を処理する特定の コンポーネントに期待される動作を説明します。
非規範的としてマークされたセクションと同様に、この仕様内のすべての作成ガイドライン、図、例、および注記は非規範的です。それ以外のすべては規範的です。
この文書におけるキーワード MAY、MUST、SHOULD、 および SHOULD NOT は、 ここに示すようにすべて大文字で出現する場合に限り、 BCP 14 [RFC2119] [RFC8174] で説明されているように解釈されます。
WebIDLpartial interface MediaStreamTrack {
attribute DOMString contentHint;
};
この仕様は MediaStreamTrack
を拡張し、[GETUSERMEDIA] で定義される
その kind
属性を利用します。
各 MediaStreamTrack
には、関連付けられた アプリケーション設定
コンテンツヒント があり、これは初期状態では "" であり、未設定であることを示します。
この アプリケーション設定コンテンツヒント は、
MediaStreamTrack
の contentHint 属性に対応し、トラック内に
含まれるコンテンツの種類についてのヒントを提供し、
MediaStreamTrack
コンシューマーによってどのように扱われるべきかを導くために、
Web アプリケーションによって使用できます。
アプリケーション設定コンテンツヒントの有効な値は、含まれる
MediaStreamTrack
の kind
に依存します。
contentHint を value に設定する際は、
MediaStreamTrack
の
kind
属性が
"audio" であり、かつ value が ""、
"speech"、"speech-recognition"、または "music"
のいずれでもない場合、これらの手順を中止します。
MediaStreamTrack
の
kind
属性が
"video" であり、かつ value が ""、
"motion"、"detail" または "text"
のいずれでもない場合、これらの手順を中止します。
MediaStreamTrack
の
アプリケーション設定コンテンツヒントを
value に設定します。
MediaStreamTrack
のコンテンツをどのように扱うかについての判断を、そのアプリケーション設定
コンテンツヒントの新しい値に従って適応させるべきです。この適応は、合理的に
可能な限り迅速に、たとえば次の数個のキャプチャされた映像フレームまたは
音声バッファー内で行われるべきです。
contentHint を取得する際は、
MediaStreamTrack
の
アプリケーション設定コンテンツヒント
を返します。
アプリケーション設定コンテンツヒントの初期値は
"" であり、これはヒントが提供されていないことに対応する点に注意してください。
含まれるコンテンツの種類についての実装の最善の推測が既定値になるわけではありません。
音声コンテンツヒントは、MediaStreamTrack
が音声トラックを含む場合にのみ適用されます。
| 音声コンテンツヒント | |
|---|---|
"" |
ヒントは提供されていません。実装は、含まれる音声データをどのように扱うかについて 最も情報に基づいた推測を行うべきです。これは、トラックがどのように開かれたか、 またはコンテンツ分析を行うことから推論される場合があります。 |
"speech" |
トラックは、音声データを含むものとして扱われるべきです。この信号を 消費する際には、ノイズ抑制を適用したり、入力信号の明瞭性を 高めたりすることが適切な場合があります。 |
"speech-recognition" |
トラックは、機械による音声認識を目的としたデータを含むものとして 扱われるべきです。この信号を消費する際には、文字起こしのために 入力信号の明瞭性を高め、人間による聴取に使用される音声処理 コンポーネントをオフにすることが適切な場合があります。 |
"music" |
トラックは、音楽データを含むものとして扱われるべきです。一般にこれは、 音声データを処理するために使用される音声処理コンポーネントを チューニングする、またはオフにして、音声が歪まないようにすることを 意味する場合があります。 |
映像コンテンツヒントは、MediaStreamTrack
が映像トラックを含む場合にのみ適用されます。
| 映像コンテンツヒント | |
|---|---|
"" |
ヒントは提供されていません。実装は、含まれる映像コンテンツをどのように 扱うべきかについて、最も情報に基づいた推測を行うべきです。 これは、たとえばトラックがどのように開かれたか、または コンテンツ分析を行うことから推論できます。 |
"motion" |
トラックは、動きが重要な映像を含むものとして扱われるべきです。 これは通常、Web カメラ映像、映画、またはビデオゲームです。 対象ビットレートを維持しながら可能な限り動きを保持するために、 量子化アーティファクトおよびダウンスケーリングは許容可能です。 妥協が必要な低ビットレート時には、エッジ品質および詳細よりも、 フレームレートの保持により多くの労力が費やされます。 |
"detail" |
トラックは、映像の詳細が特に重要であるかのように扱われるべきです。 これは一般に、テキストコンテンツを含むプレゼンテーションまたは Web ページ、絵画、または線画に適用できます。この設定は通常、 滑らかな再生よりも、結果として得られる個々のフレームの詳細に 最適化します。小さなテキストまたは線画を判読不能にする 量子化またはダウンスケーリングによるアーティファクトは避けるべきです。 |
"text" |
トラックは、映像の詳細が特に重要であり、
重要な鋭いエッジと一貫した色の領域が
頻繁に発生しうるものとして扱われるべきです。
これは一般に、テキストコンテンツを含むプレゼンテーションまたは
Web ページに適用できます。この設定は通常、
滑らかな再生よりも、結果として得られる個々のフレームの
詳細に最適化し、テキストレンダリングに最適化する
エンコーダーツールを利用する場合があります。
小さなテキストまたは線画を判読不能にする
量子化またはダウンスケーリングによるアーティファクトは
避けるべきです。
|
contentHint 値を MediaStreamTrack
に設定する場合、
UA は、次のように MUST デフォルトを適用する:
"music" を持つ音声トラックについて、
かつ制約
echoCancellation、autoGainControl および noiseSuppression については、
デフォルトとして "false" を適用します。"speech" を持つ音声トラックについて、
かつ制約
echoCancellation および autoGainControl については、
デフォルトとして "true" を適用します。"speech-recognition"
を持つ音声トラックについて、
かつ制約 echoCancellation、autoGainControl、および noiseSuppression については、
デフォルトとして "false" を適用します。制約 c に値 t で デフォルトを 適用するには、次の手順を実行します:
その後「apply constraints」アルゴリズムが実行されるたびに、 UA は、現在許可された値である場合、記憶された値 t を MUST 選択する。
"" の contentHint 値を設定する場合、
記憶されたすべての
t の値は削除されます。
映像をエンコードする際、エンコーダーは多数のパラメーターで構成されます。 このテキストでは、解像度、フレームレート、および「エンコードパラメーター」を 取り上げます。後者は 実装定義ですが、 結果として得られる映像の品質、エンコードに必要なリソース、 および映像が消費するビットレートの両方に影響を与える可能性があります。 ここでは、値が高いほど品質が高くなるが、ビットレートも高くなるものとして扱います。 通常、UA は最適なユーザー体験を提供するために、それらすべてを最大化しようとします。
何らかの制約(帯域幅、CPU)により最良のパラメーターでのエンコードが 妨げられる場合、エンコーダーはエンコードパラメーターをどのように変更するかを 選択しなければなりません。制限のないシナリオでは、より高い解像度と フレームレートによってより高い品質が可能になりますが、帯域幅が制限されている場合、 フレームレートと解像度を下げることで、多くの場合、指定された目標ビットレートに対して 全体的な映像品質が向上するようにエンコードパラメーターを調整できます。
このセクションでは、その選択を説明する用語と、 API でその選択を示すために使用できる enum を定義します。
WebIDLenum RTCDegradationPreference {
"maintain-framerate",
"maintain-resolution",
"balanced",
"maintain-framerate-and-resolution"
};
| Enum 値 | 説明 |
|---|---|
maintain-framerate |
フレームレートを維持するために解像度を劣化させます。ユーザー エージェントは、ネットワーク制約内で映像品質およびパフォーマンスを 最適化するために、解像度を下げることを SHOULD 優先する。 |
maintain-resolution |
解像度を維持するためにフレームレートを劣化させます。ユーザー エージェントは、ネットワーク制約内で映像品質およびパフォーマンスを 最適化するために、フレームレートを下げることを SHOULD 優先する。 |
balanced |
フレームレートと解像度をバランスよく劣化させます。ユーザーエージェントは、 ネットワーク制約内で映像品質およびパフォーマンスを最適化するために、 フレームレートと解像度をバランスよく下げることを SHOULD 優先する。 |
maintain-framerate-and-resolution |
映像品質にかかわらず、フレームレートと解像度を維持します。 ユーザーエージェントは、品質およびパフォーマンス上の理由で フレームレートまたは解像度を下げることを SHOULD NOT 優先するが、ネットワークおよび エンコーダーリソースを過剰使用しないために必要であれば、 エンコード前にフレームをドロップしても MAY よい。 |
RTCRtpSendParameters には、
これを RTCRtpSender に対して
明示的に示すことを可能にする属性が定義されています:
WebIDLpartial dictionary RTCRtpSendParameters {
RTCDegradationPreference degradationPreference;
};
RTCRtpSendParameters
の新しいメンバーdegradationPreference
型は
RTCDegradationPreference。
帯域幅が制約され、
RTCRtpSender
が解像度を劣化させるかフレームレートを劣化させるかを
選択する必要がある場合、
degradationPreference
はどちらが優先されるかを示します。
MediaStreamTrack
を送信する RTCRtpSender は、
その contentHint 属性が設定されている場合、
送信者のパラメーターで明示的な
degradationPreference
属性が設定されていない限り、次の劣化選好を
MUST 使用する:
"motion" を持つ映像トラックについては、
"maintain-framerate"
を使用します。
"detail" を持つ映像トラックについては、
"maintain-resolution"
を使用します。
"text" を持つ映像トラックについては、
"maintain-resolution"
を使用します。
さらに、エンコードコーデックが AV1 である場合、"text" モード用のエンコードツールを有効化します。
属性値 "text" を持つ映像トラックについて、
エンコードコーデックが AV1 である場合、"text"
モード用のエンコードツールを有効化します。
この仕様は、ユーザーがユーザーエージェントに情報を送信できる API を追加します。 この情報は他の場所には通信されず、永続的な場所にも保存されません。
この API を調査することで、クライアントはユーザーエージェントがこの仕様を どのように実装しているかについていくらかの情報を得る可能性があり、 それによりその構成についての何らかの洞察が得られる可能性があります。 これを除けば、この API を通じてユーザーエージェントの情報またはデータが クライアントに公開されることはなく、この API はブラウザー UI へのアクセス、 ユーザーエージェントのセキュリティ特性への影響、または一時識別子の生成を 可能にするものではありません。
この API は、ファーストパーティ、サードパーティ、またはシークレットコンテキストを 区別しません。これらすべての場合に同一に動作します。
個人を識別可能な情報、またはその他の機微な情報は、 この API の使用を通じて扱われません。
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in: