捕获句柄——屏幕共享时引导协作

W3C 工作草案

关于本文档的更多详细信息
此版本:
https://www.w3.org/TR/2025/WD-capture-handle-identity-20250306/
最新发布版本:
https://www.w3.org/TR/capture-handle-identity/
最新编辑草案:
https://w3c.github.io/mediacapture-handle/identity/
历史:
https://www.w3.org/standards/history/capture-handle-identity/
提交历史
编辑:
Elad Alon (Google)
Jan-Ivar Bruaroey (Mozilla)
反馈:
GitHub w3c/mediacapture-handle (拉取请求, 新议题, 未关闭议题)

摘要

本文档提出了一种机制,通过该机制,如果 CAPTR 正在屏幕捕获 APP 运行所在的标签页,则应用 APP 可以选择向 另一个应用 CAPTR 暴露某些信息。它 描述了一种用于 标签页捕获窗口捕获的机制。

本文档状态

本节描述的是本文档在发布时的状态。当前 W3C 出版物列表以及本技术报告的最新修订版可在 W3C 技术 报告索引中找到,网址为 https://www.w3.org/TR/。

本文档尚未完成。

本文档由 Web 实时 通信工作组作为 工作草案发布,使用 推荐标准轨道

发布为工作草案并不 意味着获得 W3C 及其成员的认可。

这是一份草案文档,可能随时被其他文档更新、替换或废弃。 除了作为正在进行中的工作之外,不应引用本文档。

本文档由一个在 W3C 专利 政策下运作的小组制作。 W3C 维护着一份与该小组交付物相关的 任何专利披露的公开列表; 该页面还包括 披露专利的说明。实际 知晓某项专利,并且该个人认为该专利包含 必要权利要求的个人, 必须按照 W3C 专利政策第 6 节 披露该信息。

本文档受 2023 年 11 月 03 日 W3C 流程文档管辖。

1. 一致性

除了标记为非规范性的章节之外,本规范中的所有编写指南、图表、示例和注释都是非规范性的。 本规范中的其他所有内容都是规范性的。

本文档中的关键词 MUSTMUST NOT 应按 BCP 14 [RFC2119] [RFC8174] 中的描述来解释,但仅当它们如这里所示全部以大写形式出现时才如此。

2. 问题描述

2.1 通用问题描述

考虑一个在某个标签页中运行的 Web 应用,我们将其命名为“main_app”。 假定 main_app 调用 getDisplayMedia, 并且用户选择:

注意:

  1. main_app 不知道它正在捕获什么。
  2. captured_app 不知道自己正在被捕获,更不用说知道是被谁捕获。

对于一般情况而言,这两个特性都是可取的,但也存在合法的用例, 浏览器会希望允许应用选择加入,以弥合这一差距并 启用连接。

我们希望在保持一般情况与以往相同的同时,启用这些合法用例。

2.2 用例 #1:从视频会议应用驱动演示文稿

考虑一个协作的演示软件和视频会议软件。假定用户正在一个 VC 会话中。 用户开始共享一个演示文稿。两个应用都希望让 VC 应用发现它正在捕获一个幻灯片会话、 哪个应用,甚至哪个会话,以便 VC 应用能够向用户暴露用于翻阅幻灯片的控件。 当用户点击这些控件时,VC 应用将能够向演示应用发送消息,请求其执行 翻阅幻灯片、进入/离开演示模式等操作。

传输这些消息的手段不在本文档范围内。一些 选项包括:

2.3 用例 #2:分析

捕获应用通常希望收集有关其用户倾向于捕获哪些应用的统计信息。 例如,VC 应用希望知道其用户共享来自特定提供商的演示应用、 Wikipedia、CNN 等的频率。收集此类信息可用于通过引入新的 协作来改善用户服务,例如上文所描述的协作。

2.4 用例 #3: 检测非预期捕获

用户有时会选择共享错误的标签页。有时他们会因为误点“改为共享此标签页”按钮, 而切换为共享错误的标签页。一个善意的应用可以在认为用户可能犯错时, 通过显示应用内对话框来要求重新确认,从而尝试保护用户。

2.5 用例 #4:避免 “镜厅”效应

