我使用碎片 mp4 和 websockets 的组合将实时视频流传输到 MSE 接管的 Web 浏览器。
我已经使用 ffmpeg 成功分割成适当的 fmp4 格式,并使用 mpeg4parser 工具检查了数据。利用 websocket 服务器,传入的数据被广播到通过 websocket 连接的所有浏览器客户端。这适用于播放和实时 streaming(using rtsp 流作为输入)。
当 ffmpeg 流启动时,客户端尝试中途访问流 i.e 时,我遇到的问题就出现了。我已将 init moov)元素保存在 websocket 服务器的队列缓冲区中。此队列缓冲区在连接时将此数据发送到每个新客户端。
我相信这些数据是正确发送的,因为浏览器控制台没有抛出“未找到媒体源元素”错误。然而,当收到广播的 moof/mdat 对时,没有视频流。
所以我想回答的几个问题是:
-
我有观察者,每个 moof 元素都包含一个序列号,在它的 mfhd 子元素中。这是否必须始终从 1 开始,对于中途访问的视频流,情况自然不会如此?
-
是否可以在浏览器 client.js 中查看数据。目前我可以看到的是我的 mediaBuffer 包含了一堆[1]。我可以在这些缓冲区中打印二进制数据吗?
-
从服务器端看,数据似乎以 moof/mdat 片段发送,因为从 ffmpeg 输出到 websocket 服务器的每个新数据都以 moof 元素开头。通过在控制台中打印二进制数据注意到了这一点。是否有类似的方法在客户端查看此数据。
-
有没有人知道为什么会这样?我遗漏了一些支离破碎的 mp4 或 ISO BMFF 格式细节。
如果有任何进一步的细节需要澄清,请告诉我,我会提供。
1 回答
确保您的片段包含基本媒体解码时间。然后将视频标签'currentTime'设置为收到的第一个片段的时间。