我正在使用片段化的mp4和websockets的组合,将实时视频流从MSE接管的地方流式传输到Web浏览器。
我已经使用ffmpeg成功将片段分割成适当的fmp4格式,并使用mpeg4parser工具检查了数据。利用websocket服务器,传入的数据将广播到通过websocket连接的所有浏览器客户端。这对于回放和实时流都很好(使用rtsp流作为输入)。
当客户端尝试中途访问流时(即ffmpeg流启动后),将出现我面临的问题。我已经将init segment(ftyp + moov)元素保存在websocket服务器的队列缓冲区中。该队列缓冲区将此数据发送到连接时的每个新客户端。
我认为此数据已正确发送,因为浏览器控制台未引发“找不到媒体源元素”错误。然而,当接收到广播的mood / mdat对时,没有视频流式传输。
因此,我想回答几个问题:
1)我有一个观察者,每个moof元素的mfhd子元素都包含一个序列号。这是否必须始终从1开始,而中途访问的视频流自然不会这样吗?
2)是否可以在浏览器client.js中查看数据。目前,我所能看到的是我的mediaBuffer包含一堆[Object ArrayBuffer]。我可以在这些缓冲区中打印二进制数据吗?
3)从服务器端看,数据似乎是按moof / mdat片段发送的,因为从ffmpeg输出到达websocket服务器的每个新数据都以moof元素开头。通过在控制台中打印二进制数据可以注意到这一点。有没有类似的方法可以在客户端查看此数据。
4)有谁知道为什么会这样吗?我缺少一些零散的mp4或ISO BMFF格式的详细信息。
如果需要进一步详细说明,请告诉我,我会提供。
确保您的片段包括基本媒体解码时间。然后将视频标签“ currentTime”设置为收到的第一个片段的时间。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句