我正在使用碎片化mp4和websockets的组合将实时视频流从MSE接管的web浏览器流式传输。
我已经使用ffmpeg成功地分割成适当的fmp4格式,并使用mpeg4parser工具检查了数据。利用websocket服务器,传入的数据被广播到所有通过websocket连接的浏览器客户端。这适用于播放和直播流(使用rtsp流作为输入)。
我所面临的问题发生在客户端试图访问流中途,即,一旦ffmpeg流已经开始。我保存了init段(ftyp + moov)元素在websocket服务器的队列缓冲区中。此队列缓冲区将此数据发送到连接时的每个新客户端。
我相信这个数据是正确发送的,因为浏览器控制台没有抛出'Media Source Element not found'错误。然而,当它接收到广播的moof/mdat对时,没有视频流。
我想知道的几个问题是:
1)我观察到每个moof元素在它的mfhd子元素中包含一个序列号。这是否必须从1总是开始,这自然不会是中途访问视频流的情况?
2)是否可以在浏览器client.js中查看数据。目前我所能看到的是我的medibuffer包含了一堆[Object ArrayBuffer]。我可以在这些缓冲区中打印二进制数据吗?
3)从服务器端来看,数据似乎以moof/mdat片段发送,因为每个从ffmpeg输出到websocket服务器的新数据都以moof元素开始。这是通过在控制台中打印二进制数据注意到的。在客户端是否有类似的方法来查看这些数据?
有人知道为什么会发生这种情况吗?我丢失了一些碎片化的mp4或ISO BMFF格式细节。如果需要进一步的细节澄清,请让我知道,我将提供。
确保您的片段包含基本媒体解码时间。然后将视频标签"currentTime"设置为接收到的第一个片段的时间。