# Media Capabilities

## Editor’s Draft, 1 January 1970

This version:
  https://w3c.github.io/media-capabilities/
Editors:
  Mounir Lamouri (Google Inc.)
  Chris Cunningham (Google Inc.)
Participate:
  Git Repository.
  File an issue.
Version History:
  https://github.com/w3c/media-capabilities/commits

Copyright © 1970 W3C® (MIT, ERCIM, Keio, Beihang). W3C liability, trademark and permissive document license rules apply.

## Abstract

This specification intends to provide APIs to allow websites to make an optimal decision when picking media content for the user. The APIs will expose information about the decoding and encoding capabilities for a given format but also output capabilities to find the best match based on the device’s display.

## Status of this document

This section describes the status of this document at the time of its publication. Other documents may supersede this document. A list of current W3C publications and the latest revision of this technical report can be found in the W3C technical reports index at http://www.w3.org/TR/.

This document was published by the Media Working Group as an Editors' Draft. This document is intended to become a W3C Recommendation. Feedback and comments on this specification are welcome. Please use Github issues. Discussions may also be found in the public-media-wg@w3.org archives.

Publication as an Editors' Draft does not imply endorsement by the W3C Membership. This is a draft document and may be updated, replaced or obsoleted by other documents at any time. It is inappropriate to cite this document as other than work in progress.

This document was produced by a group operating under the W3C Patent Policy. W3C maintains a public list of any patent disclosures made in connection with the deliverables of the group; that page also includes instructions for disclosing a patent. An individual who has actual knowledge of a patent which the individual believes contains Essential Claim(s) must disclose the information in accordance with section 6 of the W3C Patent Policy.

This document is governed by the 1 March 2019 W3C Process Document.

## 1. Introduction

This section is non-normative

This specification relies on exposing the following sets of properties:

- An API to query the user agent with regards to the decoding and encoding abilities of the device based on information such as the codecs, profile, resolution, bitrates, etc. The API exposes information such as whether the playback should be smooth and power efficient.

  The intent of purposes of the decoding capabilities API is to provide a powerful replacement to API such as `isTypeSupported()` or `canPlayType()` which are vague and mostly help the callers to know if something can not be decoded but not how well it should perform.

- Better information about the display properties such as supported color gamut or dynamic range abilities in order to pick the right content for the display and avoid providing HDR content to an SDR display.

- Real time feedback about the playback so an adaptative streaming can alter the quality of the content based on actual user perceived quality. Such information will allow websites to react to a pick of CPU/GPU usage in real time. It is expected that this will be tackled as part of the [media-playback-quality] specification.

## 2. Decoding and Encoding Capabilities

### 2.1. Media Configurations

#### 2.1.1. MediaConfiguration

    dictionary MediaConfiguration {
      VideoConfiguration video;
      AudioConfiguration audio;
    };

    dictionary MediaDecodingConfiguration : MediaConfiguration {
      required MediaDecodingType type;
      MediaCapabilitiesKeySystemConfiguration keySystemConfiguration;
    };

    dictionary MediaEncodingConfiguration : MediaConfiguration {
      required MediaEncodingType type;
    };

The input to the decoding capabilities is represented by a `MediaDecodingConfiguration` dictionary and the input of the encoding capabilities by a `MediaEncodingConfiguration` dictionary.

For a `MediaConfiguration` to be a valid MediaConfiguration, all of the following conditions MUST be true:

1. `audio` and/or `video` MUST be present.
2. `audio` MUST be a valid audio configuration if present.
3. `video` MUST be a valid video configuration if present.

For a `MediaDecodingConfiguration` to be a valid MediaDecodingConfiguration, all of the following conditions MUST be true:

1. It MUST be a valid MediaConfiguration.
2. If `keySystemConfiguration` is present:
   1. If `keySystemConfiguration.audio` is present, `audio` MUST also be present.
   2. If `keySystemConfiguration.video` is present, `video` MUST also be present.

For a `MediaDecodingConfiguration` to describe [ENCRYPTED-MEDIA], a `keySystemConfiguration` MUST be present.

#### 2.1.2. MediaDecodingType

    enum MediaDecodingType {
      "file",
      "media-source",
    };

A `MediaDecodingConfiguration` has two types:

- `file` is used to represent a configuration that is meant to be used for a plain file playback.
- `media-source` is used to represent a configuration that is meant to be used for playback of a `MediaSource` as defined in the [media-source] specification.

#### 2.1.3. MediaEncodingType

    enum MediaEncodingType {
      "record",
      "transmission"
    };

A `MediaEncodingConfiguration` can have one of two types:

- `record` is used to represent a configuration for recording of media, e.g. using `MediaRecorder` as defined in [mediastream-recording].
- `transmission` is used to represent a configuration meant to be transmitted over electronic means (e.g. using `RTCPeerConnection`).

#### 2.1.4. MIME types

In the context of this specification, a MIME type is also called content type. A valid media MIME type is a string that is a valid MIME type per [mimesniff]. If the MIME type does not imply a codec, the string MUST also have one and only one parameter that is named `codecs` with a value describing a single media codec. Otherwise, it MUST contain no parameters.

A valid audio MIME type is a string that is valid media MIME type and for which the `type` per [RFC7231] is either `audio` or `application`.

A valid video MIME type is a string that is a valid media MIME type and for which the `type` per [RFC7231] is either `video` or `application`.

#### 2.1.5. VideoConfiguration

    dictionary VideoConfiguration {
      required DOMString contentType;
      required unsigned long width;
      required unsigned long height;
      required unsigned long long bitrate;
      required double framerate;
      boolean hasAlphaChannel;
      HdrMetadataType hdrMetadataType;
      ColorGamut colorGamut;
      TransferFunction transferFunction;
    };

The `contentType` member represents the MIME type of the video track.

To check if a `VideoConfiguration` configuration is a valid video configuration, the following steps MUST be run:

1. If configuration’s `contentType` is not a valid video MIME type, return `false` and abort these steps.
2. If `framerate` is not finite or is not greater than 0, return `false` and abort these steps.
3. Return `true`.

The `width` and `height` members represent respectively the visible horizontal and vertical encoded pixels in the encoded video frames.

The `bitrate` member represents the average bitrate of the video track given in units of bits per second. In the case of a video stream encoded at a constant bit rate (CBR) this value should be accurate over a short term window. For the case of variable bit rate (VBR) encoding, this value should be usable to allocate any necessary buffering and throughput capability to provide for the un-interrupted decoding of the video stream over the long-term based on the indicated `contentType`.

The `framerate` member represents the framerate of the video track. The framerate is the number of frames used in one second (frames per second). It is represented as a double.

