The HTML Media Capture specification defines HTML form extensions that facilitate users' access to media capture capabilities of the hosting device.

Introduction

This specification extends the HTMLInputElement interface with a new capture attribute. The attribute enables content authors to give hints of preferred means to capture local media such as images, video, and sound, that is to be subsequently uploaded. Conformant user agents provide their users more seamless access to the above-mentioned media capture capabilities of the hosting device.

Access to media streams from the hosting device is out of scope for this specification.

This specification defines conformance criteria that apply to a single product: the user agent that implements the interfaces that it contains.

Implementations that use ECMAScript to implement the APIs defined in this specification must implement them in a manner consistent with the ECMAScript Bindings defined in the Web IDL specification [[!WEBIDL]], as this specification uses that specification and terminology.

Terminology

The input element and the HTMLInputElement interface are defined in [[!HTML5]].

The File Upload state is defined in [[!HTML5]].

The enumerated attribute microsyntax, and associated terms and concepts keyword, state, invalid value default, and missing value default, are defined in [[!HTML5]].

In this specification, the term capture control type refers to a specialized type of a file picker control that is optimized, for the user, for capturing media of a specified type.

Security and privacy considerations

This specification builds upon the security and privacy protections provided by the <input type="file"> [[!HTML5]] and the [[!FILE-API]] specifications; in particular, it is expected that any offer to start capturing content from the user’s device would require a specific user interaction on an HTML element that is entirely controlled by the user agent.

Implementors should take care of additional leakage of privacy-sensitive data from captured media. For instance, embedding the user’s location in a captured media metadata (e.g. EXIF) might transmit more private data than the user might be expecting.

The capture attribute

This section is normative.

When an input element's type attribute is in the File Upload state, the rules in this section apply.

attribute DOMString capture

The capture attribute is used as a hint to the user agent to invoke a file picker of a specific capture control type.

The capture attribute controls the capture state (and associated capture control type) of the element. It is an enumerated attribute. The following table lists the keywords, states, and corresponding capture control types for the attribute. The keywords camera, camcorder, microphone, and filesystem map to the corresponding states: Image Capture, Video Capture, Sound Capture, and File Upload respectively.

Keyword State Capture control type
camera Image Capture A camera
camcorder Video Capture A video camera
microphone Sound Capture A sound recorder
filesystem File Upload A generic file picker

The capture attribute's invalid value default and missing value default is the File Upload state.

The HTMLInputElement interface's accept attribute takes precedence over the capture attribute. That is, if the accept attribute's value is set to a MIME type that is not accepted in a defined capture state, the user agent MUST act as if there was no capture attribute.

This specification complements the following behavior defined in the File Upload state [[!HTML5]]: User agents may use the value of [the accept] attribute to display a more appropriate user interface than a generic file picker. For instance, given the value image/*, a user agent could offer the user the option of using a local camera or selecting a photograph from their photo collection; given the value audio/*, a user agent could offer the user the option of recording a clip using a headset microphone.

Examples

The following example gives a hint that it is preferred for the user to take a picture using the device's local camera, and upload the picture taken:

      <input type="file" accept="image/*" capture="camera">
    

When an input element's capture attribute is in the Image Capture state, the file picker may render as presented on the right side. When the attribute is in the File Upload state, the generic file picker may render as represented on the left side.

A File picker control in the File Upload (left) and Image
      Capture state (right).