ビューポートキャプチャ

W3C 作業草案

この文書の詳細
このバージョン:
https://www.w3.org/TR/2024/WD-mediacapture-viewport-20241009/
最新公開バージョン:
https://www.w3.org/TR/mediacapture-viewport/
最新の編集者草案:
https://w3c.github.io/mediacapture-viewport/
履歴:
https://www.w3.org/standards/history/mediacapture-viewport/
コミット履歴
編集者:
Elad Alon (Google)
Jan-Ivar Bruaroey (Mozilla)
Tove Petersson (Google)
フィードバック:
GitHub w3c/mediacapture-viewport (プルリクエスト, 新しいイシュー, 未解決のイシュー)
public-webrtc@w3.org へ、件名行を [mediacapture-viewport] … メッセージのトピック … として送信してください(アーカイブ
参加
メーリングリスト

概要

この文書は、Screen Capture API [screen-capture] の拡張である getViewportMedia を使用して、ブラウザーのビューポートをメディアストリームのソースとして使用する方法を定義します。

この文書の位置付け

この節では、公開時点におけるこの 文書の位置付けについて説明します。現在の W3C 公開文書の一覧およびこの技術報告書の最新リビジョンは、 https://www.w3.org/TR/ にある W3C 技術 報告書インデックスで確認できます。

この文書は完成していません。

この文書は、Web Real-Time Communications Working Group によって、 Recommendation トラックを使用する 作業草案として公開されました。

作業草案としての公開は、 W3C およびそのメンバーによる承認を意味するものではありません。

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

この文書は、 W3C Patent Policy の下で運営されるグループによって作成されました。 W3C は、当該グループの成果物に関連して行われた 特許開示の公開リスト を維持しています。そのページには、 特許を開示するための手順も含まれています。ある個人が、 Essential Claim(s) を含むと当該個人が考える特許について実際の知識を有している場合、その個人は W3C Patent Policy 第6節に従って その情報を開示しなければなりません。

この文書は、 2023年11月03日 W3C Process Document によって規定されます。

1. 序論

この節は非規範的です。

この文書は、Screen Capture API [screen-capture] の拡張について説明します。この拡張は、 ブラウザーのビューポート(現在のタブ)を動画トラックの形式で取得できるようにします。場合によっては、タブの音声も 音声トラックの形式でキャプチャされます。これにより、進行中の WebRTC [WEBRTC] ビデオ会議を録画する、またはビデオ会議中のユーザーがプレゼンテーションを ピッカーで探す必要なく、 代わりにプレゼンテーションアプリケーション内のボタンをクリックして共有する、といったユースケースが可能になります。

この機能は、「cross-origin isolated」な文書でのみ利用できます。これにより、アプリケーションがこの API を使用して他のオリジンからの潜在的に機密性の高い情報や、ユーザーエージェントのサンドボックスが提供する保護によって アクセス不能なままであるべきコンテンツへアクセスすることを防ぎます。

この機能にはセキュリティ上の影響があり、許可プロンプトが必要です。レンダリングされたビューポートを共有すると、 閲覧履歴(リンクの紫色表示を通じて)、住所や 支払い情報のような個人情報(フォームの自動入力のようなユーザーエージェントまたは Web 拡張機能を通じて)、または個人設定 (フォントサイズなど) といったユーザー情報が露出する可能性があります。

2. 適合性

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

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

この仕様は、単一の製品、すなわちこの仕様に含まれるインターフェイスを実装する ユーザー エージェントに適用される適合基準を定義します。

この仕様で定義される API を実装するために ECMAScript [ECMA-262] を使用する実装は、 Web IDL 仕様 [WEBIDL] で定義される ECMAScript Bindings と整合する方法で、 それらを実装しなければなりません。これは、この仕様がその仕様および 用語を使用しているためです。

3.

次の例は、この文書で定義される navigator.mediaDevices.getViewportMedia メソッドを使用してビューポートキャプチャを要求する方法を示しています。

try {
  const stream = await navigator.mediaDevices.getViewportMedia();
  videoElement.srcObject = stream;
} catch (e) {
  console.log('Unable to acquire viewport capture: ' + e);
}

4. 用語

この文書は、[GETUSERMEDIA] からの MediaStreamMediaStreamTrackMediaStreamConstraints および ConstrainablePattern の定義、ならびに [screen-capture] からの display surface および browser display surface の定義を使用します。

5. ビューポートメディアのキャプチャ

ビューポートのキャプチャは、 getViewportMedia メソッドを MediaDevices インターフェイスに新たに追加することによって可能になります。このメソッドは getDisplayMedia() に似ていますが、 ピッカーをユーザーに提示する代わりに許可プロンプトを使用して、最上位文書のビューポート(現在のタブ)のみを キャプチャします。セキュリティ上の理由により、document-policy でオプトインした 「cross-origin isolated」な文書からのみ動作します。

5.1 MediaDevices の追加

WebIDLpartial interface MediaDevices {
  Promise<MediaStream> getViewportMedia(
      optional DisplayMediaStreamOptions options = {});
};
getViewportMedia

ビューポート(現在のタブ)をライブキャプチャする許可をユーザーに求めます。

ユーザーエージェントは、許可が 与えられた後に、指定された任意の options を生成されるメディアに MUST 適用します。

音声の場合、ユーザーエージェントは、利用可能であれば、現在のビューポートからの音声をキャプチャに含める オプションをエンドユーザーに提示しても MAY かまいません。音声+動画に関して getDisplayMedia() と同様に、 ユーザーエージェントは、音声制約が存在する場合でも音声を返さないことが許されています。 ユーザーエージェントがストリームの存続期間中に音声が共有されないことを知っている場合、結果のストリームに 音声トラックを含めては MUST NOT なりません。ユーザーエージェントは、結果のストリームに動画トラックのみを返すことで 音声および動画の要求を受け入れても MAY かまいませんし、音声トラックと動画 トラックの両方を結果のストリームに返すことで要求を受け入れても MAY かまいません。 ユーザーエージェントは、音声のみの要求を拒否しなければ MUST なりません。

getDisplayMedia() と同様に、 「granted」 許可は永続化できません。

getViewportMedia() メソッドが呼び出されたとき、ユーザーエージェントは次の 手順を実行しなければ MUST なりません。

  1. current settings objectcross-origin isolated capability が false の場合、 rejected された promise を返します。その promise は、 DOMException オブジェクトで拒否され、その name 属性の値は SecurityError です。

  2. relevant global objectassociated Documenttop-level browsing context required document policyRequire-Document-Policy: viewport-capture および Document-Policy: viewport-capture を含まない場合(TODO: 正しいアルゴリズムを使用する)、 rejected された promise を返します。その promise は、 DOMException オブジェクトで拒否され、その name 属性の値は SecurityError です。

  3. relevant global object of thistransient activation を持たない場合、promise を rejected して返します。その promise は、 DOMException オブジェクトで拒否され、その name 属性の値は InvalidStateError です。

  4. options をメソッドの最初の引数とします。

  5. options.videofalse の場合、新しく created された TypeErrorrejected された promise を返します。

  6. options 内の値 CS が辞書である各 existing メンバーについて、 次の手順を実行します。

    1. CSadvanced という名前のメンバーを含む場合、新しく created された TypeErrorrejected された promise を返します。

    2. CS が、 display surface に適用可能な制約可能プロパティを指定する名前のメンバーを含み、 さらにその値が min または exact という名前のメンバーを含む辞書である場合、新しく created された TypeError で promise を rejected して返します。

    3. CS が、 display surface に適用可能な制約可能プロパティを指定する名前のメンバーを含み、 さらにその値が max という名前のメンバーを含む辞書であり、そのメンバーの値が その制約可能プロパティの floor value より小さい場合、 failedConstraint をそのメンバー名とし、 messageundefined または情報提供用の人間可読メッセージのいずれかとし、新しい OverconstrainedErrorOverconstrainedError(failedConstraint, message) を呼び出して作成し、それで promise を rejected して返します。

  7. requestedMediaTypes を、options 内で辞書値または true の値を持つメディアタイプの集合とします。

  8. relevant global objectassociated Documentfully active でない、または フォーカスを持たない場合、 rejected された promise を返します。その promise は DOMException オブジェクトで拒否され、その name 属性の値は InvalidStateError です。

  9. p を新しい promise とします。

  10. 次の手順を並列に実行します。

    1. requestedMediaTypes 内の各メディアタイプ T について、

      1. T のソースが利用できない場合、 新しい DOMException オブジェクトで preject します。その name 属性の値は NotFoundError です。

      2. 現在の閲覧コンテキスト内で型 T のソースを取得するための現在の permission state を読み取ります。許可状態が「denied」 である場合、下の PermissionFailure とラベル付けされた 手順へジャンプします。

    2. 任意で、たとえば以前に確立されたユーザー設定、セキュリティ上の理由、または プラットフォームの制限に基づいて、下の Permission Failure とラベル付けされた手順へ ジャンプします。

    3. Request permission to use viewport capture を、 PermissionDescriptorname"viewport-capture" に設定して行い、提供されるメディアの集合を得ます。

      提供されるメディアは、正確に 1 つの動画トラックを含まなければ MUST なりません。 その動画トラックは、 viewportbrowser display surface のライブキャプチャでなければ MUST なりません。この viewport は、 relevant global objectassociated Documenttop-level browsing context のものです。

      提供されるメディアは、最大 1 つの音声トラックを含まなければ MUST なりません。 提供される場合、その音声トラックは、 relevant global objectassociated Documenttop-level browsing contextactive document、および relevant global objectassociated Documenttop-level browsing context のネストされた browsing context 内にあるすべての active documents から成る文書群によって生成される音声の合計を合成したものでなければ MUST なりません。 この音声トラックは、音声が requestedMediaTypes で指定されていない場合、または false として指定されている場合には、含めては MUST NOT なりません。

      MediaStreamTrack のソースは変更されては MUST NOT なりません。

      要求の結果が「granted」 である場合、提供されるメディアのソースとなっている各デバイスについて、そのデバイスの安定したプライベート ID deviceId を使用して、 [[devicesLiveMap]][deviceId] を、まだ true でない場合は true に設定し、[[devicesAccessibleMap]][deviceId] を、 まだ true でない場合は true に設定します。

      ユーザーエージェントは、「granted」 許可エントリを保存しては MUST NOT なりません。

      結果が「denied」 である場合、下の Permission Failure とラベル付けされた手順へジャンプします。ユーザーが応答しない場合、このアルゴリズムは この手順で停止します。

      ユーザーが許可を与えたものの、OS、プログラム、または Web ページのロックのようなハードウェアエラーにより アクセスが妨げられる場合、 p を新しい DOMException オブジェクトで reject します。その name 属性の値は NotReadableError であり、これらの手順を中止します。

      結果が「granted」 であるものの、上記に列挙されたもの以外の理由でデバイスアクセスに失敗した場合、 p を新しい DOMException オブジェクトで reject します。その name 属性の値は AbortError であり、これらの手順を中止します。

    4. stream を、ユーザーが許可を与えた MediaStream オブジェクトとします。

    5. stream 内のすべてのトラックに対し、適切な制約を用いて ApplyConstraints algorithm を実行します。これが失敗した場合、failedConstraint を失敗したアルゴリズムの結果とし、 messageundefined または情報提供用の 人間可読メッセージのいずれかとし、 OverconstrainedError(failedConstraint, message) を呼び出して作成した新しい OverconstrainedErrorpreject します。

    6. videoTrackstream 内の動画トラックとします。
    7. videoTrack.[[Restrictable]]true に設定します。
    8. pstreamResolve し、これらの手順を中止します。

    9. Permission Failure: p を新しい DOMException オブジェクトで Reject します。その name 属性の値は NotAllowedError です。

  11. p を返します。

ユーザーエージェントは、 部分的に透明なキャプチャ対象の display surface の背後にあるコンテンツをキャプチャしては MUST NOT なりません。

ユーザーエージェントは、 キャプチャされたタブから発せられる音声以外の音声を共有しては MUST NOT ならず、システム全体の音声を共有しても MUST NOT なりません。

5.2 キャプチャされた ビューポートサーフェスの制約可能プロパティ

getViewportMedia に関連する制約は、 getDisplayMedia() に関連するもののみです。これは 5.4 キャプチャされたディスプレイサーフェスの制約可能プロパティ で定義されています。

5.3 Permissions との統合

Viewport Capture は、 "viewport-capture" という name によって識別される powerful feature であり、 使用するには express permission が必要です。

Permissions 仕様との統合に必要とされるように、この 仕様は次を定義します。

permission state constraints
この記述子の permission state の有効な値は、 「prompt」 および 「denied」です。 ユーザーエージェントは、この記述子の permission state を 「granted」 に設定しては決して MUST NOT なりません。

5.4 Permissions Policy との統合

この仕様は、文字列 "viewport-capture" によって識別される policy-controlled feature を定義します。 その default allowlist"self" です。

注記

documentpermissions policy は、その文書内の任意のコンテンツが getViewportMedia を使用できるかどうかを決定します。 いずれかの文書で無効化されている場合、その文書内のどのコンテンツも getViewportMediaallowed to use されません。これは request permission to use アルゴリズムによって強制されます。

6. プライバシーインジケーターの要件

この仕様は、 Privacy Indicator Requirements of getDisplayMedia() を拡張し、getViewportMedia を含めます。

7. セキュリティおよびプライバシーに関する 考慮事項

この節は参考情報です。ただし、ここに含まれる助言に従わない場合、プラットフォームのセキュリティに対する重大なリスクがあることを 指摘しています。

未定。

A. 参考文献

A.1 規範的参考文献

[ECMA-262]
ECMAScript 言語仕様. Ecma International. URL: https://tc39.es/ecma262/multipage/
[GETUSERMEDIA]
メディアキャプチャおよびストリーム. Cullen Jennings; Bernard Aboba; Jan-Ivar Bruaroey; Henrik Boström; youenn fablet. W3C. 2024年10月3日. W3C 勧告候補. URL: https://www.w3.org/TR/mediacapture-streams/
[HTML]
HTML 標準. Anne van Kesteren; Domenic Denicola; Dominic Farolino; Ian Hickson; Philip Jägenstedt; Simon Pieters. WHATWG. Living Standard. URL: https://html.spec.whatwg.org/multipage/
[infra]
Infra 標準. Anne van Kesteren; Domenic Denicola. WHATWG. Living Standard. URL: https://infra.spec.whatwg.org/
[Permissions]
Permissions. Marcos Caceres; Mike Taylor. W3C. 2024年3月19日. W3C 作業草案. URL: https://www.w3.org/TR/permissions/
[permissions-policy]
Permissions Policy. Ian Clelland. W3C. 2024年9月25日. W3C 作業草案. URL: https://www.w3.org/TR/permissions-policy-1/
[RFC2119]
RFC における要件レベルを示すためのキーワード. S. Bradner. IETF. 1997年3月. Best Current Practice. URL: https://www.rfc-editor.org/rfc/rfc2119
[RFC8174]
RFC 2119 のキーワードにおける大文字と小文字の 曖昧性. B. Leiba. IETF. 2017年5月. Best Current Practice. URL: https://www.rfc-editor.org/rfc/rfc8174
[screen-capture]
スクリーンキャプチャ. Jan-Ivar Bruaroey; Elad Alon. W3C. 2024年6月27日. W3C 作業草案. URL: https://www.w3.org/TR/screen-capture/
[WEBIDL]
Web IDL 標準. Edgar Chen; Timothy Gu. WHATWG. Living Standard. URL: https://webidl.spec.whatwg.org/

A.2 参考情報としての参考文献

[dom]
DOM 標準. Anne van Kesteren. WHATWG. Living Standard. URL: https://dom.spec.whatwg.org/
[WEBRTC]
WebRTC: ブラウザーにおけるリアルタイム通信. Cullen Jennings; Jan-Ivar Bruaroey; Henrik Boström; Florent Castelli. W3C. 2024年10月8日. W3C 勧告. URL: https://www.w3.org/TR/webrtc/