The `hasAlphaChannel` member represents whether the video track contains alpha channel information. If true, the encoded video stream can produce per-pixel alpha channel information when decoded. If false, the video stream cannot produce per-pixel alpha channel information when decoded. If undefined, the UA should determine whether the video stream encodes alpha channel information based on the indicated `contentType`, if possible. Otherwise, the UA should presume that the video stream cannot produce alpha channel information.

If present, the `hdrMetadataType` member represents that the video track includes the specified HDR metadata type, which the UA needs to be capable of interpreting for tone mapping the HDR content to a color volume and luminance of the output device. Valid inputs are defined by `HdrMetadataType`.

If present, the `colorGamut` member represents that the video track is delivered in the specified color gamut, which describes a set of colors in which the content is intended to be displayed. If the attached output device also supports the specified color, the UA needs to be able to cause the output device to render the appropriate color, or something close enough. If the attached output device does not support the specified color, the UA needs to be capable of mapping the specified color to a color supported by the output device. Valid inputs are defined by `ColorGamut`.

If present, the `transferFunction` member represents that the video track requires the specified transfer function to be understood by the UA. Transfer function describes the electro-optical algorithm supported by the rendering capabilities of a user agent, independent of the display, to map the source colors in the decoded media into the colors to be displayed. Valid inputs are defined by `TransferFunction`.

#### 2.1.6. HdrMetadataType

    enum HdrMetadataType {
      "smpteSt2086",
      "smpteSt2094-10",
      "smpteSt2094-40"
    };

If present, `HdrMetadataType` describes the capability to interpret HDR metadata of the specified type.

The `VideoConfiguration` may contain one of the following types:

- `smpteSt2086`, representing the static metadata type defined by [SMPTE-ST-2086].
- `smpteSt2094-10`, representing the dynamic metadata type defined by [SMPTE-ST-2094].
- `smpteSt2094-40`, representing the dynamic metadata type defined by [SMPTE-ST-2094].

#### 2.1.7. ColorGamut

    enum ColorGamut {
      "srgb",
      "p3",
      "rec2020"
    };

The `VideoConfiguration` may contain one of the following types:

- `srgb`, representing the [sRGB] color gamut.
- `p3`, representing the DCI P3 Color Space color gamut. This color gamut includes the `srgb` gamut.
- `rec2020`, representing the ITU-R Recommendation BT.2020 color gamut. This color gamut includes the `p3` gamut.

#### 2.1.8. TransferFunction

    enum TransferFunction {
      "srgb",
      "pq",
      "hlg"
    };

The `VideoConfiguration` may contain one of the following types:

- `srgb`, representing the transfer function defined by [sRGB].
- `pq`, representing the "Perceptual Quantizer" transfer function defined by [SMPTE-ST-2084].
- `hlg`, representing the "Hybrid Log Gamma" transfer function defined by BT.2100.

#### 2.1.9. AudioConfiguration

    dictionary AudioConfiguration {
      required DOMString contentType;
      DOMString channels;
      unsigned long long bitrate;
      unsigned long samplerate;
      boolean spatialRendering;
    };

The `contentType` member represents the MIME type of the audio track.

To check if a `AudioConfiguration` configuration is a valid audio configuration, the following steps MUST be run:

1. If configuration’s `contentType` is not a valid audio MIME type, return `false` and abort these steps.
2. Return `true`.

The `channels` member represents the audio channels used by the audio track.

The `channels` needs to be defined as a `double` (2.1, 4.1, 5.1, ...), an `unsigned short` (number of channels) or as an `enum` value. The current definition is a placeholder.

The `bitrate` member represents the number of average bitrate of the audio track. The bitrate is the number of bits used to encode a second of the audio track.

The `samplerate` represents the samplerate of the audio track in. The samplerate is the number of samples of audio carried per second.

The `samplerate` is expressed in `Hz` (ie. number of samples of audio per second). Sometimes the samplerates value are expressed in `kHz` which represents the number of thousands of samples of audio per second.
44100 `Hz` is equivalent to 44.1 `kHz`.

The `spatialRendering` member indicates that the audio SHOULD be renderered spatially. The details of spatial rendering SHOULD be inferred from the `contentType`. If not present, the UA MUST presume spatialRendering is not required. When `true`, the user agent SHOULD only report this configuration as supported if it can support spatial rendering *for the current audio output device* without failing back to a non-spatial mix of the stream.

#### 2.1.10. MediaCapabilitiesKeySystemConfiguration

    dictionary MediaCapabilitiesKeySystemConfiguration {
        required DOMString keySystem;
        DOMString initDataType = "";
        MediaKeysRequirement distinctiveIdentifier = "optional";
        MediaKeysRequirement persistentState = "optional";
        sequence<DOMString> sessionTypes;
        KeySystemTrackConfiguration audio;
        KeySystemTrackConfiguration video;
      };

This dictionary refers to a number of types defined by [ENCRYPTED-MEDIA] (EME). Sequences of EME types are flattened to a single value whenever the intent of the sequence was to have `requestMediaKeySystemAccess()` choose a subset it supports. With MediaCapabilities, callers provide the sequence across multiple calls, ultimately letting the caller choose which configuration to use.

The `keySystem` member represents a `keySystem` name as described in [ENCRYPTED-MEDIA].

The `initDataType` member represents a single value from the `initDataTypes` sequence described in [ENCRYPTED-MEDIA].

The `distinctiveIdentifier` member represents a `distinctiveIdentifier` requirement as described in [ENCRYPTED-MEDIA].

The `persistentState` member represents a `persistentState` requirement as described in [ENCRYPTED-MEDIA].

The `sessionTypes` member represents a sequence of required `sessionTypes` as described in [ENCRYPTED-MEDIA].

The `audio` member represents a `KeySystemTrackConfiguration` associated with the `AudioConfiguration`.

The `video` member represents a `KeySystemTrackConfiguration` associated with the `VideoConfiguration`.

#### 2.1.11. KeySystemTrackConfiguration

    dictionary KeySystemTrackConfiguration {
        DOMString robustness = "";
      };

The `robustness` member represents a `robustness` level as described in [ENCRYPTED-MEDIA].

### 2.2. Media Capabilities Information

    dictionary MediaCapabilitiesInfo {
      required boolean supported;
      required boolean smooth;
      required boolean powerEfficient;
    };

    dictionary MediaCapabilitiesDecodingInfo : MediaCapabilitiesInfo {
      required MediaKeySystemAccess keySystemAccess;
      MediaDecodingConfiguration configuration;
    };

    dictionary MediaCapabilitiesEncodingInfo : MediaCapabilitiesInfo {
      MediaEncodingConfiguration configuration;
    };

A `MediaCapabilitiesInfo` has associated supported, smooth, powerEfficient fields which are booleans.

Authors can use `powerEfficient` in concordance with the Battery Status API [battery-status] in order to determine whether the media they would like to play is appropriate for the user configuration. It is worth noting that even when a device is not power constrained, high power usage has side effects such as increasing the temperature or the fans noise.

A `MediaCapabilitiesDecodingInfo` has associated keySystemAccess which is a `MediaKeySystemAccess` or `null` as appropriate.

A `MediaCapabilitiesDecodingInfo` has an associated configuration which is the decoding configuration properties used to generate the `MediaCapabilitiesDecodingInfo`.

A `MediaCapabilitiesEncodingInfo` has an associated configuration which is the encoding configuration properties used to generate the `MediaCapabilitiesEncodingInfo`.

If the encrypted decoding configuration is supported, the resulting `MediaCapabilitiesInfo` will include a `MediaKeySystemAccess`. Authors may use this to create `MediaKeys` and setup encrypted playback.

### 2.3. Algorithms

#### 2.3.1. Create a MediaCapabilitiesEncodingInfo

Given a `MediaEncodingConfiguration` configuration, this algorithm returns a `MediaCapabilitiesEncodingInfo`. The following steps are run:

1. Let info be a new `MediaCapabilitiesEncodingInfo` instance. Unless stated otherwise, reading and writing apply to info for the next steps.
2. Set configuration to be a new `MediaEncodingConfiguration`. For every property in configuration create a new property with the same name and value in configuration.
3. If the user agent is able to encode the media represented by configuration, set supported to `true`. Otherwise set it to `false`.
4. If the user agent is able to encode the media represented by configuration at a pace that allows encoding frames at the same pace as they are sent to the encoder, set smooth to `true`. Otherwise set it to `false`.
5. If the user agent is able to encode the media represented by configuration in a power efficient manner, set powerEfficient to `true`. Otherwise set it to `false`. The user agent SHOULD NOT take into consideration the current power source in order to determine the encoding power efficiency unless the device’s power source has side effects such as enabling different encoding modules.
6. Return info.

#### 2.3.2. Create a MediaCapabilitiesDecodingInfo

Given a `MediaDecodingConfiguration` configuration, this algorithm returns a `MediaCapabilitiesDecodingInfo`. The following steps are run:

1. Let info be a new `MediaCapabilitiesDecodingInfo` instance. Unless stated otherwise, reading and writing apply to info for the next steps.
2. Set configuration to be a new `MediaDecodingConfiguration`. For every property in configuration create a new property with the same name and value in configuration.
3. If `configuration.keySystemConfiguration` is present:
   1. Set keySystemAccess to the result of running the Check Encrypted Decoding Support algorithm with configuration.
   2. If keySystemAccess is not `null` set supported to `true`. Otherwise set it to `false`.
4. Otherwise, run the following steps:
   1. Set keySystemAccess to `null`.
   2. If the user agent is able to decode the media represented by configuration, set supported to `true`.
   3. Otherwise, set it to `false`.
5. If the user agent is able to decode the media represented by configuration at a pace that allows a smooth playback, set smooth to `true`. Otherwise set it to `false`.
6. If the user agent is able to decode the media represented by configuration in a power efficient manner, set powerEfficient to `true`. Otherwise set it to `false`. The user agent SHOULD NOT take into consideration the current power source in order to determine the decoding power efficiency unless the device’s power source has side effects such as enabling different decoding modules.
7. Return info.

#### 2.3.3. Check Encrypted Decoding Support

Given a `MediaDecodingConfiguration` config with a `keySystemConfiguration` present, this algorithm returns a `MediaKeySystemAccess` or `null` as appropriate. The following steps are run:

1. If the `keySystem` member of `config.keySystemConfiguration` is not one of the Key Systems supported by the user agent, return `null`. String comparison is case-sensitive.
2. Let origin be the origin of the calling context’s Document.
3. Let implementation be the implementation of `config.keySystemConfiguration.keySystem`
4. Let emeConfiguration be a new `MediaKeySystemConfiguration`, and initialize it as follows:
   1. Set the `initDataTypes` attribute to a sequence containing `config.keySystemConfiguration.initDataType`.
   2. Set the `distinctiveIdentifier` attribute to `config.keySystemConfiguration.distinctiveIdentifier`.
   3. Set the `persistentState` attribute to `config.keySystemConfiguration.peristentState`.
   4. Set the `sessionTypes` attribute to `config.keySystemConfiguration.sessionTypes`.
   5. If `audio` is present in config, set the `audioCapabilities` attribute to a sequence containing a single `MediaKeySystemMediaCapability`, initialized as follows:
      1. Set the `contentType` attribute to `config.audio.contentType`.
      2. If `config.keySystemConfiguration.audio` is present, set the `robustness` attribute to `config.keySystemConfiguration.audio.robustness`.
   6. If `video` is present in config, set the videoCapabilities attribute to a sequence containing a single `MediaKeySystemMediaCapability`, initialized as follows:
      1. Set the `contentType` attribute to `config.video.contentType`.
      2. If `config.keySystemConfiguration.video` is present, set the `robustness` attribute to `config.keySystemConfiguration.video.robustness`.
5. Let supported configuration be the result of executing the Get Supported Configuration algorithm on implementation, emeConfiguration, and origin.
6. If supported configuration is `NotSupported`, return `null` and abort these steps.
7. Let access be a new `MediaKeySystemAccess` object, and initialize it as follows:
   1. Set the `keySystem` attribute to `emeConfiguration.keySystem`.
   2. Let the configuration value be supported configuration.
   3. Let the cdm implementation value be implementation.
8. Return access

### 2.4. Navigator and WorkerNavigator extension

    [Exposed=Window]
    partial interface Navigator {
      [SameObject] readonly attribute MediaCapabilities mediaCapabilities;
    };

    [Exposed=Worker]
    partial interface WorkerNavigator {
      [SameObject] readonly attribute MediaCapabilities mediaCapabilities;
    };

### 2.5. Media Capabilities Interface

    [Exposed=(Window, Worker)]
    interface MediaCapabilities {
      [NewObject] Promise<MediaCapabilitiesDecodingInfo> decodingInfo(MediaDecodingConfiguration configuration);
      [NewObject] Promise<MediaCapabilitiesInfo> encodingInfo(MediaEncodingConfiguration configuration);
    };

The `decodingInfo()` method method MUST run the following steps:

