5

我已经构建了一些代码,它将获取 MediaRecorder API 来捕获音频和视频,然后使用 ondataavailable 函数通过 websockets 将相应的 webm 文件 blob 发送到服务器。然后,服务器通过 websocket 将这些 blob 发送到客户端,该客户端使用媒体源扩展 API 将视频放在一个缓冲区中。

这很好用,除了如果我想在中途开始一个流,我不能只发送最新的 blob,因为 blob 本身是不可播放的。此外,如果我乱序发送 blob,浏览器通常会抱怨音频编码不匹配。

我真的不太了解视频容器、编解码器等,但我的问题是,如何将这些 blob 作为独立视频播放?我可以以某种方式使用代码将第一个 blob 中的信息(可单独播放)添加到其他 blob 中吗?什么是能够让流中途播放的好方法?我会转码,但似乎需要很长时间,因为我想设置实时(或接近)流媒体。

谢谢!

4

2 回答 2

3

只有从 MediaRecorder API 接收到的第一个 blob 包含标头。因此,您需要简单地提取它并将其添加到您的其他 blob 中,以便能够将它们作为独立的 WebM 视频播放。我建议您使用十六进制编辑器等工具来验证它是否有效。您可以在您的服务器上自动执行此过程。

于 2019-07-05T06:04:56.123 回答
2

使用 MSE,您可以加载包含带有轨道信息的 WebM 段的第一个块,然后再开始加载集群。浏览器会弄清楚的。

WebM 集群以时间戳开始,这使得它能够工作。

于 2017-12-16T03:29:44.990 回答