MediaCapabilities: encodingInfo() method
========================================

 The **`MediaCapabilities.encodingInfo()`** method, part of the `MediaCapabilities` interface of the Media Capabilities API, returns a promise with the tested media configuration's capabilities information.
 This contains the three boolean properties `supported`, `smooth`, and `powerefficient`, which describe how compatible the device is with the type of media.

Syntax
------


```js
encodingInfo(configuration)
```

### Parameters

`configuration`

An object with a property `type` and *either* a `video` or `audio` property containing a configuration of the appropriate type:

`type`

The type of media being tested. This takes one of two values:

`record`

Represents a configuration for recording of media, e.g. using `MediaRecorder`.

`webrtc`

Represents a configuration meant to be transmitted over electronic means (e.g. using `RTCPeerConnection`). **Note:** Firefox uses `transmission` for this type, and `webrtc` does not work.

`transmission` 
Non-standard

The synonym of `webrtc` to be used in Firefox.


`video`

 Configuration object for a video media source.
 This has the following properties:

`contentType`

String containing a valid video MIME type, and (optionally) a `codecs` parameter.

`width`

The width of the video.

`height`

The height of the video.

`bitrate`

The number of bits used to encode one second of the video file.

`framerate`

The number of frames making up one second of video playback.


`audio`

 Configuration object for an audio media source.
 This has the following properties:

`contentType`

String containing a valid audio MIME type, and (optionally) a `codecs` parameter.

`channels`

The number of channels used by the audio track.

`bitrate`

The number of bits used to encode one second of the audio file.

`samplerate`

The number of audio samples making up one second of the audio file.


### Return value

A `Promise` fulfilling with an object containing three Boolean attributes:

`supported`

`true` if the media content can be decoded at all. Otherwise, it is `false`.

`smooth`

`true` if playback of the media will be smooth (of high quality). Otherwise it is `false`.

`powerEfficient`

`true` if playback of the media will be power efficient. Otherwise, it is `false`.


 Browsers will report a supported media configuration as `smooth` and `powerEfficient` until stats on this device have been recorded.
 All supported audio codecs are reported to be power efficient.

### Exceptions

`TypeError`

Thrown if the `configuration` passed to the `encodingInfo()` method is invalid, which may be for any of the following reasons:

* the type is not video or audio,
* the `contentType` is not a valid codec MIME type,
* there is some other error in the media configuration passed to the method, including omitting any of the `configuration` elements.

Examples
--------


```js
//Create media configuration to be tested
const mediaConfig = {
  type: "record", // or 'transmission'
  video: {
    contentType: "video/webm;codecs=vp8.0", // valid content type
    width: 1920, // width of the video
    height: 1080, // height of the video
    bitrate: 120000, // number of bits used to encode 1s of video
    framerate: 48, // number of frames making up that 1s.
  },
};

// check support and performance
navigator.mediaCapabilities.encodingInfo(mediaConfig).then((result) => {
  console.log(
    `This configuration is ${result.supported ? "" : "not "}supported,`,
  );
  console.log(`${result.smooth ? "" : "not "}smooth, and`);
  console.log(`${result.powerEfficient ? "" : "not "}power efficient.`);
});
```

Specifications
--------------

| Specification |
| --- |
| Media Capabilities # ref-for-dom-mediacapabilities-encodinginfo |

Browser compatibility
---------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

See also
--------

* `MediaCapabilities.decodingInfo()`