1. If configuration is not a valid MediaDecodingConfiguration, return a Promise rejected with a newly created `TypeError`.
2. If `configuration.keySystemConfiguration` is present, run the following substeps:
   1. If the global object is of type `WorkerGlobalScope`, return a Promise rejected with a newly created `DOMException` whose name is InvalidStateError.
   2. If the result of running Is the environment settings object settings a secure context? [secure-contexts] with the global object’s relevant settings object is not "Secure", return a Promise rejected with a newly created `DOMException` whose name is SecurityError.
3. Let p be a new promise.
4. In parallel, run the Create a MediaCapabilitiesDecodingInfo algorithm with configuration and resolve p with its result.
5. Return p.

Note, calling `decodingInfo()` with a `keySystemConfiguration` present may have user-visible effects, including requests for user consent. Such calls should only be made when the author intends to create and use a `MediaKeys` object with the provided configuration.

The `encodingInfo()` method MUST run the following steps:

1. If configuration is not a valid MediaConfiguration, return a Promise rejected with a newly created `TypeError`.
2. Let p be a new promise.
3. In parallel, run the Create a MediaCapabilitiesEncodingInfo algorithm with configuration and resolve p with its result.
4. Return p.

## 3. Security and Privacy Considerations

This specification does not introduce any security-sensitive information or APIs but is provides an easier access to some information that can be used to fingerprint users.

### 3.1. Decoding/Encoding and Fingerprinting

The information exposed by the decoding/encoding capabilities can already be discovered via experimentation with the exception that the API will likely provide more accurate and consistent information. This information is expected to have a high correlation with other information already available to the web pages as a given class of device is expected to have very similar decoding/encoding capabilities. In other words, high end devices from a certain year are expected to decode some type of videos while older devices may not. Therefore, it is expected that the entropy added with this API isn’t going to be significant.

HDR detection is more nuanced. Adding colorGamut, transferFunction, and hdrMetadataType has the potential to add significant entropy. However, for UAs whose decoders are implemented in software and therefore whose capabilities are fixed across devices, this feature adds no effective entropy. Additionally, for many cases, devices tend to fall into large categories, within which capabilities are similar thus minimizing effective entropy.

If an implementation wishes to implement a fingerprint-proof version of this specification, it would be recommended to fake a given set of capabilities (ie. decode up to 1080p VP9, etc.) instead of returning always yes or always no as the latter approach could considerably degrade the user’s experience. Another mitigation could be to limit these Web APIs to top-level browsing contexts. Yet another is to use a privacy budget that throttles and/or blocks calls to the API above a threshold.

### 3.2. Display and Fingerprinting

The information exposed by the display capabilities can already be accessed via CSS for the most part. The specification also provides default values when the user agent does not which to expose the feature for privacy reasons.

## 4. Examples

### 4.1. Query recording capabilities with `encodingInfo()`

The following example can also be found in e.g. this codepen with minimal modifications.

    <script>
      const configuration = {
          type : 'record',
          video : {
            contentType : 'video/webm;codecs=vp8',
            width : 640,
            height : 480,
            bitrate : 10000,
            framerate : 29.97
        }
      };
      navigator.mediaCapabilities.encodingInfo(configuration)
          .then((result) => {
            console.log(result.contentType + ' is:'
                + (result.supported ? '' : ' NOT') + ' supported,'
                + (result.smooth ? '' : ' NOT') + ' smooth and'
                + (result.powerEfficient ? '' : ' NOT') + ' power efficient');
          })
          .catch((err) => {
            console.error(err, ' caused encodingInfo to throw');
          });
    </script>

## Index

### Terms defined by this specification

- audio
  - dict-member for MediaCapabilitiesKeySystemConfiguration, in §2.1.10
  - dict-member for MediaConfiguration, in §2.1.1
- AudioConfiguration, in §2.1.9
- bitrate
  - dict-member for AudioConfiguration, in §2.1.9
  - dict-member for VideoConfiguration, in §2.1.5
- channels, in §2.1.9
- Check Encrypted Decoding Support, in §2.3.3
- ColorGamut, in §2.1.7
- colorGamut, in §2.1.5
- configuration
  - dfn for MediaCapabilitiesDecodingInfo, in §2.2
  - dfn for MediaCapabilitiesEncodingInfo, in §2.2
  - dict-member for MediaCapabilitiesDecodingInfo, in §2.2
  - dict-member for MediaCapabilitiesEncodingInfo, in §2.2
- contentType
  - dict-member for AudioConfiguration, in §2.1.9
  - dict-member for VideoConfiguration, in §2.1.5
- Create a MediaCapabilitiesDecodingInfo, in §2.3.2
- Create a MediaCapabilitiesEncodingInfo, in §2.3.1
- decodingInfo(configuration), in §2.5
- distinctiveIdentifier, in §2.1.10
- encodingInfo(configuration), in §2.5
- "file", in §2.1.2
- file, in §2.1.2
- framerate, in §2.1.5
- hasAlphaChannel, in §2.1.5
- HdrMetadataType, in §2.1.6
- hdrMetadataType, in §2.1.5
- height, in §2.1.5
- "hlg", in §2.1.8
- hlg, in §2.1.8
- initDataType, in §2.1.10
- keySystem, in §2.1.10
- keySystemAccess
  - dfn for MediaCapabilitiesDecodingInfo, in §2.2
  - dict-member for MediaCapabilitiesDecodingInfo, in §2.2
- keySystemConfiguration, in §2.1.1
- KeySystemTrackConfiguration, in §2.1.11
- MediaCapabilities, in §2.5
- mediaCapabilities
  - attribute for Navigator, in §2.4
  - attribute for WorkerNavigator, in §2.4
- MediaCapabilitiesDecodingInfo, in §2.2
- MediaCapabilitiesEncodingInfo, in §2.2
- MediaCapabilitiesInfo, in §2.2
- MediaCapabilitiesKeySystemConfiguration, in §2.1.10
- MediaConfiguration, in §2.1.1
- MediaDecodingConfiguration, in §2.1.1
- MediaDecodingType, in §2.1.2
- MediaEncodingConfiguration, in §2.1.1
- MediaEncodingType, in §2.1.3
- "media-source", in §2.1.2
- media-source, in §2.1.2
- "p3", in §2.1.7
- p3, in §2.1.7
- persistentState, in §2.1.10
- powerEfficient
  - dfn for MediaCapabilitiesInfo, in §2.2
  - dict-member for MediaCapabilitiesInfo, in §2.2
- "pq", in §2.1.8
- pq, in §2.1.8
- "rec2020", in §2.1.7
- rec2020, in §2.1.7
- "record", in §2.1.3
- record, in §2.1.3
- robustness, in §2.1.11
- samplerate, in §2.1.9
- sessionTypes, in §2.1.10
- smooth
  - dfn for MediaCapabilitiesInfo, in §2.2
  - dict-member for MediaCapabilitiesInfo, in §2.2
