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 流程文档管辖。
用于处理语音和音乐的算法差异很大。 为语音类型内容开发的回声消除算法可能无法 很好地处理音乐,而噪声抑制算法可能会移除小军鼓声 或其他“噪声型”内容。虽然这会让语音更易懂, 但对音乐信号来说并不太合适。
对于视频,网络摄像头内容通常需要去噪,并且即使被缩小或 使用较高量化级别时也通常仍可辨识。 对包含大量文本内容的演示文稿或网页的屏幕录制内容而言, 如果量化级别过高,或内容被缩小或因其他原因变得模糊, 则完全无法辨识。
在没有媒体内容自动检测的情况下,MediaStreamTrack
使用方只能进行有根据的猜测。该猜测可能基于这样的
假设:屏幕录制内容,例如
chrome.desktopCapture,包含文本内容,因此必须使用较低
量化级别,并大量丢弃帧以满足比特率
要求。另一种假设是,常规 USB 视频设备提供的是
网络摄像头视频,因此较高量化级别和缩小是
可接受的。
虽然这种有根据的猜测通常是合适的,但当其不正确时, 会导致次优设置。这表现为:在屏幕录制高运动内容(例如电影) 或流式传输视频游戏并将其当作文本处理时,会出现大量丢帧。 另一方面,将高度细节化的内容当作常规 网络摄像头视频处理,则会在为满足比特率 要求而进行量化或缩小时,导致内容过于模糊而无法阅读。 当 HDMI 视频采集卡被视为 USB 网络摄像头,但实际上正在屏幕录制 网页文本时,也可能发生这种不匹配。
在某些情况下,Web 应用可以作出更有根据的猜测,或获取 用户输入,以告知使用方正在编码的是哪类内容。一个 流式传输视频游戏内容的 Web 应用,能够以牺牲单个帧细节为代价, 保留桌面采集中的运动。一个 音乐工作室应用,能够防止噪声抑制从音乐轨道中 移除小军鼓声。
这些设置并不打算完全取代编码器级别的设置, 而是以一种更简单的提示来补充它们;这种提示不需要 对视频编码器、音频处理步骤或 更广泛的调优有广泛了解。
本规范的单独一节描述了 处理 MediaStreamTrack 的特定组件的预期行为。
除了标记为非规范性的章节外,本规范中的所有创作指南、图示、示例和注释均为非规范性的。 本规范中的其他所有内容均为规范性的。
本文档中的关键词 MAY、MUST、SHOULD 和 SHOULD NOT 应按 BCP 14 [RFC2119] [RFC8174] 中所述进行解释,且仅当它们如这里所示以 全部大写形式出现时才如此。
WebIDLpartial interface MediaStreamTrack {
attribute DOMString contentHint;
};
本规范扩展了 MediaStreamTrack
并使用
其 kind
属性,如 [GETUSERMEDIA] 中所定义。
每个 MediaStreamTrack
都有一个关联的 应用设置的
内容提示,其初始值为 "",表示未设置。
此 应用设置的内容提示对应于 MediaStreamTrack
的
contentHint 属性,
Web 应用可使用该属性提供一个提示,说明轨道中包含
哪种类型的内容,以指导
MediaStreamTrack
使用方应如何处理它。
应用设置的内容提示的有效值取决于所包含
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" |
应将该轨道视为包含运动很 重要的视频。这通常是网络摄像头视频、电影或视频游戏。 为了尽可能保留运动,同时仍保持目标 比特率,量化伪影和缩小是可接受的。 在低比特率期间必须作出折中时,会把更多 精力用于保留帧率,而不是边缘质量和细节。 |
"detail" |
应将该轨道视为视频细节格外重要。 这通常适用于包含文本内容的演示文稿或网页、 绘画或线条艺术。此设置通常会优化 最终单个帧中的细节,而不是平滑播放。 应避免会使小文本或线条 艺术无法辨识的量化或缩小伪影。 |
"text" |
应将该轨道视为视频细节格外重要,
且明显锐利边缘和颜色一致的区域可能
经常出现。
这通常适用于包含文本
内容的演示文稿或网页。此设置通常会优化
最终单个帧中的细节,而不是平滑
播放,并且可以利用针对
文本渲染优化的编码器工具。
应避免会使小文本
或线条艺术无法辨识的量化或缩小伪影。
|
在为 MediaStreamTrack
设置 contentHint 值时,
UA MUST 按如下方式应用默认值:
"music" 的音频轨道,
以及约束
echoCancellation、autoGainControl 和 noiseSuppression,
应用默认值 "false"。"speech" 的音频轨道,
以及约束
echoCancellation 和 autoGainControl,应用默认值
"true"。"speech-recognition"
的音频轨道,
以及
约束 echoCancellation、autoGainControl 和 noiseSuppression,
应用默认值 "false"。要对约束 c 应用 默认值 且值为 t,执行以下步骤:
每当随后运行“apply constraints”算法时, 如果所记住的值 t 此时是允许值, UA MUST 选择该值。
在设置
contentHint 的值为
"" 时,会移除
t 的所有已记住值。
在编码视频时,编码器会配置多个 参数;在本文中,我们会特别指出分辨率、帧率和 “编码参数”;后者是实现定义的,但可以 同时影响结果视频的质量、编码所需的资源, 以及视频消耗的比特率。这里,我们 将其描述为较高值会带来更好质量,但也带来更高 比特率。通常,UA 会尝试最大化所有这些参数,以提供 最佳用户体验。
当某些约束(带宽、CPU)阻止使用最 佳参数进行编码时,编码器必须选择如何修改 编码参数。在不受限制的场景中,较高分辨率和 帧率可带来更高质量,但如果带宽受限, 降低帧率和分辨率在许多情况下可以允许以某种方式调整编码 参数,使得在给定目标比特率下整体视频质量 得到提升。
本节定义用于描述该选择的术语,以及一个 可在 API 中用于指示该选择的 enum。
WebIDLenum RTCDegradationPreference {
"maintain-framerate",
"maintain-resolution",
"balanced",
"maintain-framerate-and-resolution"
};
| 枚举值 | 描述 |
|---|---|
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,如果该
MediaStreamTrack 已设置
contentHint 属性,则
MUST 使用以下降级偏好,除非发送方
参数中已设置显式的
degradationPreference
属性:
"motion" 的视频轨道,
使用 "maintain-framerate"。
"detail" 的视频轨道,
使用 "maintain-resolution"。
"text" 的视频轨道,
使用 "maintain-resolution"。
此外,如果
编码编解码器是 AV1,则激活用于 "text" 模式的编码工具。
对于属性值为 "text" 的视频轨道,如果
编码编解码器是 AV1,则激活用于 "text"
模式的编码工具。
本规范添加了一个 API,用户可以通过该 API 向 用户代理发送信息。此信息不会被 传送到其他地方,也不会被存储在任何永久 位置。
通过探测此 API,客户端可能获得一些关于 用户代理如何实现本规范的信息,这可能让其 对用户代理的配置有所了解。除此之外, 不会通过此 API 向客户端暴露任何用户代理 信息或数据,并且该 API 不会提供对浏览器 UI 的任何访问, 不会影响用户代理的安全特性,也不会影响 临时标识符的生成。
此 API 不区分第一方、第三方 或隐身上下文;它在所有这些 情况下都表现相同。
使用此 API 不会处理任何个人身份信息或其他 敏感信息。
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in: