Web/API/MediaDevices

From Get docs


The MediaDevices interface provides access to connected media input devices like cameras and microphones, as well as screen sharing. In essence, it lets you obtain access to any hardware source of media data.

Properties

Inherits properties from its parent interface, EventTarget.

Events

devicechange
Fired when a media input or output device is attached to or removed from the user's computer. Also available via the ondevicechange property.

Methods

Inherits methods from its parent interface, EventTarget.

enumerateDevices()
Obtains an array of information about the media input and output devices available on the system.
getSupportedConstraints()
Returns an object conforming to MediaTrackSupportedConstraints indicating which constrainable properties are supported on the MediaStreamTrack interface. See Capabilities and constraints in Media Capture and Streams API (Media Stream) to learn more about constraints and how to use them.
getDisplayMedia()
Prompts the user to select a display or portion of a display (such as a window) to capture as a MediaStream for sharing or recording purposes. Returns a promise that resolves to a MediaStream.
getUserMedia()
With the user's permission through a prompt, turns on a camera and/or a microphone on the system and provides a MediaStream containing a video track and/or an audio track with the input.

Example

'use strict';

// Put variables in global scope to make them available to the browser console.
var video = document.querySelector('video');
var constraints = window.constraints = {
  audio: false,
  video: true
};
var errorElement = document.querySelector('#errorMsg');

navigator.mediaDevices.getUserMedia(constraints)
.then(function(stream) {
  var videoTracks = stream.getVideoTracks();
  console.log('Got stream with constraints:', constraints);
  console.log('Using video device: ' + videoTracks[0].label);
  stream.onremovetrack = function() {
    console.log('Stream ended');
  };
  window.stream = stream; // make variable available to browser console
  video.srcObject = stream;
})
.catch(function(error) {
  if (error.name === 'ConstraintNotSatisfiedError') {
    errorMsg('The resolution ' + constraints.video.width.exact + 'x' +
        constraints.video.height.exact + ' px is not supported by your device.');
  } else if (error.name === 'PermissionDeniedError') {
    errorMsg('Permissions have not been granted to use your camera and ' +
      'microphone, you need to allow the page access to your devices in ' +
      'order for the demo to work.');
  }
  errorMsg('getUserMedia error: ' + error.name, error);
});

function errorMsg(msg, error) {
  errorElement.innerHTML += '<p>' + msg + '</p>';
  if (typeof error !== 'undefined') {
    console.error(error);
  }
}

Specifications

Specification Status Comment
Media Capture and StreamsThe definition of 'MediaDevices' in that specification. Candidate Recommendation Initial definition

Browser compatibility

Update compatibility data on GitHub

Desktop Mobile
Chrome Edge Firefox Internet Explorer Opera Safari Android webview Chrome for Android Firefox for Android Opera for Android Safari on iOS Samsung Internet
MediaDevices Chrome

Full support 47

Edge

Full support 12

Firefox

Full support 33

IE

No support No

Opera

Full support 30

Safari

Full support 11

WebView Android

Full support 47

Chrome Android

Full support 47

Firefox Android

Full support 36

Opera Android

Full support 30

Safari iOS

Full support 11

Samsung Internet Android

Full support 5.0

devicechange event Chrome

Full support 57

Edge

Full support 12

Firefox

Full support 52

IE

No support No

Opera

Full support 34

Safari

No support No

WebView Android

No support No

Chrome Android

No support No

Firefox Android

?

Opera Android

Full support 43

Safari iOS

No support No

Samsung Internet Android

No support No

enumerateDevices Chrome

Full support 47

Edge

Full support 12

Firefox Full support 63

Notes' Disabled'

Full support 63

Notes' Disabled'

Notes' Prior to Firefox 63, enumerateDevices() only returned input devices. Starting with Firefox 63, output devices are also included if the media.setsinkid.enabled preference is enabled. Disabled' From version 63: this feature is behind the media.setsinkid.enabled preference (needs to be set to true). To change preferences in Firefox, visit about:config. Full support 39


IE

No support No

Opera

Full support 34

Safari

Full support 11

WebView Android

Full support 47

Chrome Android

Full support 47

Firefox Android Full support 63

Notes' Disabled'

Full support 63

Notes' Disabled'

Notes' Prior to Firefox 63, enumerateDevices() only returned input devices. Starting with Firefox 63, output devices are also included if the media.setsinkid.enabled preference is enabled. Disabled' From version 63: this feature is behind the media.setsinkid.enabled preference (needs to be set to true). To change preferences in Firefox, visit about:config. Full support 39


Opera Android

Full support 34

Safari iOS

Full support 11

Samsung Internet Android

Full support 5.0

getDisplayMedia()

Chrome Full support 72


Full support 72


No support 70 — 72

Notes' Disabled'

Notes' Available as a member of Navigator instead of MediaDevices in Chrome 70 and 71. Disabled' From version 70 until version 72 (exclusive): this feature is behind the Experimental Web Platform features preference (needs to be set to Enabled). To change preferences in Chrome, visit chrome://flags.

Edge Full support 79


Full support 79


