解决方案
我创建了一个可用的示例,使用XHR并通过进度条报告加载进度,具体请点击这里.
问题
我注意到当我创建一个带有资源的<video>
元素并调用load()
时,它会加载到约36%,然后停止,除非你play()
它,此时它将在播放时继续加载其余的视频。
然而,我想要确保整个视频在手动播放前都已加载完毕,因为它是定时练习中的一个元素,如果在练习期间互联网连接断开,我将不得不检测到这种事件并重新开始练习。
我认为这是HTML5媒体元素的内置功能,但是否可以覆盖此本机功能?
我尝试使用XMLHttpRequest
将整个视频源作为arraybuffer
加载,然后将其转换为blob,并将其设置为我的<video>
元素中的<source>
元素的src
。这确实有效,但不理想,因为我无法通过进度条向用户报告下载进度,因为XHR是同步操作,会导致我的JavaScript挂起,直到收到响应。我知道XHR2现在具有此功能,但我必须支持IE8+,因此这不是一个选项。
是否有更简单,更优雅的解决方案来解决我的问题,并报告进度?
要求
- 需要在播放之前预加载整个
<video>
元素的<source>
。 - 需要报告进度。
preload="auto"
只会部分预加载,在某些情况下在iOS上根本不会预加载。 - jshbrntt