公開後に報告されたエラーや問題については、正誤表を確認してください。
この仕様の英語版のみが規範的なバージョンです。非規範的な 翻訳も利用できる場合があります。
Copyright © 2018 W3C® (MIT, ERCIM, Keio, Beihang). W3C liability, trademark and permissive document license rules apply.
状態の更新(2018年4月): この段落は参考情報です。この仕様は、 翻訳へのリンクを含め、既存の正誤表を取り込むためにインプレースで更新されました。正誤表には 非規範的な変更のみが含まれています。
この節では、公開時点におけるこの文書の位置付けについて説明します。他の文書が この文書に優先する場合があります。現在の W3C 公開文書の一覧およびこの技術報告書の最新リビジョンは、https://www.w3.org/TR/ にある W3C 技術報告書 インデックスで確認できます。
HTML Media Capture の勧告案は 2017年11月28日に公開され、それ以降、さらなる規範的な変更は行われていません。 この文書の正誤表はイシューとして記録されています。 このバージョンのために作成された実装報告は、 2 つの独立した相互運用可能な実装があることを示しています。
この文書は、Device and Sensors Working Group によって勧告として公開されました。 この文書に関するコメントを歓迎します。コメントは public-device-apis@w3.org (購読、 アーカイブ)宛に送るか、GitHub でイシューを提出してください。
Working Group の実装 報告を参照してください。
この文書は、W3C メンバー、ソフトウェア 開発者、その他の W3C グループおよび関係者によってレビューされ、Director により W3C 勧告として承認されています。 これは安定した文書であり、参考資料として使用したり、他の 文書から引用したりできます。勧告の作成における W3C の役割は、 仕様に注意を喚起し、その広範な展開を促進することです。これにより、Web の機能性 および相互運用性が向上します。
この文書は、 W3C Patent Policy の下で運営される グループによって作成されました。 W3C は、このグループの成果物に関連して行われた 特許開示の公開リスト を維持しています。そのページには、 特許を開示するための手順も含まれています。ある個人が、 Essential Claim(s) を含むと当該個人が考える特許について実際の知識を有している場合、その個人は W3C Patent Policy 第6節に従って その情報を開示しなければなりません。
この文書は、2017年3月1日 W3C Process Documentによって規定されます。
この節は非規範的です。
HTML メディアキャプチャ仕様は、
HTMLInputElement
インターフェイスを capture 属性で拡張します。
capture
属性により、作者は、メディアをその場でキャプチャするために、
ファイルアップロードコントロール内から、カメラやマイクなどの
メディアキャプチャ
機構の使用を宣言的に要求できます。
この拡張は、単純かつ宣言的であるように特別に設計されており、 Web プラットフォームのメディアキャプチャ機能の一部を対象としています。 具体的には、この拡張はキャプチャに対する詳細な作者制御を提供しません。 より細かな作者制御を必要とするユースケースは、別の仕様である Media Capture and Streams [MEDIACAPTURE-STREAMS] を使用することで満たせます。たとえば、 ホストデバイスからのリアルタイムメディアストリームへのアクセスは、 この仕様の範囲外です。
非規範的とマークされた節に加えて、この仕様に含まれるすべての作成ガイドライン、図、例、 および注記は非規範的です。この仕様におけるそれ以外のすべては 規範的です。
キーワード MUST、MUST NOT、および SHOULD は、 [RFC2119] に記述されているように解釈されます。
この仕様は、単一の製品、すなわちこの仕様に含まれるインターフェイスを実装する ユーザーエージェントに適用される適合基準を定義します。
この仕様で定義される API を実装するために ECMAScript を使用する実装は、 Web IDL 仕様 [WEBIDL-1] で定義される ECMAScript Bindings と整合する方法で、それらを実装しなければなりません。 これは、この仕様がその仕様および用語を使用しているためです。
input
要素、その type
属性、
HTMLInputElement
インターフェイス、
accept
属性、File
Upload 状態、enumerated
attribute、
missing value
default、invalid
value default、および reflect
は [HTML51] で定義されています。
[CEReactions]
WebIDL 拡張属性は [custom-elements] で定義されています。
VideoFacingModeEnum
列挙は [MEDIACAPTURE-STREAMS] で定義されています。
FileList
インターフェイスは [FILE-API] で定義されています。
この仕様において、用語 キャプチャコントロール
種別 は、
ユーザーにとって、
accept
属性によって指定された MIME 型のメディアを、
優先向きモードの
メディア
キャプチャ機構を使用して直接キャプチャするように最適化された、特殊な種類の
ファイルピッカーコントロールを指します。
用語 メディアキャプチャ機構 は、 カメラやマイクなど、デバイスのローカル メディアキャプチャデバイスを指します。
優先向きモード は、 使用されるデバイスのメディアキャプチャ 機構の向きに関するヒントです。
この節は非規範的です。
この仕様のユーザーエージェント実装は、マイクまたはカメラによるコンテンツのキャプチャを開始する前に、 ユーザーの同意を求めることが推奨されます。これは、ユーザーデータのプライバシーに関連する 規制上、法的、およびベストプラクティス上の要件を満たすために必要となる場合があります。さらに、 ユーザーエージェント実装は、入力デバイスが有効になっているときにユーザーへ表示を提供し、 ユーザーがそのようなキャプチャを終了できるようにすることが推奨されます。同様に、ユーザーエージェントは、 ユーザーが次のことを行えるようにするなど、ユーザー制御を提供することが推奨されます。
この仕様は、<input type="file"> [HTML51]
および
[FILE-API] 仕様によって提供される
セキュリティおよびプライバシー保護の上に構築されています。特に、
ユーザーのデバイスからコンテンツのキャプチャを開始するためのいかなる申し出も、
ユーザーエージェントによって完全に制御される HTML 要素上での特定のユーザー操作を必要とすることが
期待されます。
実装者は、キャプチャされたメディアからプライバシーに敏感なデータが追加的に漏えいすることを防ぐよう 注意すべきです。たとえば、キャプチャされたメディアのメタデータ(例: EXIF)にユーザーの位置情報を埋め込むと、 ユーザーが想定しているよりも多くの私的データが送信される可能性があります。
capture 属性
input 要素の
type
属性が File
Upload 状態であり、その accept
属性が指定されている場合、
この節の規則が適用されます。
partial interface HTMLInputElement {
[CEReactions]
attribute DOMString capture;
};
capture 属性は、
enumerated
attribute であり、その状態は
メディア
キャプチャ機構の 優先向きモードを指定します。
この属性のキーワードは user および
environment であり、それぞれ
状態 user および environment に対応します。
状態 user および environment の意味は、
で定義される同名の列挙値を反映します。
VideoFacingModeEnum
さらに、第 3 の状態である implementation-specific 状態があります。
missing value default は implementation-specific 状態です。invalid value default も implementation-specific 状態です。
ユーザーエージェントが優先向き モードをサポートできない場合、実装が既定の 挙動に従って動作することを示す implementation-specific 状態に対応する、 実装固有の既定の向きモードにフォールバックできます。
capture IDL 属性は、同じ名前の対応する
内容属性を MUST reflect しなければなりません。
capture 属性が指定されている場合、
ユーザーエージェントは、
特定のキャプチャコントロール
種別のファイルピッカーを起動する SHOULD です。
capture 属性が指定されている場合、
ユーザーエージェントは、
キャプチャされたメディアをローカルまたはリモートのいかなるデータストレージにも保存しては
MUST NOT なりません。
FileList オブジェクトによって表される)
にアクセスすると、さまざまな
機構を使用してキャプチャされたメディアを保存できます。これらの機構は
この仕様の範囲外です。
accept
属性の値が、関連するキャプチャ
コントロール種別を持たない MIME 型に設定されている場合、
ユーザー
エージェントは、
capture 属性が存在しないかのように動作しなければ
MUST なりません。
この節は非規範的です。
次の例は、ホストデバイスのメディアキャプチャ機能を使用して、特定の MIME 型の メディアをユーザーがキャプチャすることが望ましいというヒントを与える方法を示しています。 HTML フォームを使用する単純な宣言的な例と、スクリプトを含むより高度な 例の両方を示します。
<form action="server.cgi" method="post" enctype="multipart/form-data">
<input type="file" name="image" accept="image/*" capture="user">
<input type="submit" value="Upload">
</form>
<form action="server.cgi" method="post" enctype="multipart/form-data">
<input type="file" name="video" accept="video/*" capture="environment">
<input type="submit" value="Upload">
</form>
<form action="server.cgi" method="post" enctype="multipart/form-data">
<input type="file" name="audio" accept="audio/*" capture>
<input type="submit" value="Upload">
</form>
capture 属性を指定します:
<input type="file" accept="image/*" capture>
<canvas></canvas>
XMLHttpRequest を介してファイルアップロードを処理します:
var input = document.querySelector('input[type=file]'); // see Example 4
input.onchange = function () {
var file = input.files[0];
upload(file);
drawOnCanvas(file); // see Example 6
displayAsImage(file); // see Example 7
};
function upload(file) {
var form = new FormData(),
xhr = new XMLHttpRequest();
form.append('image', file);
xhr.open('post', 'server.php', true);
xhr.send(form);
}
FileReader と canvas 要素を使用します:
function drawOnCanvas(file) {
var reader = new FileReader();
reader.onload = function (e) {
var dataURL = e.target.result,
c = document.querySelector('canvas'), // see Example 4
ctx = c.getContext('2d'),
img = new Image();
img.onload = function() {
c.width = img.width;
c.height = img.height;
ctx.drawImage(img, 0, 0);
};
img.src = dataURL;
};
reader.readAsDataURL(file);
}
createObjectURL() メソッドと img 要素を使用します:
function displayAsImage(file) {
var imgURL = URL.createObjectURL(file),
img = document.createElement('img');
img.onload = function() {
URL.revokeObjectURL(imgURL);
};
img.src = imgURL;
document.body.appendChild(img);
}
input 要素の
accept
属性が
image/* に設定され、capture 属性が
例 1 または 例 4 のように指定されている場合、ファイルピッカーは
以下に示すように
レンダリングできます。
属性が指定されていない場合、ファイルピッカーは 以下に表すようにレンダリングできます。