Capture Handle - 画面共有時にコラボレーションをブートストラップする

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 (プルリクエスト, 新しい課題, 未解決の課題)

概要

この文書は、アプリケーション APP が実行されているタブを CAPTR が画面キャプチャしている場合に、アプリケーション APP が 特定の情報を別のアプリケーション CAPTR に公開することへオプトインできる仕組みを提案する。これは タブキャプチャ または ウィンドウキャプチャのための仕組みを説明する。

この文書のステータス

この節は、この文書の公開時点における ステータスを説明する。現在の W3C 公開文書の一覧と、この技術報告の最新改訂版は、 https://www.w3.org/TR/ にある W3C 技術 報告索引で確認できる。

この文書は完全ではない。

この文書は、Web Real-Time Communications Working Group により、 勧告トラックを用いた 作業草案として公開された。

作業草案としての公開は、 W3C およびその会員による支持を意味しない。

これは草案文書であり、いつでも他の文書によって更新、置換、または廃止される 可能性がある。この文書を進行中の作業以外のものとして引用することは 適切ではない。

この文書は、 W3C 特許 ポリシーの下で活動する グループによって作成された。 W3C は、 そのグループの成果物に関連して行われた 特許開示の公開リストを管理している。 そのページには、特許を開示するための 手順も含まれている。個人が、 必須クレームを含むとその個人が考える 特許について実際の知識を有する場合、 W3C 特許ポリシーの第 6 節に従って その情報を開示しなければならない。

この文書は、 2023年11月3日版 W3C プロセス文書に準拠する。

1. 適合性

非規範的と記された節と同様に、この仕様におけるすべての作成ガイドライン、図、例、および注記は非規範的である。この仕様のそれ以外のすべては規範的である。

この文書におけるキーワード MUST および MUST NOT は、 BCP 14 [RFC2119] [RFC8174] に記述されているように、かつここに示すようにすべて大文字で現れる場合に限り、解釈されるものとする。

2. 問題の説明

2.1 一般的な問題の説明

1 つのタブで実行されている Web アプリケーションを考え、それを "main_app" と呼ぶことにする。 main_appgetDisplayMedia を呼び出し、ユーザーが次のいずれかを選択すると仮定する:

次の点に注意されたい:

  1. main_app は何をキャプチャしているのかを知らない。
  2. captured_app は、自身がキャプチャされていることを知らない。まして誰にキャプチャされているかも知らない。

これら 2 つの性質は一般的な場合には望ましいが、ブラウザーがアプリケーションに、 その隔たりを埋めて接続を可能にすることへオプトインすることを許可したい正当なユースケースが存在する。

一般的な場合を従来どおりに保ちながら、正当なユースケースを可能にしたい。

2.2 ユースケース #1: ビデオ会議アプリからプレゼンテーションを操作する

協調するプレゼンテーションソフトウェアとビデオ会議ソフトウェアを考える。 ユーザーが VC セッション内にいると仮定する。ユーザーはプレゼンテーションの共有を開始する。 両方のアプリケーションは、VC アプリに、それがスライドセッションをキャプチャしていること、 どのアプリケーションであるか、さらにはどのセッションであるかを発見させることに関心がある。 これにより、VC アプリケーションはスライドをめくるためのコントロールをユーザーに公開できる。 ユーザーがそれらのコントロールをクリックすると、VC アプリはプレゼンテーションアプリにメッセージを送信し、 スライドをめくる、プレゼンテーションモードに入る/出る、などの処理を行うよう要求できる。

これらのメッセージを送信する手段は、この文書の範囲外である。選択肢には次のものがある:

2.3 ユースケース #2: 分析

キャプチャするアプリケーションは、多くの場合、ユーザーがどのようなアプリケーションを キャプチャする傾向にあるかについて統計を収集したいと考える。たとえば、VC アプリケーションは、 ユーザーが特定のプロバイダーのプレゼンテーションアプリケーション、Wikipedia、CNN などを どの程度の頻度で共有するかを知りたい。このような情報の収集は、上で述べたような新たな コラボレーションを導入することにより、ユーザー向けサービスの改善に利用できる。

2.4 ユースケース #3: 意図しないキャプチャの検出

ユーザーは誤ったタブを共有することがある。場合によっては、share-this-tab-instead ボタンを 誤ってクリックすることで、誤ったタブの共有に切り替えてしまうことがある。善意のアプリケーションは、 ユーザーが間違いを犯した可能性があると判断した場合、再確認のためにアプリ内ダイアログを表示して ユーザーを保護しようとすることができる。

