MediaRecorder 'ondataavailable' 事件未触发

Posted

技术标签:

【中文标题】MediaRecorder \'ondataavailable\' 事件未触发【英文标题】:MediaRecorder 'ondataavailable' event not firingMediaRecorder 'ondataavailable' 事件未触发 【发布时间】:2020-07-13 06:21:32 【问题描述】:

这是我的完整代码,用于显示和实时录制音频和视频(然后将 blob 块上传到服务器):

$(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)
)

视频播放正常,但问题是mediaRecorder.ondataavailable 没有被触发/调用。这里可能是什么问题?

【问题讨论】:

【参考方案1】:

start() 方法采用一个名为timeslice 的可选参数。除非您指定该参数,否则 dataavailable 事件只会在您在 MediaRecorder 上调用 stop() 后触发。

https://developer.mozilla.org/en-US/docs/Web/API/MediaRecorder/start

【讨论】:

【参考方案2】:

解决办法是设置

mediaRecorder.start(1000); // where 1000 is the interval

【讨论】:

【参考方案3】:

根据文档 (https://developer.mozilla.org/en-US/docs/Web/API/MediaRecorder) 的解决方案:使用 MediaRecorder.start("time in milliseconds") 在指定的时间间隔触发“dataavailable”事件和/或使用setTimeout(MediaRecorder.requestData(), "time in milliseconds")。我有一个 jsFiddle 示例 here(不完整的代码,仅检查控制台消息)。

【讨论】:

你的意思是在 jsFiddle 上工作而不是在浏览器上工作? jsFiddle 不也是在浏览器中运行的吗? @quarks,没关系。我编辑了我的答案。事实证明,从我的服务器加载的代码有很小(但很重要)的差异。我修好了,让它工作了。

以上是关于MediaRecorder 'ondataavailable' 事件未触发的主要内容,如果未能解决你的问题,请参考以下文章

Android 10 源码MediaRecorder 录像流程:MediaRecorder 配置

使用MediaRecorder录制音频

MediaRecorder.stop() 停止失败:-1007

Android MediaRecorder解析

MediaRecorder,录制音视频音量非常小

Android-MediaRecorder录像机(视频)