- "smpteSt2086", in §2.1.6
- smpteSt2086, in §2.1.6
- "smpteSt2094-10", in §2.1.6
- smpteSt2094-10, in §2.1.6
- "smpteSt2094-40", in §2.1.6
- smpteSt2094-40, in §2.1.6
- spatialRendering, in §2.1.9
- "srgb"
  - enum-value for ColorGamut, in §2.1.7
  - enum-value for TransferFunction, in §2.1.8
- srgb
  - enum-value for ColorGamut, in §2.1.7
  - enum-value for TransferFunction, in §2.1.8
- supported
  - dfn for MediaCapabilitiesInfo, in §2.2
  - dict-member for MediaCapabilitiesInfo, in §2.2
- TransferFunction, in §2.1.8
- transferFunction, in §2.1.5
- "transmission", in §2.1.3
- transmission, in §2.1.3
- type
  - dict-member for MediaDecodingConfiguration, in §2.1.1
  - dict-member for MediaEncodingConfiguration, in §2.1.1
- valid audio configuration, in §2.1.9
- valid audio MIME type, in §2.1.4
- valid MediaConfiguration, in §2.1.1
- valid MediaDecodingConfiguration, in §2.1.1
- valid media MIME type, in §2.1.4
- valid video configuration, in §2.1.5
- valid video MIME type, in §2.1.4
- video
  - dict-member for MediaCapabilitiesKeySystemConfiguration, in §2.1.10
  - dict-member for MediaConfiguration, in §2.1.1
- VideoConfiguration, in §2.1.5
- width, in §2.1.5

https://www.w3.org/TR/dom/#concept-document Referenced in:

- 2.3.3. Check Encrypted Decoding Support

https://tc39.github.io/ecma262/#sec-native-error-types-used-in-this-standard-typeerror Referenced in:

- 2.5. Media Capabilities Interface (2)

https://www.w3.org/TR/encrypted-media/#mediakeysystemaccess-interface Referenced in:

- 2.2. Media Capabilities Information (2) (3)
- 2.3.3. Check Encrypted Decoding Support (2)

https://www.w3.org/TR/encrypted-media/#mediakeysystemconfiguration-dictionary Referenced in:

- 2.3.3. Check Encrypted Decoding Support

https://www.w3.org/TR/encrypted-media/#mediakeysystemmediacapability-dictionary Referenced in:

- 2.3.3. Check Encrypted Decoding Support (2)

https://www.w3.org/TR/encrypted-media/#mediakeys-interface Referenced in:

- 2.2. Media Capabilities Information
- 2.5. Media Capabilities Interface

https://www.w3.org/TR/encrypted-media/#dom-mediakeysrequirement Referenced in:

- 2.1.10. MediaCapabilitiesKeySystemConfiguration (2)

https://www.w3.org/TR/encrypted-media/#dom-mediakeysystemconfiguration-audiocapabilities Referenced in:

- 2.3.3. Check Encrypted Decoding Support

https://www.w3.org/TR/encrypted-media/#dom-mediakeysystemmediacapability-contenttype Referenced in:

- 2.3.3. Check Encrypted Decoding Support (2)

https://www.w3.org/TR/encrypted-media/#dom-mediakeysystemconfiguration-distinctiveidentifier Referenced in:

- 2.1.10. MediaCapabilitiesKeySystemConfiguration
- 2.3.3. Check Encrypted Decoding Support

https://www.w3.org/TR/encrypted-media/#get-supported-configuration Referenced in:

- 2.3.3. Check Encrypted Decoding Support

https://www.w3.org/TR/encrypted-media/#dom-mediakeysystemconfiguration-initdatatypes Referenced in:

- 2.1.10. MediaCapabilitiesKeySystemConfiguration
- 2.3.3. Check Encrypted Decoding Support

https://www.w3.org/TR/encrypted-media/#key-system Referenced in:

- 2.3.3. Check Encrypted Decoding Support

https://www.w3.org/TR/encrypted-media/#dom-mediakeysystemaccess-keysystem Referenced in:

- 2.1.10. MediaCapabilitiesKeySystemConfiguration
- 2.3.3. Check Encrypted Decoding Support

https://www.w3.org/TR/encrypted-media/#dom-mediakeysystemconfiguration-persistentstate Referenced in:

- 2.1.10. MediaCapabilitiesKeySystemConfiguration
- 2.3.3. Check Encrypted Decoding Support

https://www.w3.org/TR/encrypted-media/#navigator-extension:-requestmediakeysystemaccess()Referenced in:

- 2.1.10. MediaCapabilitiesKeySystemConfiguration

https://www.w3.org/TR/encrypted-media/#dom-mediakeysystemmediacapability-robustness Referenced in:

- 2.1.11. KeySystemTrackConfiguration
- 2.3.3. Check Encrypted Decoding Support (2)

https://www.w3.org/TR/encrypted-media/#dom-mediakeysystemconfiguration-sessiontypes Referenced in:

- 2.1.10. MediaCapabilitiesKeySystemConfiguration
- 2.3.3. Check Encrypted Decoding Support

https://html.spec.whatwg.org/multipage/system-state.html#navigator Referenced in:

- 2.4. Navigator and WorkerNavigator extension

https://html.spec.whatwg.org/multipage/workers.html#workernavigator Referenced in:

- 2.4. Navigator and WorkerNavigator extension

https://html.spec.whatwg.org/multipage/#dom-navigator-canplaytype Referenced in:

- 1. Introduction

https://html.spec.whatwg.org/multipage/infrastructure.html#in-parallel Referenced in:

- 2.5. Media Capabilities Interface (2)

https://www.w3.org/TR/html52/webappapis.html#global-object Referenced in:

- 2.5. Media Capabilities Interface (2)

https://www.w3.org/TR/html52/browsers.html#concept-cross-origin Referenced in:

- 2.3.3. Check Encrypted Decoding Support

https://www.w3.org/TR/html52/webappapis.html#relevant-settings-object Referenced in:

- 2.5. Media Capabilities Interface

https://w3c.github.io/media-source/#media-source Referenced in:

- 2.1.2. MediaDecodingType

https://w3c.github.io/media-source/#dom-mediasource-istypesupported Referenced in:

- 1. Introduction

https://www.w3.org/TR/mediastream-recording/#mediarecorder Referenced in:

- 2.1.3. MediaEncodingType

https://mimesniff.spec.whatwg.org/#valid-mime-type Referenced in:

- 2.1.4. MIME types

https://www.w3.org/TR/secure-contexts/#settings-object Referenced in:

