【问题标题】:Video does not play through even if enough content has been appended即使添加了足够的内容,视频也无法播放
【发布时间】:2015-06-20 14:54:35
【问题描述】:

我有一个设置,我使用 websockets 协议发送一个 10 分钟长的视频(大象梦),每个 4 秒的短片段。
我使用浏览器作为客户端,使用 Websocket API 接收内容,使用 HTML5 视频标签作为播放器,我使用 Media Source Extensions 将块添加到视频中。

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

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

由于我在 localhost 上对其进行测试,吞吐量非常高,因此我尝试将其降低到更常见的值(仍然优于视频比特率),以查看我是否使客户端超载,但这并没有改变任何东西。

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

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

【问题讨论】:

  • 视频停止播放时,浏览器控制台是否有消息?此外,如果您可以共享您的代码,这将有所帮助,因为每次您附加一个实际导致问题的块时,它可能会发生其他事情。值得在不同的浏览器上进行检查,因为 MSE 相对较新,并且不同的浏览器实现会有细微的差异。
  • @Mick 不,没有错误消息,一切正常,只是视频播放停止。我发现只有当要播放的片段具有不同的表示形式(MPEG-DASH 表示形式)时才会出现问题。问题可能是它具有不同的宽度和高度或不同的带宽吗?所有表示的帧速率都是相同的。我觉得很奇怪,如果您手动及时跳转,内容确实可以播放,但不会像下一段具有相同质量水平时那样自动再现。

标签: javascript video html5-video buffer media-source


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    您是否在它停止之前更改表示?当您更改表示时,您需要先为新表示附加初始段,然后再附加新表示的下一个段。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-21
      • 2020-10-07
      • 1970-01-01
      相关资源
      最近更新 更多