如何发现不再调用 MediaRecorder.ondataavailble 的问题?

问题描述

我正在使用 navigator.mediaDevices.getUserMedia() 捕获用户的音频和视频,然后使用 MediaRecorder 及其 ondataavailable 在本地存储该视频和音频 blob,以便稍后上传。

现在我正在处理一个问题,即由于某种原因 ondataavailable 在录制过程中停止被调用。我不知道为什么,我也没有收到任何出错的警报。首先,有人知道为什么会发生这种情况以及如何捕获错误吗?

其次,我试图重现。通过做这样的事情。

navigator.mediaDevices.getUserMedia({ audio: true,video: true })
  .then(function(camera) {
          local_media_stream = camera;
          camera.getVideoTracks()[0].onended = function() { console.log("VIDEO ENDED") }
          camera.getAudioTracks()[0].onended = function() { console.log("Audio ENDED") }
          camera.onended = function() { console.log("--- ENDED") }
          camera.onremovetrack = (event) => { console.log(`${event.track.kind} track removed`); };
  }).catch(function(error) {
        alert('Unable to capture your camera. Please check logs.' + error);
        console.error(error);
  });

并用

录制流
recorder = new MediaRecorder(local_media_stream,{
    mimeType: encoding_options,audioBitsPerSecond: 128000,videoBitsPerSecond: bits_per_second,});
recorder.ondataavailable = function(e) {
    save_blob(e.data,blob_index)
    blob_index++;
}
recorder.onstop = function(e) {
    console.log("recorder stopped");
    console.log(e)
}
recorder.onerror = function(error) {
    console.log("recorder error");
    alert(error)
    throw error;
}
recorder.onstart = function() {
    console.log('started');
};
recorder.onpause = function() {
    console.log('paused');
};
recorder.onresume = function() {
    console.log('resumed');
};
recorder.start(15000)

然后我尝试手动终止流以希望通过执行来重现发生的任何问题

local_media_stream.getVideoTracks()[0].stop()

现在不再调用 ondataavailable,但没有调用任何已结束的事件。录音仍在进行,local_media_stream 仍处于活动状态。

如果我也关闭音频

local_media_stream.getAudioTracks()[0].stop()

现在 local_media_stream 未处于活动状态,但仍然没有调用任何事件,告诉我流停止并且记录器仍在运行,但从未调用 ondatavailable

我能做什么?我想知道本地流正在成功录制,如果没有收到警报,我至少可以通知用户录制不再保存。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)