2.5 ユースケース #4: 「鏡の間」の回避

このユースケースは #3 の下位ケースであるが、その重要性から独自の節に値する。 「鏡の間」効果は、ユーザーが VC 通話が行われているタブを共有することを選択した場合に発生する。 自己キャプチャを検出した場合、VC アプリケーションはキャプチャされたストリームをユーザーに表示し返すことを避け、 それにより恐れられる効果を回避できる。

3. Capture-Handle 機構

capture-handle 機構は、2 つの主要な部分、すなわち被キャプチャ側とキャプチャ側からなる。

4. 被キャプチャ側

アプリケーションは、キャプチャするアプリケーションに情報を公開することを許可される。 通常、それらは自身がキャプチャされているかどうかを知る前にそうする。 使用される機構は、適切な CaptureHandleConfig を指定して setCaptureHandleConfig を呼び出すことである。

4.1 CaptureHandleConfig

CaptureHandleConfig 辞書は、被キャプチャアプリケーションがどの情報を公開する意図であるか、 および当該情報をどのアプリケーションに公開してよいと考えているかを、ユーザーエージェントに指示するために用いられる。

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

true の場合、ユーザーエージェントは MUST、被キャプチャ アプリケーションのオリジンを origin フィールドを通じて CaptureHandle に公開しなければならない。 false の場合、ユーザーエージェントは MUST NOT、 被キャプチャアプリケーションのオリジンを公開してはならない。

handle

ユーザーエージェントは MUST、この値を handle として公開しなければならない。

注記: このフィールドの値は、1024 個の 16 ビット文字に制限される。この制限は、 setCaptureHandleConfig でさらに規定される。

permittedOrigins

このフィールドの有効な値には次のものが含まれる:

  • 空リスト。
  • 単一の項目 "*" を持つリスト。
  • 有効なオリジンからなるリスト。

permittedOrigins が単一の項目 "*" からなる場合、CaptureHandle はすべてのキャプチャ側から 観測可能である。 そうでない場合、CaptureHandle は、 そのオリジンが permittedOrigins に列挙されている キャプチャ側にのみ 観測可能である。

4.2 MediaDevices.setCaptureHandleConfig()

MediaDevices は、 setCaptureHandleConfig というメソッドで拡張される。 このメソッドは CaptureHandleConfig オブジェクトを受け取る。このメソッドを呼び出すことにより、アプリケーションは、 キャプチャするアプリケーションにどの情報を観測することを許可するかをユーザーエージェントに知らせる。

注記

setCaptureHandleConfig が複数回呼び出された場合にどのように振る舞うべきかについては、 それ自体がクロスオリジンメッセージングチャネルとして悪用される懸念があるため、まだ合意がない。 これは issue #11 で議論中である。

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

ユーザーエージェントは MUST、次の検証を実行しなければならない:

すべての検証に合格した場合、ユーザーエージェントは MUST 新しい config を受け入れなければならない。 ユーザーエージェントは MUSTsetCaptureHandleConfig への以前の呼び出しをすべて忘れなければならない。 以後、アプリケーションの CaptureHandleConfigconfig である。

観測可能な CaptureHandle は、すべての キャプチャアプリケーションについて再評価される。

  1. 新しい 観測可能な CaptureHandle が、setCaptureHandleConfig の呼び出し前と 異なるすべてのキャプチャアプリケーションについて、ユーザーエージェントは MUSTイベントを発火する。その名前は capturehandlechange である。
  2. ユーザーエージェントは MUSTgetCaptureHandle が呼び出されるたびに、新しい 観測可能な CaptureHandle を報告しなければならない。

5. キャプチャ側

トラックの CaptureHandle観測することを許可された キャプチャアプリケーションには、それを読み取る 2 つの方法がある。

  1. getCaptureHandle によって返される現在の値を読み取る。
  2. oncapturehandlechangeEventListener を登録する。

5.1 CaptureHandle

ユーザーエージェントは、CaptureHandle 辞書を通じて、 被キャプチャアプリケーションに関する情報をキャプチャアプリケーションへ公開する。 CaptureHandle オブジェクトは、 それを 観測することを許可されていないキャプチャアプリケーションに 渡されては MUST NOT ならない点に注意されたい。

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

被キャプチャアプリケーションが、自身のオリジンを公開することにオプトインしている場合 (exposeOrigin を true に設定することによる)、 ユーザーエージェントは MUSTorigin を 被キャプチャアプリケーションのオリジンに設定しなければならない。そうでない場合、 origin は設定されない。