- 2.5. Media Capabilities Interface

https://heycam.github.io/webidl/#idl-DOMException Referenced in:

- 2.5. Media Capabilities Interface (2)

https://heycam.github.io/webidl/#idl-DOMString Referenced in:

- 2.1.5. VideoConfiguration
- 2.1.9. AudioConfiguration (2)
- 2.1.10. MediaCapabilitiesKeySystemConfiguration (2) (3)
- 2.1.11. KeySystemTrackConfiguration

https://heycam.github.io/webidl/#Exposed Referenced in:

- 2.4. Navigator and WorkerNavigator extension (2)
- 2.5. Media Capabilities Interface

https://heycam.github.io/webidl/#NewObject Referenced in:

- 2.5. Media Capabilities Interface (2)

https://heycam.github.io/webidl/#SameObject Referenced in:

- 2.4. Navigator and WorkerNavigator extension (2)

https://heycam.github.io/webidl/#idl-boolean Referenced in:

- 2.1.5. VideoConfiguration
- 2.1.9. AudioConfiguration
- 2.2. Media Capabilities Information (2) (3)

https://heycam.github.io/webidl/#idl-double Referenced in:

- 2.1.5. VideoConfiguration

https://heycam.github.io/webidl/#invalidstateerror Referenced in:

- 2.5. Media Capabilities Interface

https://heycam.github.io/webidl/#dfn-present Referenced in:

- 2.1.1. MediaConfiguration (2) (3) (4) (5) (6) (7) (8) (9)
- 2.1.9. AudioConfiguration
- 2.3.2. Create a MediaCapabilitiesDecodingInfo
- 2.3.3. Check Encrypted Decoding Support (2) (3) (4) (5)
- 2.5. Media Capabilities Interface

https://heycam.github.io/webidl/#securityerror Referenced in:

- 2.5. Media Capabilities Interface

https://heycam.github.io/webidl/#idl-unsigned-long Referenced in:

- 2.1.5. VideoConfiguration (2)
- 2.1.9. AudioConfiguration

https://heycam.github.io/webidl/#idl-unsigned-long-long Referenced in:

- 2.1.5. VideoConfiguration
- 2.1.9. AudioConfiguration

https://www.w3.org/TR/webrtc/#interface-definition Referenced in:

- 2.1.3. MediaEncodingType

https://www.w3.org/TR/workers/#the-workerglobalscope-common-interface Referenced in:

- 2.5. Media Capabilities Interface

### Terms defined by reference

- [DOM] defines the following terms:
  - document
- [ECMASCRIPT] defines the following terms:
  - TypeError
- [ENCRYPTED-MEDIA] defines the following terms:
  - MediaKeySystemAccess
  - MediaKeySystemConfiguration
  - MediaKeySystemMediaCapability
  - MediaKeys
  - MediaKeysRequirement
  - audioCapabilities
  - contentType
  - distinctiveIdentifier
  - get supported configuration
  - initDataTypes
  - key system
  - keySystem
  - persistentState
  - requestMediaKeySystemAccess()
  - robustness
  - sessionTypes
- [HTML] defines the following terms:
  - Navigator
  - WorkerNavigator
  - canPlayType()
  - in parallel
- [html52] defines the following terms:
  - global object
  - origin
  - relevant settings object
- [media-source] defines the following terms:
  - MediaSource
  - isTypeSupported()
- [mediacapture-record] defines the following terms:
  - MediaRecorder
- [mimesniff] defines the following terms:
  - valid mime type
- [secure-contexts] defines the following terms:
  - is the environment settings object settings a secure context?
- [WebIDL] defines the following terms:
  - DOMException
  - DOMString
  - Exposed
  - NewObject
  - SameObject
  - boolean
  - double
  - invalidstateerror
  - present
  - securityerror
  - unsigned long
  - unsigned long long
- [webrtc-pc] defines the following terms:
  - RTCPeerConnection
- [workers] defines the following terms:
  - WorkerGlobalScope

## References

### Normative References

[DOM]
  Anne van Kesteren. DOM Standard. Living Standard. URL: https://dom.spec.whatwg.org/
[ECMASCRIPT]
  ECMAScript Language Specification. URL: https://tc39.github.io/ecma262/
[ENCRYPTED-MEDIA]
  David Dorwin; et al. Encrypted Media Extensions. 18 September 2017. REC. URL: https://www.w3.org/TR/encrypted-media/
[HTML]
  Anne van Kesteren; et al. HTML Standard. Living Standard. URL: https://html.spec.whatwg.org/multipage/
[HTML52]
  Steve Faulkner; et al. HTML 5.2. 14 December 2017. REC. URL: https://www.w3.org/TR/html52/
[MEDIA-SOURCE]
  Matthew Wolenetz; et al. Media Source Extensions™. 17 November 2016. REC. URL: https://www.w3.org/TR/media-source/
[MIMESNIFF]
  Gordon P. Hemsley. MIME Sniffing Standard. Living Standard. URL: https://mimesniff.spec.whatwg.org/
[SECURE-CONTEXTS]
  Mike West. Secure Contexts. 15 September 2016. CR. URL: https://www.w3.org/TR/secure-contexts/
[SMPTE-ST-2084]
  High Dynamic Range Electro-Optical Transfer Function of Mastering Reference Displays. 2014. URL: https://ieeexplore.ieee.org/document/7291452
[SMPTE-ST-2086]
  Mastering Display Color Volume Metadata Supporting High Luminance and Wide Color Gamut Images. 2014. URL: https://ieeexplore.ieee.org/document/7291707
[SMPTE-ST-2094]
  Dynamic Metadata for Color Volume Transform Core Components. 2016. URL: https://ieeexplore.ieee.org/document/7513361
[sRGB]
  Multimedia systems and equipment - Colour measurement and management - Part 2-1: Colour management - Default RGB colour space - sRGB. URL: https://webstore.iec.ch/publication/6169
[WebIDL]
  Boris Zbarsky. Web IDL. 15 December 2016. ED. URL: https://heycam.github.io/webidl/
[WORKERS]
  Ian Hickson. Web Workers. 24 September 2015. WD. URL: https://www.w3.org/TR/workers/

### Informative References

[BATTERY-STATUS]
  Anssi Kostiainen; Mounir Lamouri. Battery Status API. 7 July 2016. CR. URL: https://www.w3.org/TR/battery-status/
[MEDIA-PLAYBACK-QUALITY]
  Media Playback Quality. Living Standard. URL: https://wicg.github.io/media-playback-quality/
[MEDIASTREAM-RECORDING]
  Miguel Casas-sanchez; James Barnett; Travis Leithead. MediaStream Recording. 21 June 2017. WD. URL: https://www.w3.org/TR/mediastream-recording/
