Media/getUserMedia: Difference between revisions
< Media
Jump to navigation
Jump to search
(Updated information to present day.) |
No edit summary |
||
Line 3: | Line 3: | ||
== Goal == | == Goal == | ||
* Define and implement navigator.mediaDevices.getUserMedia() and associated functions with the W3C's WebRTC WG and Media Capture Task Force | * Define and implement navigator.mediaDevices.getUserMedia() and associated functions with the W3C's WebRTC WG and Media Capture Task Force | ||
* Current editor's draft: [http://dev.w3.org/2011/webrtc/editor/getusermedia.html W3 getUserMedia Editor's Draft] | * Spec is at Candidate Recommendation. Current editor's draft: [http://dev.w3.org/2011/webrtc/editor/getusermedia.html W3 getUserMedia Editor's Draft]. | ||
* Scenarios: [https://dvcs.w3.org/hg/dap/raw-file/tip/media-stream-capture/scenarios.html W3 MediaStream Capture Scenarios] | * Scenarios: [https://dvcs.w3.org/hg/dap/raw-file/tip/media-stream-capture/scenarios.html W3 MediaStream Capture Scenarios] | ||
== Status == | == Status == | ||
* Implemented getUserMedia on Desktop (Windows, Mac and Linux), Android, and B2G. Enabled in FF20+. | * Implemented getUserMedia on Desktop (Windows, Mac and Linux), Android, and B2G. Enabled in FF20+. | ||
** | * Implemented new and old API as of FF36: | ||
** Can be turned off by setting <b><tt>media.navigator.enabled</tt></b> and <tt><b> media.peerconnection.enabled</b></tt> to false. | ** <b><tt>navigator.mediaDevices.getUserMedia</tt></b> - modern promise-returning version (unprefixed). | ||
** <b><tt>navigator.mozGetUserMedia()</tt></b> - legacy backwards-compatible version (prefixed). | |||
* Capture resolution can be controlled with standard constraints for width, height, frameRate and (on mobile) facingMode can be used to choose between front/back camera. Supported in FF32+. | |||
* Promise-based mediaDevices.getUserMedia API is supported in FF36+. | |||
* Full constraints syntax with plain values and ideal-algorithm supported in FF38+. | |||
* Input device enumeration through mediaDevices.enumerateDevices() is supported in FF39+. | |||
* Can be turned off by setting <b><tt>media.navigator.enabled</tt></b> and <tt><b> media.peerconnection.enabled</b></tt> to false. | |||
* Permissions UI is supported, allowing selecting devices or rejecting permission, with notifications that a tab is using a mic or camera, and a global indicator on the desktop to locate tabs using mics/cameras. | * Permissions UI is supported, allowing selecting devices or rejecting permission, with notifications that a tab is using a mic or camera, and a global indicator on the desktop to locate tabs using mics/cameras. | ||
* Persistent permissions are supported. | * Persistent permissions are supported. | ||
* Explicit revocation of permission is supported. | * Explicit revocation of permission is supported. | ||
* Supports multiple tabs getting data from the same mic or camera (if the user allows) | * Supports multiple tabs getting data from the same mic or camera (if the user allows) | ||
* Audio rate is fixed at 16000Hz. | * Audio rate is fixed at 16000Hz. | ||
* Echo cancellation is on by default, but connecting a captured audio stream directly to an audio element on the same system may still cause feedback unless a headset is used. | * Echo cancellation is on by default, but connecting a captured audio stream directly to an audio element on the same system may still cause feedback unless a headset is used. | ||
* | * Limited screen-sharing support under a pref. | ||
== Examples == | == Examples == | ||
Line 31: | Line 35: | ||
Includes, but not limited to: | Includes, but not limited to: | ||
* Name :-) | * Name :-) | ||
* Firefox does not support Chrome's outdated constraints syntax ('mandatory', 'minWidth' etc.) | |||
* Firefox does not support MediaStreamTrack.getSources(), an outdated version of enumerateDevices. | |||
* Firefox leaves the mic/camera active (light on, etc) until the application explicitly calls mediastream.stop(). Chrome turns them on when assigned to a media element or PeerConnection, and off again when removed. | * Firefox leaves the mic/camera active (light on, etc) until the application explicitly calls mediastream.stop(). Chrome turns them on when assigned to a media element or PeerConnection, and off again when removed. | ||
** Note that if an application drops all references to a MediaStream but does not call stop(), the camera will remain active for some period of time (or until you navigate to another page in the tab or close the tab). | ** Note that if an application drops all references to a MediaStream but does not call stop(), the camera will remain active for some period of time (or until you navigate to another page in the tab or close the tab). | ||
** This behavior may change in the future | ** This behavior may change in the future | ||
* Both now support window.URL.createObjectURL(stream), though Mozilla recommends against using it unless you have to. We expect Chrome to support srcObject = stream soon (perhaps prefixed as we are currently) | * Both now support window.URL.createObjectURL(stream), though Mozilla recommends against using it unless you have to. We expect Chrome to support srcObject = stream soon (perhaps prefixed as we are currently) | ||
* Use the [https://github.com/webrtc/adapter adapter.js] shim to bridge cross-browser differences (constraints polyfill should be forthcoming). | * Use the [https://github.com/webrtc/adapter adapter.js] shim to bridge cross-browser differences (constraints polyfill should be forthcoming). | ||
== Todo == | |||
* mediaDevices.getSupportedConstraints(). | |||
* More constraints to implement, like deviceId. |
Revision as of 21:30, 2 April 2015
getUserMedia
Goal
- Define and implement navigator.mediaDevices.getUserMedia() and associated functions with the W3C's WebRTC WG and Media Capture Task Force
- Spec is at Candidate Recommendation. Current editor's draft: W3 getUserMedia Editor's Draft.
- Scenarios: W3 MediaStream Capture Scenarios
Status
- Implemented getUserMedia on Desktop (Windows, Mac and Linux), Android, and B2G. Enabled in FF20+.
- Implemented new and old API as of FF36:
- navigator.mediaDevices.getUserMedia - modern promise-returning version (unprefixed).
- navigator.mozGetUserMedia() - legacy backwards-compatible version (prefixed).
- Capture resolution can be controlled with standard constraints for width, height, frameRate and (on mobile) facingMode can be used to choose between front/back camera. Supported in FF32+.
- Promise-based mediaDevices.getUserMedia API is supported in FF36+.
- Full constraints syntax with plain values and ideal-algorithm supported in FF38+.
- Input device enumeration through mediaDevices.enumerateDevices() is supported in FF39+.
- Can be turned off by setting media.navigator.enabled and media.peerconnection.enabled to false.
- Permissions UI is supported, allowing selecting devices or rejecting permission, with notifications that a tab is using a mic or camera, and a global indicator on the desktop to locate tabs using mics/cameras.
- Persistent permissions are supported.
- Explicit revocation of permission is supported.
- Supports multiple tabs getting data from the same mic or camera (if the user allows)
- Audio rate is fixed at 16000Hz.
- Echo cancellation is on by default, but connecting a captured audio stream directly to an audio element on the same system may still cause feedback unless a headset is used.
- Limited screen-sharing support under a pref.
Examples
- See mediaDevices.getUserMedia on developer.mozilla.org for examples.
Demos
Differences from Chrome webkitGetUserMedia()
Includes, but not limited to:
- Name :-)
- Firefox does not support Chrome's outdated constraints syntax ('mandatory', 'minWidth' etc.)
- Firefox does not support MediaStreamTrack.getSources(), an outdated version of enumerateDevices.
- Firefox leaves the mic/camera active (light on, etc) until the application explicitly calls mediastream.stop(). Chrome turns them on when assigned to a media element or PeerConnection, and off again when removed.
- Note that if an application drops all references to a MediaStream but does not call stop(), the camera will remain active for some period of time (or until you navigate to another page in the tab or close the tab).
- This behavior may change in the future
- Both now support window.URL.createObjectURL(stream), though Mozilla recommends against using it unless you have to. We expect Chrome to support srcObject = stream soon (perhaps prefixed as we are currently)
- Use the adapter.js shim to bridge cross-browser differences (constraints polyfill should be forthcoming).
Todo
- mediaDevices.getSupportedConstraints().
- More constraints to implement, like deviceId.