handle

ユーザーエージェントは MUST、このフィールドを、 被キャプチャアプリケーションが handle に設定した値に 設定しなければならない。

5.2 MediaStreamTrack.getCaptureHandle()

MediaStreamTrackgetCaptureHandle というメソッドで拡張する。 MediaStreamTrack が画面キャプチャから派生したビデオトラックである場合、 getCaptureHandle は、最新の 観測可能な CaptureHandle を返す。 そうでない場合は null を返す。

注記

getCaptureHandleMediaStreamTrack 上に属するべきか、それとも単一トラックの消費から、すべてのトラックに影響するメッセージングを分離するために、 クローン可能でも 転送可能でもない 専用のコントローラーオブジェクト上に属するべきかについては、まだ合意がない。 これは issue #12 で議論中である。

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

問題のトラックがビデオトラックでない場合、ユーザーエージェントは MUST null を返さなければならない。

トラックが browser または window display surface のいずれも表していない場合、ユーザー エージェントは MUST null を返さなければならない。

トラックが 終了している場合、ユーザー エージェントは MUST null を返さなければならない。

被キャプチャアプリケーションが CaptureHandleConfig を設定していない場合、 または最後にそれを空の CaptureHandleConfig に設定した場合、ユーザー エージェントは MUST null を返さなければならない。

ユーザーエージェントは MUST、キャプチャ文書のオリジンを、 被キャプチャアプリケーションが permittedOrigins に列挙したものと 比較しなければならない。キャプチャ側のオリジンが CaptureHandle観測することを許可されていない場合、 ユーザーエージェントは MUST null を返さなければならない。

以前のすべての検証に合格した場合、ユーザーエージェントは MUST、 被キャプチャアプリケーションによって最後に設定された CaptureHandleConfig から派生した値を持つ CaptureHandle 辞書を返さなければならない。

5.3 変更時イベント

5.3.1 capturehandlechange

指定されたキャプチャアプリケーションに対する 観測可能な CaptureHandle が変化するたびに、 ユーザーエージェントは capturehandlechange という名前の イベントを発火する。これは次の場合に発生しうる:

  1. 被キャプチャアプリケーションが、新しい CaptureHandleConfig を指定して setCaptureHandleConfig() を呼び出す。(新しい CaptureHandleConfig は、 たとえば permittedOrigins を変更する場合など、 観測可能な CaptureHandle を変化させる場合もあれば、 そうでない場合もあることに注意されたい。)
  2. 被キャプチャアプリケーションの 最上位 閲覧コンテキスト がクロスドキュメントにナビゲートされる。
  3. ユーザーエージェントが、新しいアプリケーションを追跡するようにトラックを切り替える。

トラックが 終了するとき、またはそれが 終了した後には、イベントは発火されない。

5.3.2 oncapturehandlechange

MediaStreamTrack は、 oncapturehandlechange と呼ばれる EventListener で拡張される。

WebIDLpartial interface MediaStreamTrack {
  attribute EventHandler oncapturehandlechange;
};
oncapturehandlechange

EventHandler は、capturehandlechange という名前のイベント用である。

A. 参考文献

A.1 規範的参考文献

[dom]
DOM Standard. Anne van Kesteren. WHATWG. Living Standard. URL: https://dom.spec.whatwg.org/
[html]
HTML Standard. Anne van Kesteren; Domenic Denicola; Dominic Farolino; Ian Hickson; Philip Jägenstedt; Simon Pieters. WHATWG. Living Standard. URL: https://html.spec.whatwg.org/multipage/
[mediacapture-streams]
Media Capture and Streams. Cullen Jennings; Bernard Aboba; Jan-Ivar Bruaroey; Henrik Boström; youenn fablet. W3C. 2024年12月19日. 候補勧告草案. 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]
Screen Capture. Jan-Ivar Bruaroey; Elad Alon. W3C. 2025年2月13日. W3C 作業草案. URL: https://www.w3.org/TR/screen-capture/
[WEBIDL]
Web IDL Standard. Edgar Chen; Timothy Gu. WHATWG. Living Standard. URL: https://webidl.spec.whatwg.org/

A.2 参考情報的参考文献

[GETUSERMEDIA]
Media Capture and Streams. Cullen Jennings; Bernard Aboba; Jan-Ivar Bruaroey; Henrik Boström; youenn fablet. W3C. 2024年12月19日. 候補勧告草案. URL: https://www.w3.org/TR/mediacapture-streams/