画面キャプチャ

W3C ワーキングドラフト

この文書の詳細
このバージョン:
https://www.w3.org/TR/2026/WD-screen-capture-20260827/
最新の公開版:
https://www.w3.org/TR/screen-capture/
最新の編集者草案:
https://w3c.github.io/mediacapture-screen-share/
履歴:
https://www.w3.org/standards/history/screen-capture/
コミット履歴
編集者:
Jan-Ivar Bruaroey (Mozilla)
Elad Alon (Google)
元編集者:
Martin Thomson (Mozilla)
Keith Griffin (Cisco)
Suhas Nandakumar (Cisco)
Henrik Boström (Google)
フィードバック:
GitHub w3c/mediacapture-screen-shareプルリクエスト, 新しい issue, オープンな issue
public-webrtc@w3.org 件名行 [screen-capture] … message topic …アーカイブ
参加
メーリングリスト

要旨

この文書は、ユーザーの表示、またはその一部を、 getDisplayMedia を使用してメディアストリームのソースとして利用する方法を定義します。これは Media Capture API の拡張です [GETUSERMEDIA].

この文書の位置付け

この節では、この文書の公開時点における位置付けについて説明します。現在の W3C 公開文書の一覧およびこの技術報告書の最新版は、 W3C 標準および草案の 索引で確認できます。

この文書は未完成です。大幅に変更される可能性があり、 初期段階での実験は推奨されますが、したがって、 実装を目的としたものではありません。

この文書は、Web リアルタイム コミュニケーション・ワーキンググループによって、 勧告 トラックを使用したワーキングドラフトとして公開されました。

ワーキングドラフトとしての公開は、 W3C およびその会員による 承認を意味するものではありません。

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

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

この文書には、 2025 年 8 月 18 日付の W3C プロセス文書が適用されます。

1. 導入

この節は規範的ではありません。

この文書は、Media Capture API [GETUSERMEDIA] の拡張を説明しており、ユーザーの表示またはその一部をビデオトラックの形で取得できるようにします。場合によってはシステム、アプリケーション、もしくはウィンドウのオーディオもキャプチャされ、オーディオトラックの形で提供されます。これにより、WebRTC を用いた画面共有など多くのアプリケーションが可能になります [WEBRTC]。

この機能は重大なセキュリティ上の影響を持ちます。この API を使用してユーザーに表示されている情報へアクセスするアプリケーションは、アプリケーションの制御下にある場合、他のオリジンの機密情報にアクセスしてしまう可能性があります。これには、ユーザーエージェントのサンドボックスによる保護により通常はアクセス不能なコンテンツが含まれます。

この文書は主にビデオおよびオーディオのキャプチャに関する内容を扱います [GETUSERMEDIA]。しかしここで定義される一般的な仕組みは、現在定義されている depth [MEDIACAPTURE-DEPTH] のような他の種類のメディアへ拡張することもできます。

2. 適合性

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

本文書中のキーワード MAYMUSTMUST NOT、および SHOULD は、全て大文字で現れる場合に限り、BCP 14 に記載されているとおりに解釈されます [RFC2119] [RFC8174]。

この仕様は単一の製品に適用される適合基準を定義します:この仕様に含まれるインターフェイスを実装する user agent です。

本仕様で定義される API を実装するために ECMAScript [ECMA-262] を用いる実装は、Web IDL 仕様で定義される ECMAScript バインディングに従って実装する必要があります [WEBIDL]。本仕様はその仕様と用語を使用しています。

3.

次の例は、本文書で定義された navigator.mediaDevices.getDisplayMedia メソッドを使った表示キャプチャ要求を示します。

try {
  let mediaStream = await navigator.mediaDevices.getDisplayMedia({video:true});
  videoElement.srcObject = mediaStream;
} catch (e) {
  console.log('Unable to acquire screen capture: ' + e);
}

4. 用語

この文書は MediaStreamMediaStreamTrack および ConstrainablePattern の定義を [GETUSERMEDIA] から使用します。

画面キャプチャは、いくつかの異なる種類の画面ベースの表面のキャプチャを包含します。これらを総称して display surfaces と呼び、本書では次の型を定義します:

この文書は、各種の display surface の二つの変種を区別します:

一部のオペレーティングシステムでは、異なるアプリケーションのウィンドウが他のウィンドウを全部または一部で覆い隠すことが可能なため、visible display surfacelogical display surface の厳密な部分集合になります。

source pixel ratio は、display surface の垂直ピクセルサイズで割った 1/96 インチの値です。

The devicechange イベントは [GETUSERMEDIA] に定義されています。

5. 表示メディアのキャプチャ

表示されているメディアのキャプチャは、getDisplayMedia という新しいメソッドを MediaDevices インターフェイスに追加することで有効になります。これは getUserMedia() に類似していますが、呼び出されるたびにエンドユーザーが選択した単一の表示デバイスからメディアを取得する点が異なります。

5.1 MediaDevices の追加

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

ユーザーに対して表示のライブキャプチャの許可を求めます。

ユーザーエージェントは、エンドユーザーが毎回利用可能な選択肢の中から共有する表示面を選べるようにしなければならず(MUST)、options.videooptions.audio に含まれるいかなる MediaTrackConstraints を用いてその選択を制限してはなりません(MUST NOT)。

ユーザーエージェントは、displaySurface 制約の存在およびその値を、ユーザーに提示するソースの表示に影響させることができます(MAY)。それでもユーザーエージェントは依然として任意の表示面を無制限に選択できるように提供しなければなりません(MUST)。ユーザーエージェントは、モニターの共有はリスクが高いためユーザーが選択しないよう促すことが強く推奨されます。

options.videooptions.audio に含まれるいかなる MediaTrackConstraints も、ユーザーが選択を行った後にのみユーザーが選択したメディアへ適用されなければなりません(MUST)。

音声に関しては、ユーザーエージェントはエンドユーザーに共有するオーディオソースを提示してもよい(MAY)ものとします。どの選択肢を提示するかはユーザーエージェント次第であり、提示される音声ソースが必ずしもビデオソースと同一であるとは限りません。オーディオソースは特定のウィンドウブラウザー、システム全体のオーディオ、あるいはそれらの組み合わせであり得ます。オーディオとビデオの両方を要求した場合でも、ユーザーエージェントはオーディオを返さないことが許されています。生涯にわたってオーディオが共有されないことが確実であるとユーザーエージェントが判断した場合、それは結果のストリームにオーディオトラックを含めてはなりません(MUST NOT)。ユーザーエージェントは、オーディオとビデオの要求に対してビデオトラックのみを返すか(MAY)、オーディオトラックとビデオトラックの両方を返すことができます(MAY)。ただし、オーディオのみの要求は拒否されなければなりません(MUST)。

getDisplayMedia は、異なるソース集合からメディアを取得しユーザー選択を要求する点に加え、getUserMedia() と異なり、"granted" の権限を永続化することはできません。

