Here' my complete code for displaying and live recording audio and video (and later uploading the blob chunk into the server):
$(function () {
var handleSuccess = function(stream) {
var player = document.querySelector("#vid-user");
player.srcObject = stream;
console.log("Starting media recording")
var options = {mimeType: 'video/webm'};
var recordedChunks = [];
var mediaRecorder = new MediaRecorder(stream, options);
mediaRecorder.ondataavailable = function(e) {
console.log("Data available")
if (e.data.size > 0) {
recordedChunks.push(e.data);
var url = URL.createObjectURL(new Blob(recordedChunks));
console.log("URL: " + url)
}
}
mediaRecorder.start();
};
navigator.mediaDevices.getUserMedia({ audio: true, video: true })
.then(handleSuccess)
})
The video playback works, but the problem is that the mediaRecorder.ondataavailable is not triggered/called. What could be the problem here?
The start() method takes an optional parameter called timeslice. Unless you specify that parameter the dataavailable event only fires after you call stop() on the MediaRecorder.
https://developer.mozilla.org/en-US/docs/Web/API/MediaRecorder/start
The solution is to set
mediaRecorder.start(1000); // where 1000 is the interval
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With