Copyright © 2015-2026 World Wide Web Consortium. W3C® liability, trademark and permissive document license rules apply.
この文書は、ユーザーの表示、またはその一部を、
getDisplayMedia
を使用してメディアストリームのソースとして利用する方法を定義します。これは Media Capture API の拡張です
[GETUSERMEDIA].
この節では、この文書の公開時点における位置付けについて説明します。現在の W3C 公開文書の一覧およびこの技術報告書の最新版は、 W3C 標準および草案の 索引で確認できます。
この文書は未完成です。大幅に変更される可能性があり、 初期段階での実験は推奨されますが、したがって、 実装を目的としたものではありません。
この文書は、Web リアルタイム コミュニケーション・ワーキンググループによって、 勧告 トラックを使用したワーキングドラフトとして公開されました。
ワーキングドラフトとしての公開は、 W3C およびその会員による 承認を意味するものではありません。
これは草案文書であり、いつでも他の文書によって更新、置換、または廃止される 可能性があります。この文書を進行中の作業以外のものとして 引用することは不適切です。
この文書は、 W3C 特許 方針の下で活動するグループによって作成されました。 W3C は、グループの 成果物に関連して行われた すべての特許開示の公開リストを 管理しています。このページには、 特許を開示するための手順も記載されています。必須クレームを含むと 個人が考える特許について実際の知識を有する者は、 必須クレームに関する 情報を、W3C 特許方針の第 6 節に従って開示しなければなりません。
この文書には、 2025 年 8 月 18 日付の W3C プロセス文書が適用されます。
この節は規範的ではありません。
この文書は、Media Capture API [GETUSERMEDIA] の拡張を説明しており、ユーザーの表示またはその一部をビデオトラックの形で取得できるようにします。場合によってはシステム、アプリケーション、もしくはウィンドウのオーディオもキャプチャされ、オーディオトラックの形で提供されます。これにより、WebRTC を用いた画面共有など多くのアプリケーションが可能になります [WEBRTC]。
この機能は重大なセキュリティ上の影響を持ちます。この API を使用してユーザーに表示されている情報へアクセスするアプリケーションは、アプリケーションの制御下にある場合、他のオリジンの機密情報にアクセスしてしまう可能性があります。これには、ユーザーエージェントのサンドボックスによる保護により通常はアクセス不能なコンテンツが含まれます。
この文書は主にビデオおよびオーディオのキャプチャに関する内容を扱います [GETUSERMEDIA]。しかしここで定義される一般的な仕組みは、現在定義されている depth [MEDIACAPTURE-DEPTH] のような他の種類のメディアへ拡張することもできます。
非規範的と明記された節に加え、この仕様書のすべての作成ガイドライン、図、例、および注記は非規範的です。本仕様書のそれ以外のすべては規範的です。
本文書中のキーワード MAY、MUST、MUST NOT、および SHOULD は、全て大文字で現れる場合に限り、BCP 14 に記載されているとおりに解釈されます [RFC2119] [RFC8174]。
この仕様は単一の製品に適用される適合基準を定義します:この仕様に含まれるインターフェイスを実装する user agent です。
本仕様で定義される API を実装するために ECMAScript [ECMA-262] を用いる実装は、Web IDL 仕様で定義される ECMAScript バインディングに従って実装する必要があります [WEBIDL]。本仕様はその仕様と用語を使用しています。
次の例は、本文書で定義された 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);
}
この文書は MediaStream、
MediaStreamTrack
および ConstrainablePattern
の定義を [GETUSERMEDIA] から使用します。
画面キャプチャは、いくつかの異なる種類の画面ベースの表面のキャプチャを包含します。これらを総称して display surfaces と呼び、本書では次の型を定義します:
MediaStreamTrack
としてキャプチャされます。
この文書は、各種の display surface の二つの変種を区別します:
一部のオペレーティングシステムでは、異なるアプリケーションのウィンドウが他のウィンドウを全部または一部で覆い隠すことが可能なため、visible display surface は logical display surface の厳密な部分集合になります。
source pixel ratio は、display surface の垂直ピクセルサイズで割った 1/96 インチの値です。
The devicechange イベントは [GETUSERMEDIA] に定義されています。
表示されているメディアのキャプチャは、getDisplayMedia という新しいメソッドを MediaDevices インターフェイスに追加することで有効になります。これは getUserMedia()
に類似していますが、呼び出されるたびにエンドユーザーが選択した単一の表示デバイスからメディアを取得する点が異なります。
WebIDLpartial interface MediaDevices {
Promise<MediaStream> getDisplayMedia(optional DisplayMediaStreamOptions options = {});
};
getDisplayMedia
ユーザーに対して表示のライブキャプチャの許可を求めます。
ユーザーエージェントは、エンドユーザーが毎回利用可能な選択肢の中から共有する表示面を選べるようにしなければならず(MUST)、options.video や
options.audio に含まれるいかなる MediaTrackConstraints
を用いてその選択を制限してはなりません(MUST NOT)。
ユーザーエージェントは、displaySurface
制約の存在およびその値を、ユーザーに提示するソースの表示に影響させることができます(MAY)。それでもユーザーエージェントは依然として任意の表示面を無制限に選択できるように提供しなければなりません(MUST)。ユーザーエージェントは、モニターの共有はリスクが高いためユーザーが選択しないよう促すことが強く推奨されます。
options.video や options.audio に含まれるいかなる MediaTrackConstraints
も、ユーザーが選択を行った後にのみユーザーが選択したメディアへ適用されなければなりません(MUST)。
音声に関しては、ユーザーエージェントはエンドユーザーに共有するオーディオソースを提示してもよい(MAY)ものとします。どの選択肢を提示するかはユーザーエージェント次第であり、提示される音声ソースが必ずしもビデオソースと同一であるとは限りません。オーディオソースは特定のウィンドウ、ブラウザー、システム全体のオーディオ、あるいはそれらの組み合わせであり得ます。オーディオとビデオの両方を要求した場合でも、ユーザーエージェントはオーディオを返さないことが許されています。生涯にわたってオーディオが共有されないことが確実であるとユーザーエージェントが判断した場合、それは結果のストリームにオーディオトラックを含めてはなりません(MUST NOT)。ユーザーエージェントは、オーディオとビデオの要求に対してビデオトラックのみを返すか(MAY)、オーディオトラックとビデオトラックの両方を返すことができます(MAY)。ただし、オーディオのみの要求は拒否されなければなりません(MUST)。
getDisplayMedia
は、異なるソース集合からメディアを取得しユーザー選択を要求する点に加え、getUserMedia()
と異なり、"granted"
の権限を永続化することはできません。
getDisplayMedia()
が呼び出されると、ユーザーエージェントは次の手順を実行しなければなりません(MUST):
mediaDevices をこの操作の this とします。
controller を options.controller が存在すればそれに、存在しなければ
null にします。
もし controller が null でない場合、次の手順を実行します:
もし controller.[[IsBound]] が true
であれば、reject された promise を、DOMException
オブジェクト(そのname
属性が InvalidStateError
の値を持つ)で返して終了します。
controller.[[IsBound]] を true
に設定します。
もしこの操作の relevant
global object が transient
activation を持たない場合、reject された promise を、DOMException
オブジェクト(そのname
属性が InvalidStateError
の値を持つ)で返して終了します。
このメソッドの第一引数を options とします。
constraints を [options.audio,
options.video] とします。
もし constraints.video が false であれば、新たに作成された reject された promise を、作成された TypeError
で返します。
constraints の中で値 CS が辞書である既存の各メンバーについて、次の手順を実行します:
CSに、名前が
advancedであるメンバーが含まれている場合、promiseを却下して
返す。却下理由には、新しく作成されたTypeErrorを用いる。
CSに、その名前が
表示サーフェスに適用可能な制約可能なプロパティを指定するメンバーが含まれ、
さらに、その値が、次のいずれかの名前を持つメンバーを含む辞書であり、
名前がminまたはexactである場合、
promiseを却下して返す。却下理由には、新しく
作成されたTypeErrorを用いる。
CSに、その名前が
表示サーフェスに適用可能な制約可能なプロパティを指定するメンバーが含まれ、
さらに、その値が、次の名前を持つメンバーを含む辞書であり、
その名前がmaxで、さらにそのメンバーの値が
制約可能なプロパティの下限値より小さい場合、
failedConstraintをそのメンバーの名前とし、
messageをundefinedまたは
人間が読める有益なメッセージのいずれかとし、promiseを
却下して返す。却下理由には、新しい
OverconstrainedErrorを用いる。これは、
OverconstrainedError(failedConstraint,
message)を呼び出して作成する。
requestedMediaTypes を、constraints のうち辞書値または true
の値を持つメディア型の集合とします。
もしこの操作の current
settings object の relevant
global object に関連付けられた Document
が完全にアクティブでない(fully
active でない)か、フォーカスを持っていない(have focus でない)場合、reject された promise を、DOMException
オブジェクト(そのname
属性が InvalidStateError
の値を持つ)で返して終了します。
p を新しい promise とします。
次の手順を並列で実行します:
requestedMediaTypes の各メディア型 T について、
もし型 T のソースが存在しない場合、ユーザーインタラクションタスクソースに対してタスクをキューし、p
を新しい DOMException(そのname
属性が NotFoundError
の値を持つ)で reject
し、これらの手順を中止します。
現在の閲覧コンテキストで型 T のソースを取得するための権限状態を読み取ります。もし権限状態が "denied"
であれば、下のラベル 許可失敗 にジャンプします。
任意で、例えば事前に確立されたユーザープリファレンス、セキュリティ上の理由、あるいはプラットフォームの制約に基づいて、下のラベル 許可失敗 にジャンプしてもよい。
ユーザーに表示デバイスを選択させるよう 促し、その結果として提供されるメディアの集合を得ます。これは
PermissionDescriptor
の name
が "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 し、これらの手順を中止します。
stream を MediaStream
オブジェクトとします。
ユーザーが許可した各 source について、次の手順を実行します:
track を source と mediaDevices を用いて MediaStreamTrack を作成 した結果とします。
track を stream のトラック集合に追加します。
Tie track source to MediaDevices を source と mediaDevices で実行します。
適切な制約を用いて stream の全てのトラックに対して ApplyConstraints
アルゴリズム を実行します。これが失敗した場合、失敗した結果を failedConstraint に、人間が読める説明を
message にそれぞれ設定し、ユーザーインタラクションタスクソースにタスクをキューして p を
OverconstrainedError(failedConstraint, message)
で拒否し、これらの手順を中止します。
この getDisplayMedia()
の呼び出しは、現在新しい キャプチャセッション
を生成したものと見なされます。
ユーザーインタラクションタスクソースにタスクをキューして、次の手順を実行します:
もし controller が null でない場合、次の手順を実行します:
controller.[[Source]] を
stream のビデオトラックの [[Source]]
に設定します。
controller.[[DisplaySurfaceType]]
を、stream のビデオトラックの DisplayCaptureSurfaceType
に設定します。
last activation timestamp を現在の高解像度時刻に設定します。
Resolve p を stream で完了させます。
もし controller が null でない場合、ユーザーインタラクションタスクソースにタスクをキューして
controller に対して finalize focus decision
algorithm を実行します。
これらの手順を中止します。
許可失敗: ユーザーインタラクションタスクソースにタスクをキューして、p を新しい DOMException(そのname
属性が NotAllowedError
の値を持つ)で reject します。
p を返します。
トップレベルのドキュメントがフォーカスを失ったとき、そのドキュメント内およびネストされた閲覧コンテキストのドキュメントにあるすべての CaptureController
オブジェクトに対して次の手順を実行します:
もし [[Source]] が
undefined であれば、これらの手順を中止します。
[[FocusChangeDisabled]] を
true に設定します。
ユーザーエージェントがしてはならないのは、 部分的に透明なキャプチャ対象の 表示サーフェスの背後にあるコンテンツをキャプチャすることである。
新たに作成されたMediaStreamTrackについて、
ユーザーエージェントが
してはならないのは、ユーザーに表示されたプロンプトをキャプチャすることである。
現在画面にレンダリングされていない情報は、キャプチャ内で不明瞭にされるべきである。 ただし、アプリケーションがそのコンテンツにアクセスすることを明示的に 認可されている場合(たとえば、 昇格された権限などの手段を通じて)は除く。
ユーザーエージェントがしてはならないのは、音声を ユーザーの能動的な 同意なしに共有することである。たとえば、ウィンドウの映像のキャプチャに、そのウィンドウとは無関係なアプリケーションを 含むシステム全体の音声のキャプチャが伴う場合が該当する。
共有されている表示サーフェスは、一時的または 永続的にアプリケーションからアクセスできなくなる場合がある。これは、 オペレーティングシステムまたはユーザーエージェントによって行われた措置による。何をもって表示 サーフェスをアクセス不能とみなすかは、この 仕様の範囲外であるが、例として考えられるのは、モニターが 切断されること、ウィンドウまたはブラウザーが閉じられるか最小化されること、あるいは 電話への 着信である。
ユーザーエージェントは最終的にこの文脈で「アクセス不能」が何を意味するかを決定しますが、外部要因による中断に対してのみミュートおよびミュート解除イベントを発火することが推奨されます。
表示サーフェスが、必ずしも
永続的ではないアクセス不能状態になった場合、ユーザーエージェントは必ずタスクをキューに入れなければならない。このタスクが
ユーザー
インタラクションタスクソース上で設定するミュート状態は、
対応するメディア
トラックのものであり、その値はtrueである。
表示サーフェスがアクセス不能状態を脱して
アクセス可能になった場合、ユーザーエージェントは必ずタスクをキューに入れなければならない。このタスクが
ユーザー
インタラクションタスクソース上で設定するミュート状態は、
対応するメディアトラックのものであり、
その値はfalseである。
表示サーフェスが 永続的なアクセス不能状態(ソースウィンドウが閉じる場合など)になった場合、 ユーザーエージェントは必ずタスクをキューに入れなければならない。このタスクが ユーザー インタラクションタスクソース上で 終了させるのは、対応するメディア トラックである。
直前にgetDisplayMediaから返されたストリームが
してもよいのは、デフォルトでミュートされたトラックを含むことである。同じストリームに
属するオーディオトラックとビデオトラックがしてもよいのは、相互に独立して
ミュート/ミュート解除されることである。
ソース選択のための制約を受け付けないということは、getDisplayMedia
が音声、映像、または音声と映像の表示ソースが存在するかどうかを公開するフィンガープリンティングの側面のみを提供することを意味します。 ![]()
displaySurface
制約を受け入れても、ユーザーの選択を制限するものではない点に注意してください。
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 |
この文字列は、
設定として、キャプチャされている表示サーフェスの種類を示します。 能力として、設定値のみが唯一の値として存在しなければならず、 アプリケーションの観点からこのプロパティを変更不能にします。 制約として、この値は特定の表示サーフェスの種類に対する
アプリケーションの設定をユーザーエージェントに伝えます。
ユーザーエージェントは、その設定に従ってユーザーに提示する選択肢を
並べ替えてもよいものとします。この制約はその他のすべての目的では無視されるため、
副作用( |
| logicalSurface | boolean |
設定として、値が true の場合は
論理表示
サーフェスのキャプチャを示し、
値が false の場合は可視表示サーフェスの
キャプチャを示します。能力として、この同じ値のみが
唯一の値として存在しなければならず、アプリケーションの観点から
このプロパティを変更不能にします。
|
| cursor | DOMString |
この文字列は、
CursorCaptureConstraint
のメンバーのいずれかです。設定として、キャプチャされた
表示サーフェスにカーソルが
含まれるかどうか、およびいつ含まれるかを示します。能力として、
ユーザーエージェントは、この表示サーフェスについて
対応可能な CursorCaptureConstraint
の値の集合のみを含めなければなりません。
|
| screenPixelRatio | double |
設定値としては、1.0 の ページズームおよび 1.0 のスケール係数を使用した場合の CSS ピクセルのサイズを、 表示サーフェスのピクセルの垂直サイズで 除算した結果である。これは制約または 能力として使用することはできない。 |
次の新規および既存の MediaStreamTrack
の制約可能な
プロパティは、
ユーザーが選択した音声ソースに、次の動作で適用されるものとして
定義されます。
| プロパティ名 | 型 | 動作 |
|---|---|---|
| restrictOwnAudio | boolean |
設定として、この値はユーザーエージェントがソースに 自身の音声の 制限を適用しているかどうかを示します。 制約として、このプロパティを制約することにより、 自身の音声の 制限が有効または無効になったソースを得ることができます。 自身の音声の制限が適用される場合、
ユーザーエージェントは、 |
| suppressLocalAudioPlayback | boolean |
設定として、この値はアプリケーションがユーザーエージェントに対して、 ソースにローカル音声 再生の抑制を適用するよう指示したかどうかを示します。 制約として、この値はユーザーがブラウザーの
表示サーフェスのキャプチャを
選択した場合にのみ意味を持ちます。その場合、値が ローカル音声再生の抑制が適用される場合、 ユーザーエージェントはローカルスピーカーへの音声の中継を 停止することが望まれますが、その音声は進行中の音声キャプチャを行う キャプチャセッション によって引き続きキャプチャされなければなりません。この抑制は、 キャプチャされる文書から観察可能であってはなりません。 さらに、キャプチャする文書は suppressLocalAudioPlayback を適用しているかどうかのみを観察でき、その抑制が実際に効果を 発揮しているかどうかを観察することはできません (すなわち、ユーザーがユーザーエージェントでこの設定を上書きしているかどうかは 観察できません)。 ブラウザーの表示サーフェスが、
複数の同時キャプチャの対象となっている場合、少なくとも 1 つの
アクティブな音声キャプチャを行うキャプチャセッションが
suppressLocalAudioPlayback
を |
ユーザーが選択した表示サーフェスの基礎となるソースに固有の プロパティが、たとえばエンドユーザーがキャプチャ中のウィンドウのサイズを変更したことに 応じて変化し、その変化によって 1 つ以上の制約可能なプロパティの 能力および設定の一方または両方が古くなった場合、ユーザーエージェントは ユーザー 操作タスクソースで、次の手順を実行するタスクをキューに 入れなければなりません。
影響を受けるすべての制約可能なプロパティを同時に更新します。
これにより「過剰制約」状態が発生する場合、ユーザーエージェントは、 原因となる制約が過剰制約を生じさせている間、その制約を 無視しなければなりません。ユーザーエージェントはトラックを ミュートしてはなりません。
min 制約および exact 制約は getDisplayMedia() で TypeError を 発生させますが、この仕様は track.applyConstraints() メソッドを 変更しません。そのため、値によっては OverconstrainedError を発生させるか、 成功する場合があり、したがって、この「過剰制約」状態を引き起こす可能性のある 状態で存在し得ます。max 制約も、たとえば aspectRatio によって この状態を引き起こすことがあります。この仕様では、これらを 有用ではないエッジケースと見なします。
SelectSettings アルゴリズムの目的上、ユーザーエージェントは、元の 表示サーフェスの アスペクト比を維持する(最も近いピクセルに丸めた)ダウンスケーリング済み寸法の 可能なすべての組み合わせ、およびフレーム間引きを通じて利用可能な フレームレートを、利用可能な設定 辞書として考慮することが望まれます。
制約によるダウンスケーリングおよび間引きの効果は、 実質的に適合度距離 アルゴリズムによって制御されます。
その意図は、ideal の width、ideal の height、
および ideal の frameRate のいずれかが指定された場合に、
元の表示サーフェスの
アスペクト比を常に維持しながら、それらに近い出力をユーザーエージェントが
生成することです。
適用された制約によって別途指示されない限り、ユーザーエージェントは デフォルトでソースピクセル比に従って ダウンスケーリングすることが望まれます。
ユーザーエージェントは、キャプチャされた出力をクロップしてはなりません。
集約された表示サーフェスで高い解像度および フレームレートを維持するために必要な場合を除き、ユーザーエージェントは キャプチャされた出力をアップスケーリングしたり、追加のフレームを 作成したりしてはなりません。
この仕様における正の数値型の各制約可能なプロパティについて、
ユーザーエージェントは、ソースにかかわらずユーザーエージェントが対応する
最小の許容値を表す下限値を
設定しなければなりません。この値は一定でなければならず、
0 より大きくなければなりません。ユーザーエージェントには、
ソースにかかわらず下限値を超える
すべての値に対応することが推奨されます。
下限値の目的は、
ユーザーにすでに確認を求めた後で
getDisplayMedia()
が OverconstrainedError により失敗することをユーザーエージェントが
回避し、ユーザーのシステムに関する情報の漏洩を防ぐことです。
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」
を非推奨にする可能性について調査しています。
CaptureController
オブジェクトは、キャプチャセッションに
関連付けることができます。これは、
getDisplayMedia()
の呼び出し、その結果のストリーム、またはトラックではなく、
キャプチャセッション
自体に関連する機能を公開するために使用されます。
任意のキャプチャセッションには、
最大で 1 つのCaptureControllerが
関連付けられます。
任意のキャプチャセッションに関連付けられる
CaptureControllerは、
最大で 1 つです。
WebIDL[Exposed=Window, SecureContext]
interface CaptureController : EventTarget {
constructor();
undefined setFocusBehavior(CaptureStartFocusBehavior focusBehavior);
};
CaptureControllerは、
まだイベントハンドラーを定義していないため、
EventTargetから
継承する必要はありません。これは、将来の仕様が
CaptureControllerを
イベントハンドラー属性で拡張する場合に備えるためのものです。
継承が使用されない場合は削除できます。
constructor
CaptureController
オブジェクトを作成します。
| 内部スロット | 初期値 | 説明(非規範的) |
|---|---|---|
| [[IsBound]] | false
|
アプリケーションが this をキャプチャセッション に関連付けようとしたかどうか。 |
| [[Source]] | null
|
関連付けられたキャプチャセッションのソース。 |
| [[DisplaySurfaceType]] | null
|
キャプチャが開始されると、キャプチャされた 表示サーフェスの 種類に設定されます。 |
| [[FocusChangeDisabled]] | false
|
外部イベントまたはユーザーエージェントの判断によって、 フォーカス変更が無効にされているかどうか。 |
| [[FocusDecisionFinalized]] | false
|
フォーカスに関する決定が確定したときに true に設定されます。 |
| [[FocusBehavior]] | null
|
アプリケーションが望むフォーカス動作。 |
ユーザーエージェントは、自身のロジックに基づいて、いつでも
[[FocusChangeDisabled]]を
true に設定してもよいものとします。
setFocusBehavior
次の手順を実行します。
focusBehavior をメソッドの最初の引数とします。
this.[[Source]]が
null の場合、
this.[[FocusBehavior]]を
focusBehavior に設定し、これらの手順を中止します。
this.[[Source]]が
停止済みである場合、
「InvalidStateError」
DOMException
をスローします。
this.[[DisplaySurfaceType]]が
「browser」
でも
「window」
でもない場合、
「InvalidStateError」
DOMException
をスローします。
this.[[FocusDecisionFinalized]]
が true の場合、
「InvalidStateError」
DOMException
をスローします。
this.[[FocusBehavior]]を
focusBehavior に設定します。
thisに対して、 フォーカス決定確定 アルゴリズムを実行します。
controller が与えられた場合の フォーカス決定確定アルゴリズムは、 次の手順を実行することで構成されます。
キャプチャセッションの開始から
長すぎる時間が経過している場合、ユーザーエージェントは
[[FocusDecisionFinalized]]を
true に設定することが望まれます。時間の長さは
ユーザーエージェントに委ねられますが、1 秒を使用することが推奨されます。
controller.[[FocusDecisionFinalized]]
が true の場合、これらの手順を中止します。
controller.[[FocusDecisionFinalized]]を
true に設定します。
controller.[[FocusChangeDisabled]]
が true の場合、これらの手順を中止します。
controller.[[DisplaySurfaceType]]が
「browser」
でも
「window」
でもない場合、これらの手順を中止します。
focusBehavior を
controller.[[FocusBehavior]]とします。
次の手順を並行して 実行します。
focusBehavior が
「focus-capturing-application」
の場合、キャプチャする文書を表す
表示サーフェスに
フォーカスします。
focusBehavior が
「focus-captured-surface」
の場合、
controller.[[Source]]が参照する
表示サーフェスに
フォーカスします。
アプリケーションが存在する表示サーフェスを、 ユーザーに提示する選択肢に含めるべきかどうかについて、 アプリケーションが指定できるさまざまなヒントを記述します。
WebIDLenum SelfCapturePreferenceEnum {
"include",
"exclude"
};
| 列挙値 | 説明 |
|---|---|
include
|
アプリケーションは、サーフェスを提示される選択肢に 含めることを優先します。 |
exclude
|
アプリケーションは、サーフェスを提示される選択肢から 除外することを優先します。 |
getDisplayMedia()
を呼び出すアプリケーションが、モニターの
表示サーフェスについて
ユーザーに提示される音声ソースにシステム音声を含めることを、
ユーザーエージェントに望むかどうかを記述します。
その他の種類の表示サーフェスには
適用されません。
WebIDLenum SystemAudioPreferenceEnum {
"include",
"exclude"
};
| 列挙型の説明 | |
|---|---|
include
|
アプリケーションは、モニターの 表示サーフェスについて、 システム音声を共有する選択肢をユーザーに提示することを優先します。 |
exclude
|
アプリケーションは、モニターの 表示サーフェスについて、 システム音声を共有する選択肢をユーザーに提示しないことを優先します。 |
getDisplayMedia()
を呼び出すアプリケーションが、ウィンドウの
表示サーフェスについて
ユーザーに提示される音声ソースにウィンドウ音声またはシステム音声を含めることを、
ユーザーエージェントに望むかどうかを記述します。
WebIDLenum WindowAudioPreferenceEnum {
"system",
"window",
"exclude"
};
| 列挙型の説明 | |
|---|---|
system
|
アプリケーションは、ウィンドウの 表示サーフェスについて、 システム音声を共有する選択肢をユーザーに提示することを優先します。 |
window
|
アプリケーションは、ウィンドウの 表示サーフェスについて、 ウィンドウ音声を共有する選択肢をユーザーに提示することを優先します。 |
exclude
|
アプリケーションは、ウィンドウの 表示サーフェスについて、 音声を共有する選択肢をユーザーに提示しないことを優先します。 |
getDisplayMedia()
を呼び出すアプリケーションが、キャプチャ中にソースの
表示サーフェスを動的に切り替える
選択肢をユーザーに提示することを、ユーザーエージェントに望むかどうかを
記述します。
WebIDLenum SurfaceSwitchingPreferenceEnum {
"include",
"exclude"
};
| 列挙型の説明 | |
|---|---|
include
|
アプリケーションは、キャプチャ中にソースの 表示サーフェスを 動的に切り替える選択肢をユーザーに提示することを優先します。 |
exclude
|
アプリケーションは、キャプチャ中にソースの 表示サーフェスを 動的に切り替える選択肢をユーザーに提示しないことを優先します。 |
アプリケーションが、種類がモニターである 表示サーフェスを 選択する選択肢をユーザーに提示することを、ユーザーエージェントに望むかどうかを 記述します。
WebIDLenum MonitorTypeSurfacesEnum {
"include",
"exclude"
};
| 列挙型の説明 | |
|---|---|
include
|
アプリケーションは、ユーザーに提示される 表示サーフェスに、 種類がモニターであるものを含めることを優先します。 |
exclude
|
アプリケーションは、ユーザーに提示される 表示サーフェスから、 種類がモニターであるものを除外することを優先します。 |
getDisplayMedia()
を呼び出すアプリケーションが、映像とともに音声をキャプチャすることを
ユーザーエージェントに優先させたいかどうかを記述します。
WebIDLenum AudioSelectionPreferenceEnum {
"preferred"
};
| 列挙型の説明 | |
|---|---|
preferred
|
アプリケーションは、ユーザーエージェントが映像とともに音声を キャプチャすることを優先するよう望みます。 |
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
systemAudio、型は
SystemAudioPreferenceEnum
windowAudio、型は
WindowAudioPreferenceEnum
surfaceSwitching、型は
SurfaceSwitchingPreferenceEnum
monitorTypeSurfaces、型は
MonitorTypeSurfacesEnum
存在する場合、種類がモニターである 表示サーフェスを、 ユーザーに提示する選択肢に含めることをアプリケーションが ユーザーエージェントに望むかどうかを示します。 ユーザーエージェントは、このヒントを無視してもよいものとします。
ユーザーエージェントは、種類が
モニターである
表示サーフェスを
キャプチャする選択肢を、引き続きユーザーに提示することがあります。
そのため、アプリケーションには、受け取ったトラックの
displaySurface
設定を確認することが推奨されます。
audioSelection、型は
AudioSelectionPreferenceEnum
存在する場合、映像とともに音声を共有する方向へユーザーを 導くことをアプリケーションがユーザーエージェントに望むかどうかを示します。 ユーザーエージェントは、このヒントを無視してもよいものとします。
MediaTrackSupportedConstraints
の拡張
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、
デフォルト値は truelogicalSurface制約を
認識するかどうか。
cursor、
型は boolean、
デフォルト値は true
cursor制約を認識するかどうか。
restrictOwnAudio、
型は boolean、
デフォルト値は true
restrictOwnAudio制約を
認識するかどうか。
suppressLocalAudioPlayback、型は
boolean、
デフォルト値は true
suppressLocalAudioPlayback
制約を認識するかどうか。
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
を参照してください。
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、
型は booleanrestrictOwnAudio制約が
適用されているか(true)、適用されていないか
(false)を示します。
suppressLocalAudioPlayback、型は
boolean
アプリケーションがユーザーエージェントに対して、ソースに ローカル音声再生の抑制を 適用するよう指示したかどうかを示します。
screenPixelRatio、
型は doubleキャプチャされている表示サーフェスの スクリーンピクセル比。
MediaTrackCapabilities
の拡張
映像ストリームトラックで
getCapabilities()
メソッドが呼び出された場合、ユーザーエージェントは、基礎となる
ユーザーエージェントの能力を表す、拡張された
MediaTrackCapabilities
辞書を返さなければなりません。
WebIDLpartial dictionary MediaTrackCapabilities {
DOMString displaySurface;
boolean logicalSurface;
sequence<DOMString> cursor;
};
displaySurface、
型は DOMStringgetSettings()
が返す値と同じ値でなければならず、アプリケーションの観点から
このプロパティを変更不能にします。
logicalSurface、
型は booleangetSettings()
が返す値と同じ値でなければならず、アプリケーションの観点から
このプロパティを変更不能にします。
cursor、
型は sequence<DOMString>ユーザーエージェントがこのトラックについて対応可能な
CursorCaptureConstraint
の値の集合のみで、正確に構成されなければなりません。
DisplayCaptureSurfaceType
列挙型は、表示サーフェスのさまざまな種類を記述します。
WebIDLenum DisplayCaptureSurfaceType {
"monitor",
"window",
"browser"
};
| 列挙値 | 説明 |
|---|---|
monitor
|
モニターの 表示サーフェス、 物理ディスプレイ、または物理ディスプレイの集合 |
window
|
ウィンドウの 表示サーフェス、 または単一のアプリケーションウィンドウ |
browser
|
ブラウザーの 表示サーフェス、 または単一のブラウザーウィンドウ |
CursorCaptureConstraintは、
カーソルがキャプチャされる条件を列挙します。
WebIDLenum CursorCaptureConstraint {
"never",
"always",
"motion"
};
| 列挙値 | 説明 |
|---|---|
never
|
「never」
カーソルキャプチャ制約は、キャプチャされた表示サーフェスから
カーソルを除外します。 |
always
|
「always」
カーソルキャプチャ制約は、キャプチャされた表示サーフェスに
カーソルを含めます。 |
motion
|
"motion"
カーソルキャプチャ
制約では、カーソル/ポインターが移動すると、キャプチャ対象の表示サーフェスにカーソルが含まれる。
キャプチャされたカーソルは、ポインター/カーソルがそれ以上
移動しない状態が一定期間続くと削除される。この期間は、ユーザー
エージェントによって決定される。
|
キャプチャの潜在的なソースは、このAPIによって個別のメディアソースとして扱われます。しかし、表示キャプチャソースは、ホストシステムに関する過剰な情報を明らかにするため、enumerateDevices()
によって列挙されてはなりません。
したがって、表示キャプチャソースは、その deviceId が公開されていないため、deviceId
制約を使用して選択することはできません。
これは、プライバシーインジケーターを実装するアルゴリズムで使用される同名の安定かつプライベートなIDと混同しないでください。
画面キャプチャ は、強力な機能 として識別され、"display-capture" という名前で識別され、使用するには明示的な許可が必要です。
Permissions仕様との統合に必要なように、 本仕様は次の事項を定義します:
prompt" と
"denied"
です。ユーザー
エージェントは、この記述子の権限状態を
"granted"
に設定してはなりません。
本仕様は、文字列"display-capture" で識別されるポリシー制御機能を定義します。その
デフォルト許可リストは
"self" です。
ドキュメントの権限ポリシーは、そのドキュメント内のコンテンツがgetDisplayMediaを使用することを許可されているかどうかを決定します。どのドキュメント内であっても無効化されている場合、そのドキュメント内のコンテンツは使用を許可されません
getDisplayMedia。これはユーザーに選択を促すアルゴリズムによって強制されます。
本仕様は、プライバシーインジケーター要件を拡張し、getUserMedia()
に加え
getDisplayMedia を含めます。
本仕様での[[devicesLiveMap]]、[[devicesAccessibleMap]]、および[[kindsAccessibleMap]]への参照は、getUserMedia()のプライバシーインジケーター要件をサポートするために既に作成された定義を指します。
getDisplayMedia
が公開する各kindのデバイスについて、デバイスの安定したプライベートID deviceId を使用し、kind を
"Display" + kind に設定し、以下を実行します:
falseに初期化します。
falseに初期化します。
次に、上記の新しい定義に基づいて、ユーザーエージェントに対する要件は、プライバシーインジケーター要件において指定されたものと同じです。getUserMedia()。
単一の権限記述子がgetDisplayMediaに対して存在するにもかかわらず、上記の定義は種類によって区別し、ユーザーエージェントがエンドユーザーにどの種類の表示ソースが共有されているのかを示すプライバシーインジケーターを実装できるようにします。
本仕様は、ユーザーエージェントが"granted"
権限を永続的に保存することを禁じているため、「Live」インジケーターのみが重要です。
ユーザーエージェントは、getDisplayMedia
から利用可能なソースのセットの変更に基づいて、devicechange
イベントを発生させてはなりません。
このセクションは情報提供のためのものであり、ここに含まれるアドバイスに従わない場合、プラットフォームセキュリティに重大なリスクをもたらすことを指摘しています。
表示されるコンテンツのキャプチャによって引き起こされるユーザープライバシーとセキュリティへのリスクは二重です。即座に明らかなリスクは、ユーザーが意図せずに共有するつもりのなかったコンテンツを共有してしまうこと、または共有されることに気付いていなかったことです。
表示キャプチャは、ブラウザのサンドボックスが提供するクロスサイトリクエストフォージェリ保護に対するあまり明確でないリスクを提示します。アプリケーションが直接的にはアクセスできない情報を間接的にでも制御可能な表示やキャプチャが許可されると、そのアプリケーションが本来アクセスできない情報にアクセスできる可能性があります。例えば、Canvas APIは、オリジンがクリーンではない場合、キャンバスのサンプリングやアクセス可能な形式への変換を許可しません[2DCONTEXT]。
この問題は[RTCWEB-SECURITY-ARCH]および[RTCWEB-SECURITY]で詳細に議論されています。
特にアプリケーションによって何らかの形で制御されているブラウザウィンドウを含む表示キャプチャは、これらの基本的なセキュリティ保護の違反リスクを伴います。このリスクはブラウザウィンドウに限定されるものではなく、オペレーティングシステムに依存するブラウザアプリケーションと他のアプリケーション間の制御チャネルにも影響を及ぼします。重要な考慮事項は、キャプチャされた表示面が、結果として得られるメディアを受け取るアプリケーションには本来秘匿されるべき情報を何らかの方法で表示する可能性があるかどうかです。
論理的表示面のキャプチャは、ユーザーが意識していないコンテンツが共有される可能性を引き起こします。論理的表示面は、ユーザーが公開する意図がなかった情報をレンダリングする可能性があります。この情報が目に見える場合にはより容易に認識できます。このような手段は機械に対しては効果が薄いですが、人間の受信者は一瞬だけ表示されるコンテンツを処理する能力が低いです。
現在画面にレンダリングされていない情報は、昇格された権限を通じてそのコンテンツにアクセスすることが明示的に許可されていない限り、キャプチャで隠されるよう推奨されます。
論理的表示面の隠された領域がどのようにして可視的表示面のキャプチャを生成するかは、異なる場合があります。プレゼンテーションソフトウェアのようなアプリケーションは、隠された部分が隠される前に表示されていた画像をレンダリングすることで利益を得る可能性があります。画像を固定すると、変化するコンテンツに視覚的なアーティファクトを引き起こすか、コンテンツが隠されていることを隠す可能性があります。キャプチャの固定部分はバグと誤解されることがあります。代わりに、隠された領域は灰色やハッチングなどで隠されていることを示すコンテンツに置き換えられる場合があります。
一部のシステムでは、論理的表示面のみをキャプチャする場合があります。小さな画面を持つデバイスなどは、通常ウィンドウの概念を持たず、全画面モードでのみアプリケーションをレンダリングします。これらのシステムは、現在表示されていないアプリケーションのキャプチャを提供する可能性がありますが、論理的表示面をキャプチャしないと使用できない場合があります。
ウィンドウやその他の表示面をキャプチャする際に、部分的に透明な場合、その背後にあるコンテンツはキャプチャされません。
ユーザープロンプトが新しく作成されたMediaStreamTrackによって短時間ウェブページに公開されるリスクがあります。例えば、ユーザーがユーザープロンプトが表示されている画面を選択した場合です。ユーザープロンプトが選択可能なさまざまな表示面のプレビューを表示する場合、これらのプレビューは新しく作成されたMediaStreamTrackによってキャプチャされません。
getDisplayMediaは、ビデオと一緒にオーディオをキャプチャすることを許可しますが、これはプライバシーとセキュリティの懸念を引き起こします。これは、システムアプリケーションに関する追加情報を露出する可能性があり、共有されるオーディオソースのセットが必ずしも共有されるビデオソースのセットと同じではないためです。例えば、ウィンドウのビデオのキャプチャに全システムのオーディオ(そのウィンドウに関連しないアプリケーションを含む)が付随する場合、アクティブなユーザーの同意なしでは共有されません。ユーザーが共有する内容、特に可能なオーディオについて認識していることが重要です。ユーザーがビデオには同意するがオーディオには同意しないことができるようにすることが強く推奨されます。これにより、ビデオ専用のストリームが生成されます。これにより、オーディオのリクエストが常にオプションとなり、ビデオ専用のリクエストと比較してユーザーの選択肢が制限されることがありません。
実装では、[GETUSERMEDIA]で推奨されているように、カメラやマイクを共有する際にユーザーに提供されるものと同様のフィードバックとコントロール機構を提供することが推奨されます。
コンテンツがアクティブにキャプチャされているとき、ユーザーがコンテンツが共有されていることを認識することが重要です。ユーザーエージェントは、コンテンツがキャプチャされている間、目立つインジケーターを表示することが推奨されます。インジケーターに加えて、ユーザーエージェントが、正確に何が共有されているかを確認する手段を提供することが推奨されます。この機能は、キャプチャされたコンテンツをレンダリングすることでアプリケーションが簡単に提供できるものですが、ユーザーが共有されている内容を正確に評価することを可能にします。
フィードバック機構に加えて、ユーザーがアクティブなキャプチャを停止する手段を提供することが推奨されます。
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in: