The MediaRecorder
interface of the MediaStream Recording 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, given a MediaStream
to record. Options are available to do things like set the container's MIME type (such as "video/webm"
or "video/mp4"
) and the bit rates of the audio and video tracks or a single overall bit rate.
Properties
MediaRecorder.mimeType
只读
- Returns the MIME type that was selected as the recording container for the
MediaRecorder
object when it was created.
MediaRecorder.state
只读
- Returns the current state of the
MediaRecorder
object (inactive
, recording
, or paused
.)
MediaRecorder.stream
只读
- Returns the stream that was passed into the constructor when the
MediaRecorder
was created.
MediaRecorder.ignoreMutedMedia
- Indicates whether the
MediaRecorder
instance will record input when the input MediaStreamTrack
is muted. If this attribute is false
, MediaRecorder
will record silence for audio and black frames for video. The default is false
.
MediaRecorder.videoBitsPerSecond
只读
- Returns the video encoding bit rate in use. This may differ from the bit rate specified in the constructor (if it was provided).
MediaRecorder.audioBitsPerSecond
只读
- Returns the audio encoding bit rate in use. This may differ from the bit rate specified in the constructor (if it was provided).
Methods
MediaRecorder.isTypeSupported()
- 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 time requestData()
was called. After calling this method, recording continues, but in a new Blob
.
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 final Blob
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 a Blob
object in the event's data
attribute.)
MediaRecorder.onerror
- An
EventHandler
called to handle the recordingerror
event, including reporting errors that arise with media recording. These are fatal errors that stop recording.
MediaRecorder.onpause
- An
EventHandler
called to handle the pause
event, which occurs when media recording is paused.
MediaRecorder.onresume
- An
EventHandler
called to handle the resume
event, which occurs when media recording resumes after being paused.
MediaRecorder.onstart
- An
EventHandler
called to handle the start
event, which occurs when media recording starts.
MediaRecorder.onstop
- An
EventHandler
called to handle the stop
event, which occurs when media recording ends, either when the MediaStream
ends — or after the MediaRecorder.stop()
method is called.
Example
if (navigator.mediaDevices) {
console.log('getUserMedia supported.');
var constraints = { audio: true };
var chunks = [];
navigator.mediaDevices.getUserMedia(constraints)
.then(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.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 = 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);
}
})
.catch(function(err) {
console.log('The following error occured: ' + err);
})
}
This code sample is inspired by the Web Dictaphone demo. Some lines have been omitted for brevity; refer to the source for the complete code.
Specifications
Browser compatibility
Feature |
Chrome |
Firefox (Gecko) |
Internet Explorer |
Opera |
Safari (WebKit) |
Basic support |
47.0 |
25.0 (25.0) |
未实现 |
未实现 |
未实现 |
Feature |
Android Webview |
Chrome for Android |
Firefox Mobile (Gecko) |
Firefox OS |
IE Phone |
Opera Mobile |
Safari Mobile |
Basic support |
47.0 |
47.0 |
25.0 (25.0) |
1.3[1] |
未实现 |
未实现 |
未实现 |
- [1] The initial Firefox OS implementation only supported audio recording.
See also
文档标签和贡献者