MediaRecorder
The MediaRecorder
interface of the MediaRecorder API provides functionality to easily record media. It is created by the invocation of the MediaRecorder()
constructor.
Constructor
MediaRecorder.MediaRecorder()
- Creates a new
MediaRecorder
object.
Properties
MediaRecorder.mimeType
Read only- Returns the MIME type that was selected as the recording container for the
MediaRecorder
object when it was created. MediaRecorder.state
Read only- Returns the current state of the
MediaRecorder
object (inactive
,recording
, orpaused
.) MediaRecorder.stream
Read only- Returns the stream that was passed into the constructor when the
MediaRecorder
was created. MediaRecorder.ignoreMutedMedia
- What to do with a muted input
MediaStreamTrack
, e.g. insert black frames/zero audio volume in the recording or ignore altogether. MediaRecorder.videoBitsPerSecond
Read only- Actual video encoding bit rate in use (see the constructor
MediaRecorder.MediaRecorder()
options). MediaRecorder.audioBitsPerSecond;
Read only- Actual audio encoding bit rate in use (see the constructor
MediaRecorder.MediaRecorder()
options).
Methods
MediaRecorder.isTypeSupported(DOMString type)
- Returns a
Boolean
value indicating if the given MIME type is supported by the current user agent . MediaRecorder.pause()
- Pauses the recording of media.
MediaRecorder.requestData()
- Requests a
Blob
containing the saved data received thus far (or since the last timerequestData()
was called. After calling this method, recording continues, but in a newBlob
. MediaRecorder.resume()
- Resumes recording of media after having been paused.
MediaRecorder.start()
- Begins recording media; this method can optionally be passed a
timeslice
argument with a value in milliseconds. If this is specified, the media will be captured in separate chunks of that duration, rather than the default behavior of recording the media in a single large chunk. MediaRecorder.stop()
- Stops recording, at which point a
dataavailable
event containing the finalBlob
of saved data is fired. No more recording occurs.
Event Handlers
MediaRecorder.ondataavailable
- Called to handle the
dataavailable
event, which can be used to grab the recorded media (which is made available as aBlob
object in the event'sdata
attribute.) MediaRecorder.onerror
- Is an
EventHandler
called to handle therecordingerror
event, including reporting errors that arise with media recording. These are fatal errors that stop recording. MediaRecorder.onpause
- Is an
EventHandler
called to handle thepause
event, which occurs when media recording is paused. MediaRecorder.onresume
- Is an
EventHandler
called to handle theresume
event, which occurs when media recording resumes after being paused. MediaRecorder.onstart
- Is an
EventHandler
called to handle thestart
event, which occurs when media recording starts. MediaRecorder.onstop
- Is an
EventHandler
called to handle thestop
event, which occurs when media recording ends, either when theMediaStream
ends — or after theMediaRecorder.stop()
method is called.
Example
JavaScript
Copy Code
navigator.getUserMedia = (navigator.getUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia || navigator.webkitGetUserMedia); if (navigator.getUserMedia) { console.log('getUserMedia supported.'); var constraints = { audio: true }; var chunks = []; var onSuccess = function(stream) { var mediaRecorder = new MediaRecorder(stream); visualize(stream); record.onclick = function() { mediaRecorder.start(); console.log(mediaRecorder.state); console.log("recorder started"); record.style.background = "red"; record.style.color = "black"; } stop.onclick = function() { mediaRecorder.stop(); console.log(mediaRecorder.state); console.log("recorder stopped"); record.style.background = ""; record.style.color = ""; // mediaRecorder.requestData(); } mediaRecorder.onstop = function(e) { console.log("data available after MediaRecorder.stop() called."); var clipName = prompt('Enter a name for your sound clip'); var clipContainer = document.createElement('article'); var clipLabel = document.createElement('p'); var audio = document.createElement('audio'); var deleteButton = document.createElement('button'); clipContainer.classList.add('clip'); audio.setAttribute('controls', ''); deleteButton.innerHTML = "Delete"; clipLabel.innerHTML = clipName; clipContainer.appendChild(audio); clipContainer.appendChild(clipLabel); clipContainer.appendChild(deleteButton); soundClips.appendChild(clipContainer); audio.controls = true; var blob = new Blob(chunks, { 'type' : 'audio/ogg; codecs=opus' }); chunks = []; var audioURL = window.URL.createObjectURL(blob); audio.src = audioURL; console.log("recorder stopped"); deleteButton.onclick = function(e) { evtTgt = e.target; evtTgt.parentNode.parentNode.removeChild(evtTgt.parentNode); } } mediaRecorder.ondataavailable = function(e) { chunks.push(e.data); } } var onError = function(err) { console.log('The following error occured: ' + err); } navigator.getUserMedia(constraints, onSuccess, onError); } else { console.log('getUserMedia not supported on your browser!'); }
Note: This code sample comes from the Web Dictaphone demo. Some lines have been omitted for brevity; refer to the source for the complete code.
Specifications
Specification | Status | Comment |
---|---|---|
MediaStream Recording | Working Draft | Initial definition |
Browser compatibility
Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari (WebKit) |
---|---|---|---|---|---|
Basic support | 47.0 | 25.0 (25.0) | No support | No support | No support |
Feature | Android | Android Webview | Firefox Mobile (Gecko) | Firefox OS | IE Phone | Opera Mobile | Safari Mobile | Chrome for Android |
---|---|---|---|---|---|---|---|---|
Basic support | No support | 47.0 | 25.0 (25.0) | 1.3[1] | No support | No support | No support | 47.0 |
- [1] The initial Firefox OS implementation only supported audio recording.
See also
- Using the MediaRecorder API
- Web Dictaphone: MediaRecorder + getUserMedia + Web Audio API visualization demo, by Chris Mills (source on Github.)
- simpl.info MediaStream Recording demo, by Sam Dutton.
Navigator.getUserMedia
License
© 2016 Mozilla Contributors
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-us/docs/web/api/mediarecorder