Media/getUserMedia

< Media

Contents

getUserMedia

Goal

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+.
    • Note on FF32-37: Plain values and ideal are not supported. However, values are not mandatory unless you add a non-spec require keyword.
  • 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

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.