[RFC7231]
  R. Fielding, Ed.; J. Reschke, Ed.. Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content. June 2014. Proposed Standard. URL: https://httpwg.org/specs/rfc7231.html

## IDL Index

    dictionary MediaConfiguration {
      VideoConfiguration video;
      AudioConfiguration audio;
    };

    dictionary MediaDecodingConfiguration : MediaConfiguration {
      required MediaDecodingType type;
      MediaCapabilitiesKeySystemConfiguration keySystemConfiguration;
    };

    dictionary MediaEncodingConfiguration : MediaConfiguration {
      required MediaEncodingType type;
    };

    enum MediaDecodingType {
      "file",
      "media-source",
    };

    enum MediaEncodingType {
      "record",
      "transmission"
    };

    dictionary VideoConfiguration {
      required DOMString contentType;
      required unsigned long width;
      required unsigned long height;
      required unsigned long long bitrate;
      required double framerate;
      boolean hasAlphaChannel;
      HdrMetadataType hdrMetadataType;
      ColorGamut colorGamut;
      TransferFunction transferFunction;
    };

    enum HdrMetadataType {
      "smpteSt2086",
      "smpteSt2094-10",
      "smpteSt2094-40"
    };

    enum ColorGamut {
      "srgb",
      "p3",
      "rec2020"
    };

    enum TransferFunction {
      "srgb",
      "pq",
      "hlg"
    };

    dictionary AudioConfiguration {
      required DOMString contentType;
      DOMString channels;
      unsigned long long bitrate;
      unsigned long samplerate;
      boolean spatialRendering;
    };

    dictionary MediaCapabilitiesKeySystemConfiguration {
        required DOMString keySystem;
        DOMString initDataType = "";
        MediaKeysRequirement distinctiveIdentifier = "optional";
        MediaKeysRequirement persistentState = "optional";
        sequence<DOMString> sessionTypes;
        KeySystemTrackConfiguration audio;
        KeySystemTrackConfiguration video;
      };

    dictionary KeySystemTrackConfiguration {
        DOMString robustness = "";
      };

    dictionary MediaCapabilitiesInfo {
      required boolean supported;
      required boolean smooth;
      required boolean powerEfficient;
    };

    dictionary MediaCapabilitiesDecodingInfo : MediaCapabilitiesInfo {
      required MediaKeySystemAccess keySystemAccess;
      MediaDecodingConfiguration configuration;
    };

    dictionary MediaCapabilitiesEncodingInfo : MediaCapabilitiesInfo {
      MediaEncodingConfiguration configuration;
    };

    [Exposed=Window]
    partial interface Navigator {
      [SameObject] readonly attribute MediaCapabilities mediaCapabilities;
    };

    [Exposed=Worker]
    partial interface WorkerNavigator {
      [SameObject] readonly attribute MediaCapabilities mediaCapabilities;
    };

    [Exposed=(Window, Worker)]
    interface MediaCapabilities {
      [NewObject] Promise<MediaCapabilitiesDecodingInfo> decodingInfo(MediaDecodingConfiguration configuration);
      [NewObject] Promise<MediaCapabilitiesInfo> encodingInfo(MediaEncodingConfiguration configuration);
    };

## Issues Index

The `channels` needs to be defined as a `double` (2.1, 4.1, 5.1, ...), an `unsigned short` (number of channels) or as an `enum` value. The current definition is a placeholder. ↵
#dictdef-mediaconfiguration Referenced in:

- 2.1.1. MediaConfiguration (2) (3)

#dom-mediaconfiguration-video Referenced in:

- 2.3.3. Check Encrypted Decoding Support

#dom-mediaconfiguration-audio Referenced in:

- 2.3.3. Check Encrypted Decoding Support

#dictdef-mediadecodingconfiguration Referenced in:

- 2.1.1. MediaConfiguration (2) (3)
- 2.1.2. MediaDecodingType
- 2.2. Media Capabilities Information
- 2.3.2. Create a MediaCapabilitiesDecodingInfo (2)
- 2.3.3. Check Encrypted Decoding Support
- 2.5. Media Capabilities Interface

#dom-mediadecodingconfiguration-keysystemconfiguration Referenced in:

- 2.1.1. MediaConfiguration
- 2.3.3. Check Encrypted Decoding Support
- 2.5. Media Capabilities Interface

#dictdef-mediaencodingconfiguration Referenced in:

- 2.1.1. MediaConfiguration
- 2.1.3. MediaEncodingType
- 2.2. Media Capabilities Information
- 2.3.1. Create a MediaCapabilitiesEncodingInfo (2)
- 2.5. Media Capabilities Interface

#valid-mediaconfiguration Referenced in:

- 2.1.1. MediaConfiguration
- 2.5. Media Capabilities Interface

#valid-mediadecodingconfiguration Referenced in:

- 2.5. Media Capabilities Interface

#enumdef-mediadecodingtype Referenced in:

- 2.1.1. MediaConfiguration

#dom-mediadecodingtype-file Referenced in:

- 2.1.2. MediaDecodingType

#dom-mediadecodingtype-media-source Referenced in:

- 2.1.2. MediaDecodingType

#enumdef-mediaencodingtype Referenced in:

- 2.1.1. MediaConfiguration

#dom-mediaencodingtype-record Referenced in:

- 2.1.3. MediaEncodingType

#dom-mediaencodingtype-transmission Referenced in:

- 2.1.3. MediaEncodingType

#valid-media-mime-type Referenced in:

- 2.1.4. MIME types (2)

#valid-audio-mime-type Referenced in:

- 2.1.9. AudioConfiguration

#valid-video-mime-type Referenced in:

- 2.1.5. VideoConfiguration

#dictdef-videoconfiguration Referenced in:

- 2.1.1. MediaConfiguration
- 2.1.5. VideoConfiguration
- 2.1.6. HdrMetadataType
- 2.1.7. ColorGamut
- 2.1.8. TransferFunction
- 2.1.10. MediaCapabilitiesKeySystemConfiguration

#dom-videoconfiguration-contenttype Referenced in:

- 2.1.5. VideoConfiguration (2) (3) (4)

#valid-video-configuration Referenced in:

- 2.1.1. MediaConfiguration

#dom-videoconfiguration-width Referenced in:

- 2.1.5. VideoConfiguration

#dom-videoconfiguration-height Referenced in:

- 2.1.5. VideoConfiguration

#dom-videoconfiguration-bitrate Referenced in:

- 2.1.5. VideoConfiguration

#dom-videoconfiguration-framerate Referenced in:

