HTML5视频缓冲,尽管等待"canplaythrough"事件"play()"



我试图确保(尽可能(HTML5视频只有在能够完全播放而无需缓冲时才开始播放。对于上下文,视频的MediaStream然后用于与另一个音频源混合,并通过对等WebRTC连接发送。这些视频通常为5-10MB,长度为几分钟(即,一个体面的宽带连接在播放完成之前加载整个视频应该没有问题(。

为了实现这一点,我的代码当前等待视频元素上的canplaythrough事件开始,并在触发时调用play()

这"有效"是指视频开始播放,并且在大多数情况下,缓冲足以使视频不间断地播放。但是,在少数情况下(特别是到目前为止的两个人,碰巧两个人都在MacBook Airs上运行Chrome,并且显然不是令人难以置信的,但宽带互联网连接不错(,视频播放交错和断断续续---我相信这意味着视频没有充分缓冲。

是否有更好的技术来确保视频在大多数浏览器上得到充分缓冲?

使用fetch()在内存中缓冲整个视频可能会起作用吗?还是由此产生的blob()实际上也在幕后懒惰地缓冲?

鉴于我无法在本地真正复制这些问题,是否有测试和调试此类问题的良好做法?

我已经构建了一个名为Stream or Not的工具,可能会在网络方面有所帮助。它会告诉您视频开始需要多长时间,有多少摊位等。 您可以使用浏览器的devTools来限制网络(在Chrome中,您可以模拟CPU(。

老实说 - 要查看网络是否是问题,只要比特率(使用 FFprobe https://www.streamclarity.com/probe?url=(低于网络速度,您就不会受到网络约束。

还有另一种可能。 您的视频的尺寸是多少? 浏览器上视口的尺寸如何? 如果您要求设备砍掉大量像素 - 播放限制可能会从带宽转移到 CPU 处理速度。我已经在移动设备和尝试播放 4k 视频的旧 Mac 上看到这种情况 - 没有足够的 CPU 来处理那么多像素。

  1. 我会测试网络速度,只是为了确定。
  2. 确保发送的像素不超过所需。 功率不足的设备将出现问题。

最新更新