coderef

Media captureBaseline · Widely available

The navigator.mediaDevices.getUserMedia() API requests access to devices that produce audio or video streams, such as microphones or video cameras.

Supported in all major browsers for at least 30 months — safe to use without fallbacks. Baseline since Sep 19, 2017. Widely available since Mar 19, 2020.

Browser support

DesktopChrome
1–52Not supported
53+Supportedsince Aug 31, 2016
Current: 155
Edge
12+Supportedsince Jul 29, 2015
Current: 154
Firefox
1–35Not supported
36+Supportedsince Feb 24, 2015
Current: 157
Safari
1–10.1Not supported
11+Supportedsince Sep 19, 2017
Current: 27
MobileChrome Android
18–52Not supported
53+Supportedsince Sep 7, 2016
Current: 155
Firefox Android
4–35Not supported
36+Supportedsince Feb 27, 2015
Current: 157
Safari iOS
1–10.3Not supported
11+Supportedsince Sep 19, 2017
Current: 27

How to use

This feature is Baseline widely available — use it freely, no fallback needed.

Example

Full syntax and examples are on MDN: InputDeviceInfo.

Feature detection

JS · check before using
if ("MediaDeviceInfo" in globalThis) {
  // MediaDeviceInfo is available
} else {
  // load a polyfill or use a fallback
}

Sub-features

Support for each part of the feature (72). The overall table above shows when the whole feature works.

Sub-featureChromeEdgeFirefoxSafariChrome AndroidFirefox AndroidSafari iOS
InputDeviceInfo4779✕1147✕11
InputDeviceInfo.getCapabilities6779✕1767✕17
MediaDeviceInfo47123911473911
MediaDeviceInfo.deviceId47123911473911
MediaDeviceInfo.groupId47123911473911
MediaDeviceInfo.kind47123911473911
MediaDeviceInfo.label47123911473911
MediaDeviceInfo.toJSON47184211474211
MediaDevices47123311473611
MediaDevices.devicechange_event571252111325211
MediaDevices.enumerateDevices4712116114711611
MediaDevices.getSupportedConstraints53124411525011
MediaDevices.getUserMedia53123611533611
MediaDevices.getUserMedia.secure_context_required53796811536811
MediaStream55121511551511
MediaStream.MediaStream55124411554211
MediaStream.active55125211555211
MediaStream.addTrack55124411554411
MediaStream.addtrack_event55125011555011
MediaStream.clone55124811554811
Show 52 more
Sub-featureChromeEdgeFirefoxSafariChrome AndroidFirefox AndroidSafari iOS
MediaStream.getAudioTracks55122211552211
MediaStream.getTrackById55124911554911
MediaStream.getTracks55123411553411
MediaStream.getVideoTracks55122211552211
MediaStream.id55124111554111
MediaStream.removeTrack55124411554411
MediaStream.removetrack_event55127211557911
MediaStreamTrack26122211262211
MediaStreamTrack.applyConstraints59124311594311
MediaStreamTrack.applyConstraints.aspectRatio_constraint59≤15✕11594311
MediaStreamTrack.applyConstraints.autoGainControl_constraint677955✕6755✕
MediaStreamTrack.applyConstraints.channelCount_constraint5979✕✕59✕✕
MediaStreamTrack.applyConstraints.deviceId_constraint59124311594311
MediaStreamTrack.applyConstraints.echoCancellation_constraint59795011595011
MediaStreamTrack.applyConstraints.facingMode_constraint59125011595011
MediaStreamTrack.applyConstraints.frameRate_constraint59125011595011
MediaStreamTrack.applyConstraints.groupId_constraint59127011597911
MediaStreamTrack.applyConstraints.height_constraint59125011595011
MediaStreamTrack.applyConstraints.latency_constraint597950✕5950✕
MediaStreamTrack.applyConstraints.noiseSuppression_constraint677955✕6755✕
MediaStreamTrack.applyConstraints.resizeMode_constraint7279144✕72144✕
MediaStreamTrack.applyConstraints.sampleRate_constraint5912✕1159✕11
MediaStreamTrack.applyConstraints.sampleSize_constraint5912✕1159✕11
MediaStreamTrack.applyConstraints.width_constraint59125011595011
MediaStreamTrack.clone35124811354811
MediaStreamTrack.enabled26122411262411
MediaStreamTrack.ended_event26125011265011
MediaStreamTrack.getCapabilities5912132115913211
MediaStreamTrack.getConstraints53125011525011
MediaStreamTrack.getSettings59125011595011
MediaStreamTrack.id26122211262211
MediaStreamTrack.kind26122211262211
MediaStreamTrack.label26122211262211
MediaStreamTrack.mute_event26125911265911
MediaStreamTrack.muted3812✕1138✕11
MediaStreamTrack.readyState26125011265011
MediaStreamTrack.stop32123411323411
MediaStreamTrack.unmute_event26125911265911
MediaStreamTrackEvent26125011265011
MediaStreamTrackEvent.MediaStreamTrackEvent55125011555011
MediaStreamTrackEvent.track26125011265011
Navigator.mediaDevices47123611473611
Navigator.mediaDevices.secure_context_required7479691174✕11
OverconstrainedError6379✕1163✕11
OverconstrainedError.OverconstrainedError6379✕1163✕11
OverconstrainedError.constraint6379✕11.163✕11.3
Permissions.permission_camera6479132166413216
Permissions.permission_microphone6479132166413216
iframe.allow.camera64797411.1647911.3
iframe.allow.microphone64797411.1647911.3
http.headers.Permissions-Policy.camera8888✕✕88✕✕
http.headers.Permissions-Policy.microphone8888✕✕88✕✕