即使附加了足够的内容,视频也无法播放

Video does not play through even if enough content has been appended

我有一个设置,我使用 websockets 协议发送一个 10 分钟长的视频 (Elephants Dream),每个视频分成 4 秒的短片段。
我使用浏览器作为客户端,使用 Websocket API to receive the content and the HTML5 Video Tag as player, to which I append the chunks as they come to the video using Media Source Extensions.

问题是某处似乎存在限制(最大接收缓冲区大小、最大媒体源源缓冲区缓冲区大小、视频元素上的最大缓冲内容等),因此视频无法正确播放到最后但会停止即使有足够的数据也更早。

所有片段都正确到达并及时附加。同时,视频从头开始播放。
您可以看到播放器上显示缓冲视频的灰线不断增长,直到到达该位置时停止增长并且视频停止播放的某个时间点。
但是,完整的视频已附加到 mediasource 元素,关于输出消息,也可以通过手动跳转到未来或过去的另一个位置来测试。看起来总是只有一小部分内容 "loaded".

因为我在本地主机上测试它,所以吞吐量非常高,所以我尝试将它降低到更常见的值(仍然比视频比特率好)以查看我是否使客户端超载,但这并没有改变任何东西。

也尝试了不同的段大小,结果完全相同,只是停止的时间点不同。

知道这个限制在哪里或可能发生什么吗?

你是在它停止之前改变表现吗?当您更改表示时,您需要在追加新表示的下一段之前为新表示追加初始段。

我认为您的缓冲数据存在差距。浏览器的缓冲区大小有限,您可以向其追加。当达到该限制时,如果您附加额外的数据,浏览器将通过丢弃缓冲区中不需要的一些帧来静默释放一些 space 。根据我的经验,如果你发生得太快,你最终可能会在你的缓冲区中出现空白。您应该在追加时监视 buffered 属性的状态以查看是否存在任何间隙。