getDisplayMedia() が呼び出されると、ユーザーエージェントは次の手順を実行しなければなりません(MUST):

  1. mediaDevices をこの操作の this とします。

  2. controlleroptions.controller が存在すればそれに、存在しなければ null にします。

  3. もし controllernull でない場合、次の手順を実行します:

    1. もし controller.[[IsBound]]true であれば、reject された promise を、DOMException オブジェクト(そのname 属性が InvalidStateError の値を持つ)で返して終了します。

    2. controller.[[IsBound]]true に設定します。

  4. もしこの操作の relevant global objecttransient activation を持たない場合、reject された promise を、DOMException オブジェクト(そのname 属性が InvalidStateError の値を持つ)で返して終了します。

  5. このメソッドの第一引数を options とします。

  6. constraints[options.audio, options.video] とします。

  7. もし constraints.videofalse であれば、新たに作成された reject された promise を、作成された TypeError で返します。

  8. constraints の中で値 CS が辞書である既存の各メンバーについて、次の手順を実行します:

    1. CSに、名前が advancedであるメンバーが含まれている場合、promiseを却下して 返す。却下理由には、新しく作成されたTypeErrorを用いる。

    2. CSに、その名前が 表示サーフェスに適用可能な制約可能なプロパティを指定するメンバーが含まれ、 さらに、その値が、次のいずれかの名前を持つメンバーを含む辞書であり、 名前がminまたはexactである場合、 promiseを却下して返す。却下理由には、新しく 作成されたTypeErrorを用いる。

    3. CSに、その名前が 表示サーフェスに適用可能な制約可能なプロパティを指定するメンバーが含まれ、 さらに、その値が、次の名前を持つメンバーを含む辞書であり、 その名前がmaxで、さらにそのメンバーの値が 制約可能なプロパティの下限値より小さい場合、 failedConstraintをそのメンバーの名前とし、 messageundefinedまたは 人間が読める有益なメッセージのいずれかとし、promiseを 却下して返す。却下理由には、新しい OverconstrainedErrorを用いる。これは、 OverconstrainedError(failedConstraint, message)を呼び出して作成する。

  9. requestedMediaTypes を、constraints のうち辞書値または true の値を持つメディア型の集合とします。

  10. もしこの操作の current settings objectrelevant global object に関連付けられた Document が完全にアクティブでない(fully active でない)か、フォーカスを持っていない(have focus でない)場合、reject された promise を、DOMException オブジェクト(そのname 属性が InvalidStateError の値を持つ)で返して終了します。

  11. ユーザー アクティベーションを消費するthis関連 グローバルオブジェクトを用いる。

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

  13. 次の手順を並列で実行します:

    1. requestedMediaTypes の各メディア型 T について、

      1. もし型 T のソースが存在しない場合、ユーザーインタラクションタスクソースに対してタスクをキューし、p を新しい DOMException(そのname 属性が NotFoundError の値を持つ)で reject し、これらの手順を中止します。

      2. 現在の閲覧コンテキストで型 T のソースを取得するための権限状態を読み取ります。もし権限状態が "denied" であれば、下のラベル 許可失敗 にジャンプします。

    2. 任意で、例えば事前に確立されたユーザープリファレンス、セキュリティ上の理由、あるいはプラットフォームの制約に基づいて、下のラベル 許可失敗 にジャンプしてもよい。

    3. ユーザーに表示デバイスを選択させるよう 促し、その結果として提供されるメディアの集合を得ます。これは PermissionDescriptorname が "display-capture" に設定されたものとして扱います。

      提供されるメディアは正確に1つのビデオトラックを含まなければなりません(MUST)。

      提供されるメディアは最大で1つのオーディオトラックを含むことができます。このオーディオトラックは、requestedMediaTypes に音声が指定されていなかった場合、あるいはそれが false と指定されていた場合は含めてはなりません(MUST NOT)。

      選択されたデバイスはユーザーによって決定されたものでなければなりません(MUST)。一度選択されたら、ユーザーがユーザーエージェントとの相互作用を通じて許可しない限り、MediaStreamTrack のソースは変更してはなりません(MUST NOT)。

      ユーザーエージェントには、 ブラウザー表示デバイス、およびモニター表示デバイスのうち、ブラウザー ウィンドウが表示されているものを共有しないようユーザーに警告するか、他の方法でそれらを 選択しないよう促すことが推奨される。これは、それらを共有すると著しく 高いリスクが生じるためである。

      もし要求の結果が "granted" であれば、提供されたメディアのソースとなっている各デバイスについて、デバイスの安定かつプライベートな識別子である deviceId を用いて [[devicesLiveMap]][deviceId] を true に、もしまだ true でなければ [[devicesAccessibleMap]][deviceId] を true に設定します。

      ユーザーエージェントは "granted" の権限エントリを保存してはなりません(MUST NOT)。

      もし結果が "denied" であれば、下のラベル 許可失敗 にジャンプします。ユーザーが応答しない場合、このアルゴリズムはこのステップで停止します。

      ユーザーが許可したが、OS/プログラム/ウェブページのロック等のハードウェアエラーによりアクセスできない場合は、ユーザーインタラクションタスクソースにタスクをキューして p を新しい DOMException(そのname 属性が NotReadableError の値を持つ)で reject し、これらの手順を中止します。

      もし結果が "granted" であるにもかかわらず、上記以外の理由でデバイスアクセスが失敗した場合は、ユーザーインタラクションタスクソースにタスクをキューして p を新しい DOMException(そのname 属性が AbortError の値を持つ)で reject し、これらの手順を中止します。

    4. streamMediaStream オブジェクトとします。

    5. ユーザーが許可した各 source について、次の手順を実行します:

      1. tracksourcemediaDevices を用いて MediaStreamTrack を作成 した結果とします。

      2. trackstream のトラック集合に追加します。

      3. Tie track source to MediaDevicessourcemediaDevices で実行します。

    6. 適切な制約を用いて stream の全てのトラックに対して ApplyConstraints アルゴリズム を実行します。これが失敗した場合、失敗した結果を failedConstraint に、人間が読める説明を message にそれぞれ設定し、ユーザーインタラクションタスクソースにタスクをキューして pOverconstrainedError(failedConstraint, message) で拒否し、これらの手順を中止します。

    7. この getDisplayMedia() の呼び出しは、現在新しい キャプチャセッション を生成したものと見なされます。

    8. ユーザーインタラクションタスクソースにタスクをキューして、次の手順を実行します:

      1. もし controllernull でない場合、次の手順を実行します:

        1. controller.[[Source]]stream のビデオトラックの [[Source]] に設定します。

        2. controller.[[DisplaySurfaceType]] を、stream のビデオトラックの DisplayCaptureSurfaceType に設定します。

      2. last activation timestamp を現在の高解像度時刻に設定します。

      3. Resolve pstream で完了させます。

    9. もし controllernull でない場合、ユーザーインタラクションタスクソースにタスクをキューして controller に対して finalize focus decision algorithm を実行します。

    10. これらの手順を中止します。

    11. 許可失敗: ユーザーインタラクションタスクソースにタスクをキューして、p を新しい DOMException(そのname 属性が NotAllowedError の値を持つ)で reject します。

  14. p を返します。

トップレベルのドキュメントがフォーカスを失ったとき、そのドキュメント内およびネストされた閲覧コンテキストのドキュメントにあるすべての CaptureController オブジェクトに対して次の手順を実行します:

  1. もし [[Source]]undefined であれば、これらの手順を中止します。

  2. [[FocusChangeDisabled]]true に設定します。

ユーザーエージェントしてはならないのは、 部分的に透明なキャプチャ対象の 表示サーフェスの背後にあるコンテンツをキャプチャすることである。

新たに作成されたMediaStreamTrackについて、 ユーザーエージェントしてはならないのは、ユーザーに表示されたプロンプトをキャプチャすることである。

現在画面にレンダリングされていない情報は、キャプチャ内で不明瞭にされるべきである。 ただし、アプリケーションがそのコンテンツにアクセスすることを明示的に 認可されている場合(たとえば、 昇格された権限などの手段を通じて)は除く。

ユーザーエージェントしてはならないのは、音声を ユーザーの能動的な 同意なしに共有することである。たとえば、ウィンドウの映像のキャプチャに、そのウィンドウとは無関係なアプリケーションを 含むシステム全体の音声のキャプチャが伴う場合が該当する。

5.2 クローズまたは最小化された表示面

