javascript - Firefox 的 MediaRecorder 接口(interface)每两秒只提供一次新的视频数据

标签 javascript firefox video html5-video webrtc

我正在尝试将通过 WebRTC 的 getUserMedia() 方法获得的视频流发送到服务器以进行额外处理。延迟很重要,因为我希望检测视频流中的变化并立即更新客户端。对于这种特殊用途,仅 Firefox 的解决方案是可以接受的,因此我正在研究 MediaRecorder界面。

我整理了一个简单的测试用例,包括在下面。没有错误,ondataavailable 回调按预期每 500 毫秒调用一次。但是,对于其中四分之三的调用,提供的数据大小为零。这向我表明,数据被分组为大约两秒的 block (可能是由于所使用的视频编码的限制)。

是否可以让 MediaRecorder 提供更细粒度的数据?如果不是,以低延迟将视频数据从 userMedia 流获取到服务器的最佳方法是什么?特定于 Chrome 或 Firefox 的界面会很好,但同时适用于两者的界面会更好。

<html>
  <body>
    <h1>MediaRecorder Test</h1>
    <video id="video" width="640" style="border: 1px solid black"></video>
  </body>
</html>

<script>
 // The variable that holds the video stream
 var mediastream = null;

 // Start video capture (and provide a way to stop it)
 navigator.mozGetUserMedia ( { video: true, audio: false },
   function(stream_arg) {
     mediastream = stream_arg;
     var vendorURL = window.URL || window.webkitURL;
     video.src = vendorURL.createObjectURL(mediastream);
     video.play();
     recordStream();
   },
   function(err) { console.log("Error starting video stream: " + err); }
 );

 // Record the stream
 var recorder = null;
 function recordStream() {
   recorder = new MediaRecorder(mediastream);
   recorder.ondataavailable = function(ev) {
     console.log("Got: "+ev.data.size);
   };
   recorder.start(500);
 }
</script>

最佳答案

您传递给 MediaRecorder 的 500 毫秒间隔是建议性的。使用的编解码器可能需要更大的数据/时间 block 才能使用。它可能会尽可能快地为您提供数据。

如果您需要低延迟,MediaRecorder 是不适合这项工作的工具。常规 WebRTC 调用将使用针对延迟而非质量进行优化的编解码器设置。我听说过有人在 WebRTC 服务器端录制,但我不知道有什么开源软件可以让我立即做到这一点。

也许在未来的某一天,MediaRecorder API 将允许我们选择编解码器参数,这将不是问题。

关于javascript - Firefox 的 MediaRecorder 接口(interface)每两秒只提供一次新的视频数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24677005/

相关文章:

javascript - 如何使用 Javascript 或 Jquery 创建单击元素的 Xpath?

css - Firefox 中的 float 框

delphi - 使用 Delphi 实现 nsIProtocolHandler

javascript - 从模式的末尾去除特定字符串的结尾

javascript - LinkedIn 共享代码中“&source=”等号后面放什么?

javascript - 输入选择下拉列表在 Firefox 中不起作用

javascript - 动态更改视频字幕语言

facebook - 如何在新时间轴中显示(我自己的)Flash 播放器的大预览?

python - PiCamera 流媒体

javascript - .sort 在 Firefox 中不起作用,但在 chrome 中起作用