The MediaRecorder.ondataavailable event handler (part of the MediaRecorder API) handles the dataavailable event, allowing you to run code in response to Blob data being made available for use.
The dataavailable event is fired when a Blob is made available for use in your application. This occurs in four different circumstances:
- When the media stream ends, the whole stream is made available in one single
Blob. - When
MediaRecorder.stop()is called, all of the media captured up to that point is made available in one singleBlob, after which no more capturing occurs. - When
MediaRecorder.requestDatais called, all of the media captured up to that point is made available in one singleBlob, after which a new Blob is created and media capture continues separately in that blob. - If a
timesliceproperty was passed into theMediaRecorder.start()method that started the media capture, things behave a little differently.timeslicecontains a millisecond value that specifies how many milliseconds of media eachBlobshould contain. So if the method call looked like this —recorder.start(1000);— thedataavailableevent would fire after each second of media capture, and you'd end up with multiple second-long blobs of media to grab in multiple captures. You can use timeslice alongsideMediaRecorder.stop()andMediaRecorder.requestData()to produce multiple same-length blobs plus other shorter blobs as well.
Note: The Blob is available in the dataavailable's data property.
Syntax
MediaRecorder.ondataavailable = function(event) { ... }
MediaRecorder.addEventListener('dataavailable', function(event) { ... })
Example
...
mediaRecorder.onstop = function(e) {
console.log("data available after MediaRecorder.stop() called.");
var audio = document.createElement('audio');
audio.controls = true;
var blob = new Blob(chunks, { 'type' : 'audio/ogg; codecs=opus' });
var audioURL = window.URL.createObjectURL(blob);
audio.src = audioURL;
console.log("recorder stopped");
}
mediaRecorder.ondataavailable = function(e) {
chunks.push(e.data);
}
...
Properties
- data
- Contains the captured media blob.
Specifications
| Specification | Status | Comment |
|---|---|---|
| MediaStream Recording The definition of 'MediaRecorder.ondataavailable' in that specification. |
Working Draft | Initial definition |
Browser compatibility
| Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari (WebKit) |
|---|---|---|---|---|---|
| Basic support | 47[2] | 25.0 (25.0) | Not supported | Not supported | Not supported |
| Feature | Android | Android Webview | Firefox Mobile (Gecko) | Firefox OS | IE Phone | Opera Mobile | Safari Mobile | Chrome for Android |
|---|---|---|---|---|---|---|---|---|
| Basic support | Not supported | Not supported | 25.0 (25.0) | 1.3[1] | Not supported | Not supported | Not supported | Not supported |
[1] The intial Firefox OS implementation only supported audio recording.
[2] To try this feature on Chrome, enable Experimental Web Platform features from chrome://flags . Currently only video is supported, not audio.
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