- 2.1.5. VideoConfiguration (2)

#dom-videoconfiguration-hasalphachannel Referenced in:

- 2.1.5. VideoConfiguration

#dom-videoconfiguration-hdrmetadatatype Referenced in:

- 2.1.5. VideoConfiguration

#dom-videoconfiguration-colorgamut Referenced in:

- 2.1.5. VideoConfiguration

#dom-videoconfiguration-transferfunction Referenced in:

- 2.1.5. VideoConfiguration

#enumdef-hdrmetadatatype Referenced in:

- 2.1.5. VideoConfiguration (2)
- 2.1.6. HdrMetadataType

#dom-hdrmetadatatype-smptest2086 Referenced in:

- 2.1.6. HdrMetadataType

#dom-hdrmetadatatype-smptest2094-10 Referenced in:

- 2.1.6. HdrMetadataType

#dom-hdrmetadatatype-smptest2094-40 Referenced in:

- 2.1.6. HdrMetadataType

#enumdef-colorgamut Referenced in:

- 2.1.5. VideoConfiguration (2)

#dom-colorgamut-srgb Referenced in:

- 2.1.7. ColorGamut (2)

#dom-colorgamut-p3 Referenced in:

- 2.1.7. ColorGamut (2)

#dom-colorgamut-rec2020 Referenced in:

- 2.1.7. ColorGamut

#enumdef-transferfunction Referenced in:

- 2.1.5. VideoConfiguration (2)

#dom-transferfunction-srgb Referenced in:

- 2.1.8. TransferFunction

#dom-transferfunction-pq Referenced in:

- 2.1.8. TransferFunction

#dom-transferfunction-hlg Referenced in:

- 2.1.8. TransferFunction

#dictdef-audioconfiguration Referenced in:

- 2.1.1. MediaConfiguration
- 2.1.9. AudioConfiguration
- 2.1.10. MediaCapabilitiesKeySystemConfiguration

#dom-audioconfiguration-contenttype Referenced in:

- 2.1.9. AudioConfiguration (2) (3)

#valid-audio-configuration Referenced in:

- 2.1.1. MediaConfiguration

#dom-audioconfiguration-channels Referenced in:

- 2.1.9. AudioConfiguration (2)

#dom-audioconfiguration-bitrate Referenced in:

- 2.1.9. AudioConfiguration

#dom-audioconfiguration-samplerate Referenced in:

- 2.1.9. AudioConfiguration (2)

#dom-audioconfiguration-spatialrendering Referenced in:

- 2.1.9. AudioConfiguration

#dictdef-mediacapabilitieskeysystemconfiguration Referenced in:

- 2.1.1. MediaConfiguration

#dom-mediacapabilitieskeysystemconfiguration-keysystem Referenced in:

- 2.1.10. MediaCapabilitiesKeySystemConfiguration
- 2.3.3. Check Encrypted Decoding Support

#dom-mediacapabilitieskeysystemconfiguration-initdatatype Referenced in:

- 2.1.10. MediaCapabilitiesKeySystemConfiguration

#dom-mediacapabilitieskeysystemconfiguration-distinctiveidentifier Referenced in:

- 2.1.10. MediaCapabilitiesKeySystemConfiguration

#dom-mediacapabilitieskeysystemconfiguration-persistentstate Referenced in:

- 2.1.10. MediaCapabilitiesKeySystemConfiguration

#dom-mediacapabilitieskeysystemconfiguration-sessiontypes Referenced in:

- 2.1.10. MediaCapabilitiesKeySystemConfiguration

#dom-mediacapabilitieskeysystemconfiguration-audio Referenced in:

- 2.1.10. MediaCapabilitiesKeySystemConfiguration

#dom-mediacapabilitieskeysystemconfiguration-video Referenced in:

- 2.1.10. MediaCapabilitiesKeySystemConfiguration

#dictdef-keysystemtrackconfiguration Referenced in:

- 2.1.10. MediaCapabilitiesKeySystemConfiguration (2) (3) (4)

#dom-keysystemtrackconfiguration-robustness Referenced in:

- 2.1.11. KeySystemTrackConfiguration

#dictdef-mediacapabilitiesinfo Referenced in:

- 2.2. Media Capabilities Information (2) (3) (4)
- 2.5. Media Capabilities Interface

#dom-mediacapabilitiesinfo-powerefficient Referenced in:

- 2.2. Media Capabilities Information

#dictdef-mediacapabilitiesdecodinginfo Referenced in:

- 2.2. Media Capabilities Information (2) (3)
- 2.3.2. Create a MediaCapabilitiesDecodingInfo (2)
- 2.5. Media Capabilities Interface

#dictdef-mediacapabilitiesencodinginfo Referenced in:

- 2.2. Media Capabilities Information (2)
- 2.3.1. Create a MediaCapabilitiesEncodingInfo (2)

#mediacapabilitiesinfo-supported Referenced in:

- 2.1.9. AudioConfiguration
- 2.3.1. Create a MediaCapabilitiesEncodingInfo
- 2.3.2. Create a MediaCapabilitiesDecodingInfo (2)

#mediacapabilitiesinfo-smooth Referenced in:

- 2.3.1. Create a MediaCapabilitiesEncodingInfo
- 2.3.2. Create a MediaCapabilitiesDecodingInfo

#mediacapabilitiesinfo-powerefficient Referenced in:

- 2.3.1. Create a MediaCapabilitiesEncodingInfo
- 2.3.2. Create a MediaCapabilitiesDecodingInfo

#mediacapabilitiesdecodinginfo-keysystemaccess Referenced in:

- 2.3.2. Create a MediaCapabilitiesDecodingInfo (2) (3)

#mediacapabilitiesdecodinginfo-configuration Referenced in:

- 2.3.2. Create a MediaCapabilitiesDecodingInfo (2)

#mediacapabilitiesencodinginfo-configuration Referenced in:

- 2.3.1. Create a MediaCapabilitiesEncodingInfo (2)

#create-a-mediacapabilitiesencodinginfo Referenced in:

- 2.5. Media Capabilities Interface

#create-a-mediacapabilitiesdecodinginfo Referenced in:

- 2.5. Media Capabilities Interface

#check-encrypted-decoding-support Referenced in:

- 2.3.2. Create a MediaCapabilitiesDecodingInfo

#mediacapabilities Referenced in:

- 2.4. Navigator and WorkerNavigator extension (2)

#dom-mediacapabilities-decodinginfo Referenced in:

- 2.5. Media Capabilities Interface (2)

#dom-mediacapabilities-encodinginfo Referenced in:

- 2.5. Media Capabilities Interface
- 4.1. Query recording capabilities with encodingInfo()