Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

MediaRecorder 'ondataavailable' event not firing

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?

like image 415
quarks Avatar asked Apr 01 '20 13:04

quarks


2 Answers

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

like image 154
chrisguttandin Avatar answered Nov 18 '22 02:11

chrisguttandin


The solution is to set

mediaRecorder.start(1000); // where 1000 is the interval
like image 22
quarks Avatar answered Nov 18 '22 00:11

quarks