首页 > 解决方案 > MediaRecorder API 块作为独立视频

问题描述

我正在尝试构建简单的应用程序,该应用程序将使用浏览器将视频从相机流式传输到远程服务器。对于从浏览器访问相机,我发现了一个很棒的WebRTC API: getUserMedia.

现在要将其流式传输到服务器 IIUC,最好的方法是使用一些WebRTC_API用于传输,然后使用一些服务器端库来处理它。

但是,起初我采用了一种不同的方法:我MediaRecorder根据来自相机的流来使用用户。然后我将时间片设置为MediaRecorder.start()几百毫秒,例如 200。我在 wrtMediaRecorder中有一些与我观察到的不同步的假设:

我观察到奇怪的行为(与我的假设有关MediaRecorder):

  1. 如果只有 1 个块上传到服务器 -> 它打开就好了。
  2. 如果有多个块 - >它们都没有正确加载,它们会给出错误:Could not determine type of stream. 但是,如果我用来ffmpeg连接所有块 - 生成的文件就可以了。如果我在客户端连接blobsfrom ,也会发生同样的情况MediaRecorder.ondataavailable

因此问题:

这些块理论上可以是独立的视频文件吗?或者这不是MediaRecorder设计的目的?如果不是 - 那么为什么我们甚至可以选择timeslice在其start()方法中提供参数?

奖金问题

如果我们设置的timeslice相对较小,例如 10 毫秒 -> 发送到的大量数据 blobMediaRecorder.ondataavailable的大小为 0。我们可以在哪里找到一些关于timeslice我们可以使用的最小值的保证/规范,以便数据 blob 是有意义的?

在文档中有以下内容:

如果时间片不是未定义的,那么一旦收集了最小时间片毫秒的数据,或者 UA 施加的某个最小时间片,以较大者为准,开始将数据收集到新的 Blob blob 中,并使用 DOM 将任务排队操作任务源,它使用 blob 在记录器上触发名为 dataavailable 的 blob 事件。

所以,我的猜测是它与某些大小为 0 的数据块有关。“UA强加的一些最小时间片”是什么意思?

附言

如果需要,很乐意提供代码。但问题不在于某些特定代码。这是为了了解背后的假设MediaRecorder API以及它们存在的原因。

标签: webapiweb-mediarecorder

解决方案


timeslice参数不允许创建独立的媒体块;相反,它提供了定期保存数据(例如在文件系统上,或上传到服务器)的机会,而不是在内存中保存潜在的大型媒体内容。


推荐阅读