Full support 17

Notes'

Notes' Available as a member of Navigator instead of MediaDevices.

Firefox Full support 66


Full support 66


No support 33 — 66

Notes'

Notes' Since Firefox 33 you can capture screen data using getUserMedia(), with a video constraint called mediaSource. Prior to 52 it relied on a client-configurable list of allowed sites.

IE

No support No

Opera Full support 60


Full support 60


No support 57 — 60

Notes' Disabled'

Notes' Available as a member of Navigator instead of MediaDevices in Opera 57 and 58. Disabled' From version 57 until version 60 (exclusive): this feature is behind the Experimental Web Platform features preference (needs to be set to Enabled).

Safari

Full support 13

WebView Android No support No

Notes'

No support No

Notes'

Notes' API is available, but will always fail with NotAllowedError.

Chrome Android

No support No

Firefox Android No support No

Notes'

No support No

Notes'

Notes' API is available, but will always fail with NotAllowedError.

Opera Android

No support No

Safari iOS

No support No

Samsung Internet Android

No support No

getSupportedConstraints Chrome

Full support 53

Edge

Full support 12

Firefox

Full support 44

IE

No support No

Opera

Full support 40

Safari

Full support 11

WebView Android

Full support 53

Chrome Android

Full support 52

Firefox Android

Full support 50

Opera Android

Full support 41

Safari iOS

Full support 11

Samsung Internet Android

Full support 6.0

getUserMedia

Chrome Full support 53

Notes'

Full support 53

Notes'

Notes' If you need this capability before version 53, refer to navigator.webkitGetUserMedia, a prefixed form of the deprecated navigator.getUserMedia API.

Edge

Full support 12

Firefox Full support 36

Notes'

Full support 36

Notes'

Notes' If you need this capability before version 36, refer to navigator.mozGetUserMedia, a prefixed form of the deprecated navigator.getUserMedia API. Notes' Before Firefox 55, getUserMedia() incorrectly returns NotSupportedError when the list of constraints specified is empty, or has all constraints set to false. Starting in Firefox 55, this situation now correctly calls the failure handler with a TypeError. Notes' When using the Firefox-specific video constraint called mediaSource to request display capture, Firefox 66 and later consider values of screen and window to both cause a list of screens and windows to be shown. Notes' Starting in Firefox 66, getUserMedia() can no longer be used in sandboxed <iframe>s or data URLs entered in the address bar by the user.

IE

No support No

Opera Full support 40

Notes'

Full support 40

Notes'

Notes' If you need this capability before version 40, refer to navigator.webkitGetUserMedia, a prefixed form of the deprecated navigator.getUserMedia API.

Safari

Full support 11

WebView Android

Full support 53

Chrome Android Full support 53

Notes'

Full support 53

Notes'

Notes' If you need this capability before version 53, refer to navigator.webkitGetUserMedia, a prefixed form of the deprecated navigator.getUserMedia API.

Firefox Android Full support 36

Notes'

Full support 36

Notes'

Notes' If you need this capability before version 36, refer to navigator.mozGetUserMedia, a prefixed form of the deprecated navigator.getUserMedia API. Notes' Before Firefox 55, getUserMedia() incorrectly returns NotSupportedError when the list of constraints specified is empty, or has all constraints set to false. Starting in Firefox 55, this situation now correctly calls the failure handler with a TypeError. Notes' When using the Firefox-specific video constraint called mediaSource to request display capture, Firefox 66 and later consider values of screen and window to both cause a list of screens and windows to be shown. Notes' Starting in Firefox 66, getUserMedia() can no longer be used in sandboxed <iframe>s or data URLs entered in the address bar by the user.

Opera Android Full support 41

Notes'

Full support 41

Notes'

Notes' If you need this capability before version 41, refer to navigator.webkitGetUserMedia, a prefixed form of the deprecated navigator.getUserMedia API.

Safari iOS

Full support 11

Samsung Internet Android

Full support 6.0

ondevicechange Chrome

Full support 57

Edge

Full support 12

Firefox Full support 52


Full support 52


No support 51 — 52

Notes' Disabled'

Notes' MediaDevices.ondevicechange is supported only on macOS. Disabled' From version 51 until version 52 (exclusive): this feature is behind the media.ondevicechange.enabled preference (needs to be set to true). To change preferences in Firefox, visit about:config.

IE

No support No

Opera

Full support 34

Safari

Full support 11

WebView Android

No support No

Chrome Android

No support No

Firefox Android

Full support Yes

Opera Android

Full support 34

Safari iOS

Full support 11

Samsung Internet Android

No support No

Stereo audio capture Chrome

?

Edge

?

Firefox

Full support 55

IE

No support No

Opera

?

Safari

No support No

WebView Android

?

Chrome Android

?

Firefox Android

No support No

Opera Android

?

Safari iOS

No support No

Samsung Internet Android

?

Legend

Full support  
Full support
No support  
No support
Compatibility unknown  
Compatibility unknown
See implementation notes.'
See implementation notes.
User must explicitly enable this feature.'
User must explicitly enable this feature.


See also