我已经构建了一些代码,可以让MediaRecorder API捕获音频和视频,然后使用ondataavailable函数通过websockets将相应的webm文件blob发送到服务器。然后,服务器通过websockets将这些blob发送到客户端,websockets使用Media Source Extension API将视频放在缓冲区中。
这很好用,除非我想在中途启动一个流,我不能只发送最新的blob,因为blob本身是无法播放的。此外,如果我按顺序发送blob,浏览器通常会抱怨音频编码不匹配。
我真的不太了解视频容器,编解码器等,因为我应该把它关闭,但我的问题是,我怎么能将这些blob作为独立视频播放?我可以以某种方式使用代码将第一个blob中的信息(可单独播放)添加到其他blob上吗?能够让游戏中途播放的好方法是什么?我会转码,但似乎需要太长时间,因为我想建立实时(或接近)流媒体。
谢谢!
答案 0 :(得分:1)
使用MSE,您可以加载包含带有轨道信息的WebM段的第一个块,然后加载,然后再开始加载集群。浏览器会搞清楚。
WebM群集以时间戳开头,这使其能够正常工作。
答案 1 :(得分:1)
仅从MediaRecorder API接收的第一个Blob包含标头。因此,您只需将其提取并添加到其他Blob之前,就可以将其作为独立的WebM视频播放。我建议您使用十六进制编辑器之类的工具来验证其是否有效。您可以在服务器上自动执行此过程。