共有されている表示サーフェスは、一時的または 永続的にアプリケーションからアクセスできなくなる場合がある。これは、 オペレーティングシステムまたはユーザーエージェントによって行われた措置による。何をもって表示 サーフェスをアクセス不能とみなすかは、この 仕様の範囲外であるが、例として考えられるのは、モニターが 切断されること、ウィンドウまたはブラウザーが閉じられるか最小化されること、あるいは 電話への 着信である。

注記

ユーザーエージェントは最終的にこの文脈で「アクセス不能」が何を意味するかを決定しますが、外部要因による中断に対してのみミュートおよびミュート解除イベントを発火することが推奨されます。

表示サーフェスが、必ずしも 永続的ではないアクセス不能状態になった場合、ユーザーエージェントは必ずタスクをキューに入れなければならない。このタスクが ユーザー インタラクションタスクソース上で設定するミュート状態は、 対応するメディア トラックのものであり、その値はtrueである。

表示サーフェスがアクセス不能状態を脱して アクセス可能になった場合、ユーザーエージェントは必ずタスクをキューに入れなければならない。このタスクが ユーザー インタラクションタスクソース上で設定するミュート状態は、 対応するメディアトラックのものであり、 その値はfalseである。

表示サーフェスが 永続的なアクセス不能状態(ソースウィンドウが閉じる場合など)になった場合、 ユーザーエージェントは必ずタスクをキューに入れなければならない。このタスクが ユーザー インタラクションタスクソース上で 終了させるのは、対応するメディア トラックである。

直前にgetDisplayMediaから返されたストリームが してもよいのは、デフォルトでミュートされたトラックを含むことである。同じストリームに 属するオーディオトラックとビデオトラックがしてもよいのは、相互に独立して ミュート/ミュート解除されることである。

5.3 制約のない表示面の選択

ソース選択のための制約を受け付けないということは、getDisplayMedia が音声、映像、または音声と映像の表示ソースが存在するかどうかを公開するフィンガープリンティングの側面のみを提供することを意味します。 (これはフィンガープリンティングのベクトルです。)

displaySurface 制約を受け入れても、ユーザーの選択を制限するものではない点に注意してください。

5.4 キャプチャされた表示サーフェスの制約可能な プロパティ

getDisplayMedia における制約は、 getUserMedia() における制約とは異なる目的を果たします。 制約は検出には役立たず、ユーザーが選択した後にのみ 適用されます。

この節では、 getDisplayMedia のトラックに 適用される制約を定義します。 getUserMedia() 用に定義された制約は、ここに記載されていない限り適用されません。

これらの制約の一部は、ダウンスケーリングやフレーム間引きなどの ユーザーエージェントによる処理、および表示固有の機能を有効にします。 その他の制約は、ユーザーが選択した 表示サーフェスに固有のプロパティを、 能力および設定として観察できるようにします。

次の新規および既存の MediaStreamTrack制約可能な プロパティは、 ユーザーが選択した映像の表示サーフェスに、 次の動作で適用されるものとして定義されます。

プロパティ名 動作
width unsigned long ピクセル単位の幅。能力として、max は 表示サーフェスの幅を反映しなければならず、 min はユーザーエージェントによるダウンスケーリングを通じて利用可能な、 アスペクト比を維持する最小の表現の幅を 反映しなければなりません。
height unsigned long ピクセル単位の高さ。能力として、max は 表示サーフェスの高さを反映しなければならず、 min はユーザーエージェントによるダウンスケーリングを通じて 利用可能な、アスペクト比を維持する最小の表現の高さを 反映しなければなりません。
frameRate double フレームレート(1 秒あたりのフレーム数)。能力として、max は 表示サーフェスのフレームレートを反映しなければならず、 min はユーザーエージェントによるフレーム間引きを通じて 利用可能な最低フレームレートを反映しなければなりません。
aspectRatio double 正確なアスペクト比(ピクセル単位の幅をピクセル単位の高さで 除算し、小数第 10 位に丸めた double として表現した値)、 またはアスペクト比の範囲。設定としては width / height を表します。能力として、min と max はいずれも 現在の設定値でなければならず、アプリケーションの観点から このプロパティを変更不能にします。
resizeMode DOMString この文字列は、VideoResizeModeEnum のメンバーのいずれかです。 設定として、 「none」は、 MediaStreamTrack が表示を完全な詳細度でレンダリングするために必要なすべてのビットを 含むことを意味します。ソースピクセル 比 > 1 の場合、これは width および height が、エンドユーザーの観点から見た表示の外観から 想定される値より大きくなることを意味します。一方、 「crop-and-scale」は、 MediaStreamTrack が、ユーザーエージェントによってダウンスケーリングされたものの、 クロップされていない、表示サーフェスの アスペクト比を維持した表現を含むことを意味します。能力として、 「none」 および 「crop-and-scale」 の両方の値が存在しなければなりません。
deviceId DOMString キャプチャされているサーフェスの識別子。

設定として、キャプチャされている表示サーフェスを識別します。 識別子は、各文書について 一意に生成されなければなりません。

能力として、設定値のみが唯一の値として存在しなければならず、 アプリケーションの観点からこのプロパティを変更不能にします。

displaySurface DOMString

この文字列は、 DisplayCaptureSurfaceType のメンバーのいずれかです。

設定として、キャプチャされている表示サーフェスの種類を示します。

能力として、設定値のみが唯一の値として存在しなければならず、 アプリケーションの観点からこのプロパティを変更不能にします。

制約として、この値は特定の表示サーフェスの種類に対する アプリケーションの設定をユーザーエージェントに伝えます。 ユーザーエージェントは、その設定に従ってユーザーに提示する選択肢を 並べ替えてもよいものとします。この制約はその他のすべての目的では無視されるため、 副作用(OverconstrainedError の原因となることなど)を 引き起こすことはできません。

logicalSurface boolean 設定として、値が true の場合は 論理表示 サーフェスのキャプチャを示し、 値が false の場合は可視表示サーフェスの キャプチャを示します。能力として、この同じ値のみが 唯一の値として存在しなければならず、アプリケーションの観点から このプロパティを変更不能にします。
cursor DOMString この文字列は、 CursorCaptureConstraint のメンバーのいずれかです。設定として、キャプチャされた 表示サーフェスにカーソルが 含まれるかどうか、およびいつ含まれるかを示します。能力として、 ユーザーエージェントは、この表示サーフェスについて 対応可能な CursorCaptureConstraint の値の集合のみを含めなければなりません。
screenPixelRatio double 設定値としては、1.0 の ページズームおよび 1.0 のスケール係数を使用した場合の CSS ピクセルのサイズを、 表示サーフェスのピクセルの垂直サイズで 除算した結果である。これは制約または 能力として使用することはできない。

次の新規および既存の MediaStreamTrack制約可能な プロパティは、 ユーザーが選択した音声ソースに、次の動作で適用されるものとして 定義されます。

プロパティ名 動作
restrictOwnAudio boolean

設定として、この値はユーザーエージェントがソースに 自身の音声の 制限を適用しているかどうかを示します。

制約として、このプロパティを制約することにより、 自身の音声の 制限が有効または無効になったソースを得ることができます。

自身の音声の制限が適用される場合、 ユーザーエージェントは、getDisplayMedia を実行した文書によって生成された音声を、キャプチャされている音声から すべて除去するよう試みなければなりません。 ユーザーエージェントが処理によって音声を除去できない場合、 文書の音声をキャプチャ対象から除外することによって音声を 除去することが望まれます。その結果、音声がまったくキャプチャされなくなる場合、 ユーザーエージェントは、再び音声をキャプチャできるようになるまで トラックをミュートしたままにしなければなりません。

