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