此用例是 #3 的一个子用例,但由于其重要性,值得单独成节。 当用户选择共享 VC 通话所在的标签页时,就会出现“镜厅”效应。 在检测到自我捕获时,VC 应用可以避免将被捕获的流再显示给用户, 从而避免这种令人不快的效应。

3. 捕获句柄机制

捕获句柄机制由两个主要部分组成:一个位于被捕获端,一个位于 捕获端。

4. 被捕获端

允许应用向捕获应用暴露信息。它们通常会在甚至不知道自己是否被捕获之前 这样做。所使用的机制是用适当的 CaptureHandleConfig 调用 setCaptureHandleConfig

4.1 CaptureHandleConfig

CaptureHandleConfig 字典用于指示用户代理:被捕获应用打算暴露哪些信息, 以及它愿意向哪些应用暴露上述信息。

WebIDLdictionary CaptureHandleConfig {
  boolean exposeOrigin = false;
  DOMString handle = "";
  sequence<DOMString> permittedOrigins = [];
};
exposeOrigin

如果为 true,用户代理 MUST 通过 CaptureHandleorigin 字段暴露被捕获 应用的 origin。如果为 false,用户代理 MUST NOT 暴露被捕获 应用的 origin。

handle

用户代理 MUST 将此值作为 handle 暴露。

注:此字段的值限制为 1024 个 16 位字符。此限制在 setCaptureHandleConfig 中有进一步规定。

permittedOrigins

此字段的有效值包括:

  • 空列表。
  • 包含单个项目 "*" 的列表。
  • 由有效 origin 组成的列表。

如果 permittedOrigins 由单个项目 "*" 组成,则该 CaptureHandle 对所有 捕获者都是可观察的。 否则,CaptureHandle 仅对 其 origin 列在 permittedOrigins 中的捕获者是可观察的

4.2 MediaDevices.setCaptureHandleConfig()

MediaDevices 扩展了一个方法——setCaptureHandleConfig—— 该方法接受一个 CaptureHandleConfig 对象。通过调用此方法,应用会告知用户代理它允许捕获应用观察哪些信息。

关于 setCaptureHandleConfig 在被调用多次时应如何表现,目前尚无共识,原因是担心它本身被误用为跨源 消息传递通道。此问题正在 议题 #11 中讨论。

WebIDLpartial interface MediaDevices {
  undefined setCaptureHandleConfig(optional CaptureHandleConfig config = {});
};
setCaptureHandleConfig

用户代理 MUST 运行以下验证:

如果所有验证都通过,则用户代理 MUST 接受新的 config。 用户代理 MUST 忘记之前对 setCaptureHandleConfig 的任何调用;从现在起, 应用的 CaptureHandleConfigconfig

将为所有捕获应用重新评估可观察的 CaptureHandle

  1. 对于每个捕获应用,如果新的可观察的 CaptureHandle 与调用 setCaptureHandleConfig 之前不同,则 用户代理 MUST 触发一个事件,其名称为 capturehandlechange
  2. 每当调用 getCaptureHandle 时,用户代理 MUST 报告新的可观察的 CaptureHandle

5. 捕获端

被允许观察某个轨道的 CaptureHandle 的捕获应用,有两种读取方式。

  1. 读取 getCaptureHandle 返回的当前值。
  2. oncapturehandlechange 注册一个 EventListener

5.1 CaptureHandle

用户代理通过 CaptureHandle 字典, 向捕获应用暴露有关被捕获应用的信息。注意, MUST NOTCaptureHandle 对象 提供给未被允许观察它的捕获应用。

WebIDLdictionary CaptureHandle {
  DOMString origin;
  DOMString handle;
};
origin

如果被捕获应用选择加入以暴露其 origin(通过将 exposeOrigin 设置为 true), 则用户代理 MUSTorigin 设置为被捕获 应用的 origin。否则, 不设置 origin

handle

用户代理 MUST 将此字段设置为被捕获 应用在 handle 中设置的值。

5.2 MediaStreamTrack.getCaptureHandle()

使用名为 getCaptureHandle 的方法扩展 MediaStreamTrack。 当 MediaStreamTrack 是从屏幕捕获派生的视频轨道时, getCaptureHandle 返回最新的 可观察的 CaptureHandle。 否则返回 null