suppressLocalAudioPlayback boolean

設定として、この値はアプリケーションがユーザーエージェントに対して、 ソースにローカル音声 再生の抑制を適用するよう指示したかどうかを示します。

制約として、この値はユーザーがブラウザー表示サーフェスのキャプチャを 選択した場合にのみ意味を持ちます。その場合、値が true であることは、 ユーザーエージェントがキャプチャされたブラウザー表示サーフェスに対して、 ローカル音声 再生の抑制を行うことが望まれることを示します。

ローカル音声再生の抑制が適用される場合、 ユーザーエージェントはローカルスピーカーへの音声の中継を 停止することが望まれますが、その音声は進行中の音声キャプチャを行う キャプチャセッション によって引き続きキャプチャされなければなりません。この抑制は、 キャプチャされる文書から観察可能であってはなりません。 さらに、キャプチャする文書は suppressLocalAudioPlayback を適用しているかどうかのみを観察でき、その抑制が実際に効果を 発揮しているかどうかを観察することはできません (すなわち、ユーザーがユーザーエージェントでこの設定を上書きしているかどうかは 観察できません)。

ブラウザー表示サーフェスが、 複数の同時キャプチャの対象となっている場合、少なくとも 1 つの アクティブな音声キャプチャを行うキャプチャセッションsuppressLocalAudioPlaybacktrue に制約している限り、 ローカル音声再生の 抑制を適用することが望まれます。

ユーザーが選択した表示サーフェスの基礎となるソースに固有の プロパティが、たとえばエンドユーザーがキャプチャ中のウィンドウのサイズを変更したことに 応じて変化し、その変化によって 1 つ以上の制約可能なプロパティの 能力および設定の一方または両方が古くなった場合、ユーザーエージェントは ユーザー 操作タスクソースで、次の手順を実行するタスクをキューに 入れなければなりません。

  1. 影響を受けるすべての制約可能なプロパティを同時に更新します。

    これにより「過剰制約」状態が発生する場合、ユーザーエージェントは、 原因となる制約が過剰制約を生じさせている間、その制約を 無視しなければなりません。ユーザーエージェントはトラックを ミュートしてはなりません。

注記

min 制約および exact 制約は getDisplayMedia() で TypeError を 発生させますが、この仕様は track.applyConstraints() メソッドを 変更しません。そのため、値によっては OverconstrainedError を発生させるか、 成功する場合があり、したがって、この「過剰制約」状態を引き起こす可能性のある 状態で存在し得ます。max 制約も、たとえば aspectRatio によって この状態を引き起こすことがあります。この仕様では、これらを 有用ではないエッジケースと見なします。

5.4.1 ダウンスケーリングと フレーム間引き

SelectSettings アルゴリズムの目的上、ユーザーエージェントは、元の 表示サーフェスの アスペクト比を維持する(最も近いピクセルに丸めた)ダウンスケーリング済み寸法の 可能なすべての組み合わせ、およびフレーム間引きを通じて利用可能な フレームレートを、利用可能な設定 辞書として考慮することが望まれます。

制約によるダウンスケーリングおよび間引きの効果は、 実質的に適合度距離 アルゴリズムによって制御されます。

その意図は、ideal の width、ideal の height、 および ideal の frameRate のいずれかが指定された場合に、 元の表示サーフェスの アスペクト比を常に維持しながら、それらに近い出力をユーザーエージェントが 生成することです。

適用された制約によって別途指示されない限り、ユーザーエージェントは デフォルトでソースピクセル比に従って ダウンスケーリングすることが望まれます。

ユーザーエージェントは、キャプチャされた出力をクロップしてはなりません。

集約された表示サーフェスで高い解像度および フレームレートを維持するために必要な場合を除き、ユーザーエージェントは キャプチャされた出力をアップスケーリングしたり、追加のフレームを 作成したりしてはなりません。

注記

max 制約型を使用すると、ウェブアプリケーションは width や height などの 制約可能なプロパティに最大限度を指定できます。これは、キャプチャ中に エンドユーザーがウィンドウまたは ブラウザーのサーフェスを 極端な形状に変更した場合に、極端なアスペクト比を制限するのに役立ちます。

この仕様における正の数値型の各制約可能なプロパティについて、 ユーザーエージェントは、ソースにかかわらずユーザーエージェントが対応する 最小の許容値を表す下限値を 設定しなければなりません。この値は一定でなければならず、 0 より大きくなければなりません。ユーザーエージェントには、 ソースにかかわらず下限値を超える すべての値に対応することが推奨されます。

注記

下限値の目的は、 ユーザーにすでに確認を求めた後で getDisplayMedia()OverconstrainedError により失敗することをユーザーエージェントが 回避し、ユーザーのシステムに関する情報の漏洩を防ぐことです。

5.4.2 CaptureStartFocusBehavior

setFocusBehavior() を呼び出すアプリケーションが、その CaptureControllerキャプチャセッションに関連付けられた 表示サーフェスに、 ユーザーエージェントがフォーカスすることを望むかどうかを記述します。

WebIDLenum CaptureStartFocusBehavior {
  "focus-capturing-application",
  "focus-captured-surface",
  "no-focus-change"
};
列挙型の説明
focus-capturing-application アプリケーションは、自身にフォーカスされることを優先します。
focus-captured-surface アプリケーションは、この CaptureControllerキャプチャセッションに関連付けられた 表示サーフェスに フォーカスされることを優先します。
no-focus-change アプリケーションは、ユーザーエージェントがフォーカスを変更せず、 ユーザーエージェントまたはオペレーティングシステム、あるいはその両方との ユーザーの操作後に、最後にフォーカスを持っていたサーフェスに フォーカスを残すことを優先します。
注記
ワーキンググループは、 「no-focus-change」 を非推奨にする可能性について調査しています。

5.4.3 CaptureController

CaptureController オブジェクトは、キャプチャセッションに 関連付けることができます。これは、 getDisplayMedia() の呼び出し、その結果のストリーム、またはトラックではなく、 キャプチャセッション 自体に関連する機能を公開するために使用されます。

任意のキャプチャセッションには、 最大で 1 つのCaptureControllerが 関連付けられます。

任意のキャプチャセッションに関連付けられる CaptureControllerは、 最大で 1 つです。

WebIDL[Exposed=Window, SecureContext]
interface CaptureController : EventTarget {
  constructor();
  undefined setFocusBehavior(CaptureStartFocusBehavior focusBehavior);
};
(リスクのある機能)課題 1

CaptureControllerは、 まだイベントハンドラーを定義していないため、 EventTargetから 継承する必要はありません。これは、将来の仕様が CaptureControllerを イベントハンドラー属性で拡張する場合に備えるためのものです。 継承が使用されない場合は削除できます。

