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
文档标签和贡献者