关于 getCaptureHandle 应属于 MediaStreamTrack 还是属于一个既不可 克隆也不可 转移 的专用控制器对象,目前尚无共识;后者可将影响所有轨道的消息传递与 单条轨道的使用分离。此问题正在 议题 #12 中讨论。

WebIDLpartial interface MediaStreamTrack {
  CaptureHandle? getCaptureHandle();
};
getCaptureHandle

如果所讨论的轨道不是视频轨道,则用户代理 MUST 返回 null

如果该轨道不表示 browserwindow display surface, 则用户 代理 MUST 返回 null

如果该轨道已结束,则用户 代理 MUST 返回 null

如果被捕获应用未设置 CaptureHandleConfig,或者如果它最后一次 将其设置为空的 CaptureHandleConfig,则用户 代理 MUST 返回 null

用户代理 MUST 将捕获 document 的 origin 与被捕获 应用在 permittedOrigins 中列出的那些 origin 进行比较。如果该 捕获 origin 不被允许观察CaptureHandle, 则用户代理 MUST 返回 null

如果之前所有验证均通过,则用户代理 MUST 返回一个 CaptureHandle 字典,其值 派生自被捕获应用最后设置的 CaptureHandleConfig

5.3 变更时事件

5.3.1 capturehandlechange

每当给定捕获应用的可观察的 CaptureHandle 发生变化时, 用户代理都会触发一个名为 capturehandlechange 的事件。这可能发生在以下情况中:

  1. 被捕获应用用新的 CaptureHandleConfig 调用 setCaptureHandleConfig()。 (注意,新的 CaptureHandleConfig 可能会也可能不会 导致可观察的 CaptureHandle 发生变化,例如在更改 permittedOrigins 时。)
  2. 被捕获应用的顶级 浏览上下文发生跨 document 导航。
  3. 用户代理将轨道切换为跟随新的应用。

当轨道结束时,或在其 结束之后,不会触发事件。

5.3.2 oncapturehandlechange

MediaStreamTrack 扩展了一个名为 oncapturehandlechangeEventListener

WebIDLpartial interface MediaStreamTrack {
  attribute EventHandler oncapturehandlechange;
};
oncapturehandlechange

用于名为 capturehandlechange 的事件的 EventHandler

A. 参考文献

A.1 规范性参考文献

[dom]
DOM 标准。Anne van Kesteren。WHATWG。 现行标准。URL:https://dom.spec.whatwg.org/
[html]
HTML 标准。Anne van Kesteren; Domenic Denicola;Dominic Farolino;Ian Hickson;Philip Jägenstedt;Simon Pieters。WHATWG。现行标准。URL:https://html.spec.whatwg.org/multipage/
[mediacapture-streams]
媒体捕获和流。 Cullen Jennings;Bernard Aboba;Jan-Ivar Bruaroey;Henrik Boström;youenn fablet。W3C。2024 年 12 月 19 日。CRD。URL:https://www.w3.org/TR/mediacapture-streams/
[RFC2119]
RFC 中用于指示 要求级别的关键词。S. Bradner。IETF。1997 年 3 月。当前最佳实践。URL:https://www.rfc-editor.org/rfc/rfc2119
[RFC8174]
RFC 2119 关键词中大写与小写的歧义。B. Leiba。IETF。2017 年 5 月。当前最佳实践。URL:https://www.rfc-editor.org/rfc/rfc8174
[SCREEN-CAPTURE]
屏幕捕获。Jan-Ivar Bruaroey; Elad Alon。W3C。2025 年 2 月 13 日。W3C 工作草案。URL:https://www.w3.org/TR/screen-capture/
[WEBIDL]
Web IDL 标准。Edgar Chen;Timothy Gu。 WHATWG。现行标准。URL:https://webidl.spec.whatwg.org/

A.2 资料性参考文献

[GETUSERMEDIA]
媒体捕获和流。 Cullen Jennings;Bernard Aboba;Jan-Ivar Bruaroey;Henrik Boström;youenn fablet。W3C。2024 年 12 月 19 日。CRD。URL:https://www.w3.org/TR/mediacapture-streams/