constructor
次の内部スロットを持つ新しい CaptureController オブジェクトを作成します。
内部スロット 初期値 説明(非規範的
[[IsBound]] false アプリケーションが thisキャプチャセッション に関連付けようとしたかどうか。
[[Source]] null 関連付けられたキャプチャセッションのソース。
[[DisplaySurfaceType]] null キャプチャが開始されると、キャプチャされた 表示サーフェスの 種類に設定されます。
[[FocusChangeDisabled]] false 外部イベントまたはユーザーエージェントの判断によって、 フォーカス変更が無効にされているかどうか。
[[FocusDecisionFinalized]] false フォーカスに関する決定が確定したときに true に設定されます。
[[FocusBehavior]] null アプリケーションが望むフォーカス動作。

ユーザーエージェントは、自身のロジックに基づいて、いつでも [[FocusChangeDisabled]]true に設定してもよいものとします。

setFocusBehavior

次の手順を実行します。

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

  2. this.[[Source]]null の場合、 this.[[FocusBehavior]]focusBehavior に設定し、これらの手順を中止します。

  3. this.[[Source]]停止済みである場合、 「InvalidStateErrorDOMExceptionスローします。

  4. this.[[DisplaySurfaceType]]が 「browser」 でも 「window」 でもない場合、 「InvalidStateErrorDOMExceptionスローします。

  5. this.[[FocusDecisionFinalized]]true の場合、 「InvalidStateErrorDOMExceptionスローします。

  6. this.[[FocusBehavior]]focusBehavior に設定します。

  7. thisに対して、 フォーカス決定確定 アルゴリズムを実行します。

controller が与えられた場合の フォーカス決定確定アルゴリズムは、 次の手順を実行することで構成されます。

  1. キャプチャセッションの開始から 長すぎる時間が経過している場合、ユーザーエージェントは [[FocusDecisionFinalized]]true に設定することが望まれます。時間の長さは ユーザーエージェントに委ねられますが、1 秒を使用することが推奨されます。

  2. controller.[[FocusDecisionFinalized]]true の場合、これらの手順を中止します。

  3. controller.[[FocusDecisionFinalized]]true に設定します。

  4. controller.[[FocusChangeDisabled]]true の場合、これらの手順を中止します。

  5. controller.[[DisplaySurfaceType]]が 「browser」 でも 「window」 でもない場合、これらの手順を中止します。

  6. focusBehaviorcontroller.[[FocusBehavior]]とします。

  7. 次の手順を並行して 実行します。

    1. focusBehavior が 「focus-capturing-application」 の場合、キャプチャする文書を表す 表示サーフェスに フォーカスします。

    2. focusBehavior が 「focus-captured-surface」 の場合、 controller.[[Source]]が参照する 表示サーフェスに フォーカスします。

5.4.4 SelfCapturePreferenceEnum

アプリケーションが存在する表示サーフェスを、 ユーザーに提示する選択肢に含めるべきかどうかについて、 アプリケーションが指定できるさまざまなヒントを記述します。

WebIDLenum SelfCapturePreferenceEnum {
  "include",
  "exclude"
};
列挙値 説明
include アプリケーションは、サーフェスを提示される選択肢に 含めることを優先します。
exclude アプリケーションは、サーフェスを提示される選択肢から 除外することを優先します。

5.4.5 SystemAudioPreferenceEnum

getDisplayMedia() を呼び出すアプリケーションが、モニター表示サーフェスについて ユーザーに提示される音声ソースにシステム音声を含めることを、 ユーザーエージェントに望むかどうかを記述します。 その他の種類の表示サーフェスには 適用されません。

WebIDLenum SystemAudioPreferenceEnum {
  "include",
  "exclude"
};
列挙型の説明
include アプリケーションは、モニター表示サーフェスについて、 システム音声を共有する選択肢をユーザーに提示することを優先します。
exclude アプリケーションは、モニター表示サーフェスについて、 システム音声を共有する選択肢をユーザーに提示しないことを優先します。

5.4.6 WindowAudioPreferenceEnum

getDisplayMedia() を呼び出すアプリケーションが、ウィンドウ表示サーフェスについて ユーザーに提示される音声ソースにウィンドウ音声またはシステム音声を含めることを、 ユーザーエージェントに望むかどうかを記述します。

WebIDLenum WindowAudioPreferenceEnum {
  "system",
  "window",
  "exclude"
};
列挙型の説明
system アプリケーションは、ウィンドウ表示サーフェスについて、 システム音声を共有する選択肢をユーザーに提示することを優先します。
window アプリケーションは、ウィンドウ表示サーフェスについて、 ウィンドウ音声を共有する選択肢をユーザーに提示することを優先します。
exclude アプリケーションは、ウィンドウ表示サーフェスについて、 音声を共有する選択肢をユーザーに提示しないことを優先します。

5.4.7 SurfaceSwitchingPreferenceEnum

getDisplayMedia() を呼び出すアプリケーションが、キャプチャ中にソースの 表示サーフェスを動的に切り替える 選択肢をユーザーに提示することを、ユーザーエージェントに望むかどうかを 記述します。

WebIDLenum SurfaceSwitchingPreferenceEnum {
  "include",
  "exclude"
};
列挙型の説明
include アプリケーションは、キャプチャ中にソースの 表示サーフェスを 動的に切り替える選択肢をユーザーに提示することを優先します。
exclude アプリケーションは、キャプチャ中にソースの 表示サーフェスを 動的に切り替える選択肢をユーザーに提示しないことを優先します。

5.4.8 MonitorTypeSurfacesEnum

アプリケーションが、種類がモニターである 表示サーフェスを 選択する選択肢をユーザーに提示することを、ユーザーエージェントに望むかどうかを 記述します。

WebIDLenum MonitorTypeSurfacesEnum {
  "include",
  "exclude"
};
列挙型の説明
include アプリケーションは、ユーザーに提示される 表示サーフェスに、 種類がモニターであるものを含めることを優先します。
exclude アプリケーションは、ユーザーに提示される 表示サーフェスから、 種類がモニターであるものを除外することを優先します。

5.4.9 AudioSelectionPreferenceEnum

getDisplayMedia() を呼び出すアプリケーションが、映像とともに音声をキャプチャすることを ユーザーエージェントに優先させたいかどうかを記述します。

WebIDLenum AudioSelectionPreferenceEnum {
  "preferred"
};
列挙型の説明
preferred アプリケーションは、ユーザーエージェントが映像とともに音声を キャプチャすることを優先するよう望みます。

5.4.10 DisplayMediaStreamOptions

DisplayMediaStreamOptions 辞書は、 getDisplayMediaが返す MediaStream に、どのような種類の MediaStreamTrack を含めることができるかをユーザーエージェントに指示するために使用されます。

WebIDLdictionary DisplayMediaStreamOptions {
  (boolean or MediaTrackConstraints) video = true;
  (boolean or MediaTrackConstraints) audio = false;
  CaptureController controller;
  SelfCapturePreferenceEnum selfBrowserSurface;
  SystemAudioPreferenceEnum systemAudio;
  WindowAudioPreferenceEnum windowAudio;
  SurfaceSwitchingPreferenceEnum surfaceSwitching;
  MonitorTypeSurfacesEnum monitorTypeSurfaces;
  AudioSelectionPreferenceEnum audioSelection;
};
辞書 DisplayMediaStreamOptions のメンバー
video、型は (boolean or MediaTrackConstraints)、 デフォルト値は true

true の場合、返される MediaStream に映像トラックを含めることを要求します。 Constraints 構造体が指定された場合は、 ユーザーが選択した表示サーフェスの映像トラック表現に適用する、 望ましい処理オプションをさらに指定します。 false の場合、 getDisplayMedia アルゴリズムに従って、要求は TypeError拒否されます。

audio、型は (boolean or MediaTrackConstraints)、 デフォルト値は false

true の場合、対応しており、かつユーザーが選択した 表示サーフェスで音声が利用可能であれば、返される MediaStream に音声トラックを含めることへの関心を示します。 Constraints 構造体が指定された場合は、 音声トラックに適用する望ましい処理オプションをさらに指定します。 false の場合、 MediaStream に音声トラックは含まれません。

controller、型は CaptureController

存在する場合、この CaptureController オブジェクトは、キャプチャセッションに 関連付けられます。このオブジェクトで公開されるメソッドを通じて、 キャプチャセッションを 操作できます。

selfBrowserSurface、型は SelfCapturePreferenceEnum
存在する場合、 this関連する グローバルオブジェクト関連付けられた Documentトップレベル 閲覧コンテキストに関連付けられた ブラウザー表示サーフェスを、 ユーザーに提示する選択肢に含めるかどうかについての アプリケーションの設定を示します。ユーザーエージェントは、 このヒントを無視してもよいものとします。
systemAudio、型は SystemAudioPreferenceEnum
存在する場合、モニター表示サーフェスについて、 ユーザーに提示される音声ソースの候補にシステム音声を含めることを アプリケーションが望むかどうかを示します。 ユーザーエージェントは、このヒントを無視してもよいものとします。
windowAudio、型は WindowAudioPreferenceEnum
存在する場合、ウィンドウ表示サーフェスについて、 ユーザーに提示される音声ソースの候補にウィンドウ音声または システム音声を含めることをアプリケーションが望むかどうかを示します。 ユーザーエージェントは、このヒントを無視してもよいものとします。
surfaceSwitching、型は SurfaceSwitchingPreferenceEnum
存在する場合、キャプチャされている 表示サーフェスを 動的に切り替える選択肢をユーザーに提示することを、 アプリケーションがユーザーエージェントに望むかどうかを示します。 ユーザーエージェントは、このヒントを無視してもよいものとします。
monitorTypeSurfaces、型は MonitorTypeSurfacesEnum

存在する場合、種類がモニターである 表示サーフェスを、 ユーザーに提示する選択肢に含めることをアプリケーションが ユーザーエージェントに望むかどうかを示します。 ユーザーエージェントは、このヒントを無視してもよいものとします。

注記

ユーザーエージェントは、種類が モニターである 表示サーフェスを キャプチャする選択肢を、引き続きユーザーに提示することがあります。 そのため、アプリケーションには、受け取ったトラックの displaySurface 設定を確認することが推奨されます。

audioSelection、型は AudioSelectionPreferenceEnum

存在する場合、映像とともに音声を共有する方向へユーザーを 導くことをアプリケーションがユーザーエージェントに望むかどうかを示します。 ユーザーエージェントは、このヒントを無視してもよいものとします。

MediaTrackSupportedConstraints は、ユーザーエージェントが認識する制約の一覧によって ここで拡張されます。

WebIDLpartial dictionary MediaTrackSupportedConstraints {
  boolean displaySurface = true;
  boolean logicalSurface = true;
  boolean cursor = true;
  boolean restrictOwnAudio = true;
  boolean suppressLocalAudioPlayback = true;
};
displaySurface、 型は boolean、 デフォルト値は true

displaySurface制約を 認識するかどうか。

logicalSurface、 型は boolean、 デフォルト値は true

logicalSurface制約を 認識するかどうか。

cursor、 型は boolean、 デフォルト値は true

cursor制約を認識するかどうか。

restrictOwnAudio、 型は boolean、 デフォルト値は true

restrictOwnAudio制約を 認識するかどうか。

suppressLocalAudioPlayback、型は boolean、 デフォルト値は true

suppressLocalAudioPlayback 制約を認識するかどうか。

5.4.12 MediaTrackConstraintSet の拡張

MediaTrackConstraintSet は、制約の現在の状態を読み取るために使用されます。

WebIDLpartial dictionary MediaTrackConstraintSet {
  ConstrainDOMString displaySurface;
  ConstrainBoolean logicalSurface;
  ConstrainDOMString cursor;
  ConstrainBoolean restrictOwnAudio;
  ConstrainBoolean suppressLocalAudioPlayback;
};
displaySurface、型は ConstrainDOMString

キャプチャされている表示サーフェスの種類。 この値は、DisplayCaptureSurfaceType 列挙型の値を取ります。

logicalSurface、型は ConstrainBoolean

値が true の場合は 論理表示サーフェスの キャプチャを示し、値が false の場合は 可視表示サーフェスの キャプチャを示します。

cursor、 型は ConstrainDOMString

キャプチャされた表示サーフェスにカーソルが含まれるかどうか、および いつ含まれるかを決定する CursorCaptureConstraint 列挙型の値を取ります。

restrictOwnAudio、型は ConstrainBoolean

この制約は音声トラックにのみ適用できます。 restrictOwnAudioを 参照してください。

suppressLocalAudioPlayback、型は ConstrainBoolean

この制約は音声トラックにのみ適用できます。 suppressLocalAudioPlayback を参照してください。

5.4.13 MediaTrackSettings の拡張

映像ストリームトラックで getSettings() メソッドが呼び出された場合、ユーザーエージェントは、基礎となる ユーザーエージェントの現在の状態を表す、拡張された MediaTrackSettings 辞書を返さなければなりません。

WebIDLpartial dictionary MediaTrackSettings {
  DOMString displaySurface;
  boolean logicalSurface;
  DOMString cursor;
  boolean restrictOwnAudio;
  boolean suppressLocalAudioPlayback;
  double screenPixelRatio;
};
displaySurface、 型は DOMString

キャプチャされている表示サーフェスの種類。 この値は、DisplayCaptureSurfaceType 列挙型の値を取ります。

logicalSurface、 型は boolean

値が true の場合は 論理表示サーフェスの キャプチャを示し、値が false の場合は 可視表示サーフェスの キャプチャを示します。

cursor、型は DOMString

キャプチャされた表示サーフェスにカーソルが含まれるかどうか、および いつ含まれるかを決定する CursorCaptureConstraint 列挙型の値を取ります。

restrictOwnAudio、 型は boolean

restrictOwnAudio制約が 適用されているか(true)、適用されていないか (false)を示します。

suppressLocalAudioPlayback、型は boolean

アプリケーションがユーザーエージェントに対して、ソースに ローカル音声再生の抑制を 適用するよう指示したかどうかを示します。

screenPixelRatio、 型は double

キャプチャされている表示サーフェスの スクリーンピクセル比。

5.4.14 MediaTrackCapabilities の拡張

映像ストリームトラックで getCapabilities() メソッドが呼び出された場合、ユーザーエージェントは、基礎となる ユーザーエージェントの能力を表す、拡張された MediaTrackCapabilities 辞書を返さなければなりません。

WebIDLpartial dictionary MediaTrackCapabilities {
  DOMString displaySurface;
  boolean logicalSurface;
  sequence<DOMString> cursor;
};
displaySurface、 型は DOMString

getSettings() が返す値と同じ値でなければならず、アプリケーションの観点から このプロパティを変更不能にします。

logicalSurface、 型は boolean

getSettings() が返す値と同じ値でなければならず、アプリケーションの観点から このプロパティを変更不能にします。

cursor、 型は sequence<DOMString>

ユーザーエージェントがこのトラックについて対応可能な CursorCaptureConstraint の値の集合のみで、正確に構成されなければなりません。

5.4.15 DisplayCaptureSurfaceType

DisplayCaptureSurfaceType 列挙型は、表示サーフェスのさまざまな種類を記述します。

WebIDLenum DisplayCaptureSurfaceType {
  "monitor",
  "window",
  "browser"
};
列挙値 説明
monitor モニター表示サーフェス、 物理ディスプレイ、または物理ディスプレイの集合
window ウィンドウ表示サーフェス、 または単一のアプリケーションウィンドウ
browser ブラウザー表示サーフェス、 または単一のブラウザーウィンドウ

5.4.16 CursorCaptureConstraint

CursorCaptureConstraintは、 カーソルがキャプチャされる条件を列挙します。

WebIDLenum CursorCaptureConstraint {
  "never",
  "always",
  "motion"
};
列挙値 説明
never never」 カーソルキャプチャ制約は、キャプチャされた表示サーフェスから カーソルを除外します。
always always」 カーソルキャプチャ制約は、キャプチャされた表示サーフェスに カーソルを含めます。
motion "motion" カーソルキャプチャ 制約では、カーソル/ポインターが移動すると、キャプチャ対象の表示サーフェスにカーソルが含まれる。 キャプチャされたカーソルは、ポインター/カーソルがそれ以上 移動しない状態が一定期間続くと削除される。この期間は、ユーザー エージェントによって決定される。

5.5 デバイス識別子

キャプチャの潜在的なソースは、このAPIによって個別のメディアソースとして扱われます。しかし、表示キャプチャソースは、ホストシステムに関する過剰な情報を明らかにするため、enumerateDevices() によって列挙されてはなりません

したがって、表示キャプチャソースは、その deviceId が公開されていないため、deviceId 制約を使用して選択することはできません。

注記

これは、プライバシーインジケーターを実装するアルゴリズムで使用される同名の安定かつプライベートなIDと混同しないでください。

6. 権限の統合

画面キャプチャ は、強力な機能 として識別され、"display-capture" という名前で識別され、使用するには明示的な許可が必要です。

Permissions仕様との統合に必要なように、 本仕様は次の事項を定義します:

権限状態制約
この記述子の権限状態に対する有効な値は "prompt" と "denied" です。ユーザー エージェントは、この記述子の権限状態を "granted" に設定してはなりません

7. 権限ポリシーの統合

本仕様は、文字列"display-capture" で識別されるポリシー制御機能を定義します。その デフォルト許可リスト"self" です。

注記

ドキュメント権限ポリシーは、そのドキュメント内のコンテンツがgetDisplayMediaを使用することを許可されているかどうかを決定します。どのドキュメント内であっても無効化されている場合、そのドキュメント内のコンテンツは使用を許可されません getDisplayMedia。これはユーザーに選択を促すアルゴリズムによって強制されます。

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

本仕様は、プライバシーインジケーター要件を拡張し、getUserMedia() に加え getDisplayMedia を含めます。

本仕様での[[devicesLiveMap]]、[[devicesAccessibleMap]]、および[[kindsAccessibleMap]]への参照は、getUserMedia()のプライバシーインジケーター要件をサポートするために既に作成された定義を指します。

getDisplayMedia が公開する各kindのデバイスについて、デバイスの安定したプライベートID deviceId を使用し、kind"Display" + kind に設定し、以下を実行します:

次に、上記の新しい定義に基づいて、ユーザーエージェントに対する要件は、プライバシーインジケーター要件において指定されたものと同じです。getUserMedia()

注記

単一の権限記述子がgetDisplayMediaに対して存在するにもかかわらず、上記の定義は種類によって区別し、ユーザーエージェントがエンドユーザーにどの種類の表示ソースが共有されているのかを示すプライバシーインジケーターを実装できるようにします。

注記

本仕様は、ユーザーエージェントが"granted" 権限を永続的に保存することを禁じているため、「Live」インジケーターのみが重要です。

ユーザーエージェントは、getDisplayMedia から利用可能なソースのセットの変更に基づいて、devicechange イベントを発生させてはなりません

9. セキュリティと権限

このセクションは情報提供のためのものであり、ここに含まれるアドバイスに従わない場合、プラットフォームセキュリティに重大なリスクをもたらすことを指摘しています。

表示されるコンテンツのキャプチャによって引き起こされるユーザープライバシーとセキュリティへのリスクは二重です。即座に明らかなリスクは、ユーザーが意図せずに共有するつもりのなかったコンテンツを共有してしまうこと、または共有されることに気付いていなかったことです。

表示キャプチャは、ブラウザのサンドボックスが提供するクロスサイトリクエストフォージェリ保護に対するあまり明確でないリスクを提示します。アプリケーションが直接的にはアクセスできない情報を間接的にでも制御可能な表示やキャプチャが許可されると、そのアプリケーションが本来アクセスできない情報にアクセスできる可能性があります。例えば、Canvas APIは、オリジンがクリーンではない場合、キャンバスのサンプリングやアクセス可能な形式への変換を許可しません[2DCONTEXT]。

この問題は[RTCWEB-SECURITY-ARCH]および[RTCWEB-SECURITY]で詳細に議論されています。

特にアプリケーションによって何らかの形で制御されているブラウザウィンドウを含む表示キャプチャは、これらの基本的なセキュリティ保護の違反リスクを伴います。このリスクはブラウザウィンドウに限定されるものではなく、オペレーティングシステムに依存するブラウザアプリケーションと他のアプリケーション間の制御チャネルにも影響を及ぼします。重要な考慮事項は、キャプチャされた表示面が、結果として得られるメディアを受け取るアプリケーションには本来秘匿されるべき情報を何らかの方法で表示する可能性があるかどうかです。

9.1 論理的または可視的な表示面のキャプチャ

論理的表示面のキャプチャは、ユーザーが意識していないコンテンツが共有される可能性を引き起こします。論理的表示面は、ユーザーが公開する意図がなかった情報をレンダリングする可能性があります。この情報が目に見える場合にはより容易に認識できます。このような手段は機械に対しては効果が薄いですが、人間の受信者は一瞬だけ表示されるコンテンツを処理する能力が低いです。

現在画面にレンダリングされていない情報は、昇格された権限を通じてそのコンテンツにアクセスすることが明示的に許可されていない限り、キャプチャで隠されるよう推奨されます。

論理的表示面の隠された領域がどのようにして可視的表示面のキャプチャを生成するかは、異なる場合があります。プレゼンテーションソフトウェアのようなアプリケーションは、隠された部分が隠される前に表示されていた画像をレンダリングすることで利益を得る可能性があります。画像を固定すると、変化するコンテンツに視覚的なアーティファクトを引き起こすか、コンテンツが隠されていることを隠す可能性があります。キャプチャの固定部分はバグと誤解されることがあります。代わりに、隠された領域は灰色やハッチングなどで隠されていることを示すコンテンツに置き換えられる場合があります。

一部のシステムでは、論理的表示面のみをキャプチャする場合があります。小さな画面を持つデバイスなどは、通常ウィンドウの概念を持たず、全画面モードでのみアプリケーションをレンダリングします。これらのシステムは、現在表示されていないアプリケーションのキャプチャを提供する可能性がありますが、論理的表示面をキャプチャしないと使用できない場合があります。

ウィンドウやその他の表示面をキャプチャする際に、部分的に透明な場合、その背後にあるコンテンツはキャプチャされません。

ユーザープロンプトが新しく作成されたMediaStreamTrackによって短時間ウェブページに公開されるリスクがあります。例えば、ユーザーがユーザープロンプトが表示されている画面を選択した場合です。ユーザープロンプトが選択可能なさまざまな表示面のプレビューを表示する場合、これらのプレビューは新しく作成されたMediaStreamTrackによってキャプチャされません。

9.1.1 オーディオのキャプチャ

getDisplayMediaは、ビデオと一緒にオーディオをキャプチャすることを許可しますが、これはプライバシーとセキュリティの懸念を引き起こします。これは、システムアプリケーションに関する追加情報を露出する可能性があり、共有されるオーディオソースのセットが必ずしも共有されるビデオソースのセットと同じではないためです。例えば、ウィンドウのビデオのキャプチャに全システムのオーディオ(そのウィンドウに関連しないアプリケーションを含む)が付随する場合、アクティブなユーザーの同意なしでは共有されません。ユーザーが共有する内容、特に可能なオーディオについて認識していることが重要です。ユーザーがビデオには同意するがオーディオには同意しないことができるようにすることが強く推奨されます。これにより、ビデオ専用のストリームが生成されます。これにより、オーディオのリクエストが常にオプションとなり、ビデオ専用のリクエストと比較してユーザーの選択肢が制限されることがありません。

9.2 ディスプレイキャプチャの許可

この文書は、ユーザーの同意を確認するために使用されるメカニズムに追加の制限を設けることを推奨します。これらの制限は、APIがもたらすセキュリティおよびプライバシーリスクを軽減することを目的としています。

2つの同意の形式が説明されています:アクティブなユーザーの同意と、さまざまな昇格された権限です。これらは規範的ではなく、推奨事項のみです。

9.2.2 昇格された権限

昇格された権限を必要とすることを強く推奨します。これにより、コンテンツのクロスオリジン保護を回避するために使用される可能性のある表示面へのアクセスが制限されます。この同意プロセスの主な目標は、ユーザーがコンテンツを共有する意図を示すだけでなく、アクセスを許可されるアプリケーションに対する信頼の向上を確認することです。

いくつかの異なるコントロールが昇格された権限を付与するために提供される可能性があります。このセクションでは、独立して付与できるいくつかの異なる能力を説明します。ユーザーエージェントは、昇格された権限を必要とする能力へのアクセスを禁止することを選択する場合があります。

これらの表示面へのアクセスがサポートされている場合、昇格された権限を取得するためのメカニズムが単純なユーザー同意プロンプトにのみ依存しないことを強く推奨します。いかなるアクションも、アプリケーションに昇格された権限を付与する決定が意図的であることを保証する必要があります。たとえば、ユーザーエージェントは、昇格された権限が付与されることを示すためにソフトウェアインストールに相当するプロセスを要求する場合があります。

昇格された権限の体験は、ユーザーエージェントがこの機能を有効にすることに関連するリスクを伝えるか、少なくともアプリケーションに対する信頼の向上の必要性を伝えることを可能にする場合があります。

ただし、昇格された権限アクティブなユーザーの同意の代替ではありません。ユーザーエージェントが、昇格された権限を持つアプリケーションであっても、共有する内容を選択する機能を引き続きユーザーに提供することを推奨します。

9.2.3 昇格された権限に依存する能力

昇格された権限は、 次に示すキャプチャへのアクセスの前提条件とすることが推奨される。すなわち、 モニターまたはブラウザー表示サーフェスのキャプチャである。完全な モニターのキャプチャも含まれることに注意されたい。これは、 ユーザーエージェントのウィンドウが含まれる可能性があるためである。

同様に、昇格された権限を 前提条件とすることが推奨される。これは、論理表示サーフェスへのアクセスが 通常であれば 提供されない場合に該当する。

オリジンに付与された昇格された権限を永続化することが推奨される。昇格された権限のプロセスは、 ユーザーの意図を正しく把握するために、 その新規性に部分的に依存している。

9.3 キャプチャ中のフィードバックとインターフェース

実装では、[GETUSERMEDIA]で推奨されているように、カメラやマイクを共有する際にユーザーに提供されるものと同様のフィードバックとコントロール機構を提供することが推奨されます。

コンテンツがアクティブにキャプチャされているとき、ユーザーがコンテンツが共有されていることを認識することが重要です。ユーザーエージェントは、コンテンツがキャプチャされている間、目立つインジケーターを表示することが推奨されます。インジケーターに加えて、ユーザーエージェントが、正確に何が共有されているかを確認する手段を提供することが推奨されます。この機能は、キャプチャされたコンテンツをレンダリングすることでアプリケーションが簡単に提供できるものですが、ユーザーが共有されている内容を正確に評価することを可能にします。

フィードバック機構に加えて、ユーザーがアクティブなキャプチャを停止する手段を提供することが推奨されます。

A. 参考文献

A.1 規範参考文献

[2DCONTEXT]
HTML Canvas 2D コンテキスト. Rik Cabanier; Jatinder Mann; Jay Munro; Tom Wiltzius; Ian Hickson. W3C. 2021年1月28日. W3C 勧告. URL: https://www.w3.org/TR/2dcontext/
[css-values]
CSS 値と単位モジュール レベル 4. Tab Atkins Jr.; Elika Etemad. W3C. 2024年3月12日. W3C 作業草案. URL: https://www.w3.org/TR/css-values-4/
[css-viewport]
CSS ビューポートモジュール レベル 1. Florian Rivoal; Emilio Cobos Álvarez. W3C. 2024年1月25日. 初回公開作業草案. URL: https://www.w3.org/TR/css-viewport-1/
[cssom-view]
CSSOM ビューモジュール. Simon Fraser; Emilio Cobos Álvarez. W3C. 2025年9月16日. W3C 作業草案. URL: https://www.w3.org/TR/cssom-view-1/
[dom]
DOM 標準. Anne van Kesteren. WHATWG. 現行標準. URL: https://dom.spec.whatwg.org/
[ECMA-262]
ECMAScript 言語仕様. Ecma International. URL: https://tc39.es/ecma262/multipage/
[GETUSERMEDIA]
メディアキャプチャとストリーム. Cullen Jennings; Jan-Ivar Bruaroey; Henrik Boström; youenn fablet. W3C. 2025年10月9日. 候補勧告草案. URL: https://www.w3.org/TR/mediacapture-streams/
[hr-time]
高精度時間. Yoav Weiss. W3C. 2026年3月24日. W3C 作業草案. URL: https://www.w3.org/TR/hr-time-3/
[HTML]
HTML 標準. Anne van Kesteren; Domenic Denicola; Dominic Farolino; Ian Hickson; Philip Jägenstedt; Simon Pieters. WHATWG. 現行 標準. URL: https://html.spec.whatwg.org/multipage/
[infra]
Infra 標準. Anne van Kesteren; Domenic Denicola. WHATWG. 現行標準. URL: https://infra.spec.whatwg.org/
[Permissions]
権限. Marcos Caceres; Mike Taylor. W3C. 2025年10月6日. W3C 作業草案. URL: https://www.w3.org/TR/permissions/
[permissions-policy]
権限ポリシー. Ian Clelland. W3C. 2026年6月18日. W3C 作業草案. URL: https://www.w3.org/TR/permissions-policy-1/
[RFC2119]
RFC で要件レベルを示すために使用する キーワード. S. Bradner. IETF. 1997年3月. 現行の最良慣行. URL: https://www.rfc-editor.org/info/rfc2119/
[RFC8174]
RFC 2119 のキーワードにおける大文字と小文字の 曖昧さ. B. Leiba. IETF. 2017年5月. 現行の最良慣行. URL: https://www.rfc-editor.org/info/rfc8174/
[RTCWEB-SECURITY]
WebRTC のセキュリティに関する 考慮事項. E. Rescorla. IETF. 2021年1月. 標準化への提唱. URL: https://www.rfc-editor.org/info/rfc8826/
[RTCWEB-SECURITY-ARCH]
WebRTC セキュリティアーキテクチャ. E. Rescorla. IETF. 2021年1月. 標準化への提唱. URL: https://www.rfc-editor.org/info/rfc8827/
[WEBIDL]
Web IDL 標準. Edgar Chen; Timothy Gu. WHATWG. 現行標準. URL: https://webidl.spec.whatwg.org/

A.2 参考参考文献

[MEDIACAPTURE-DEPTH]
メディアキャプチャ深度ストリーム 拡張。Anssi Kostiainen; Ningxin Hu; Rijubrata Bhaumik; Rob Manson。W3C。2022 年 2 月 1 日。W3C ワーキングドラフト。URL: https://www.w3.org/TR/mediacapture-depth/
[WEBRTC]
WebRTC:ブラウザーにおけるリアルタイム通信。 Cullen Jennings; Jan-Ivar Bruaroey; Henrik Boström; Florent Castelli。 W3C。2025 年 3 月 13 日。W3C 勧告。URL: https://www.w3.org/TR/webrtc/