我想在页面里引入一个audio标签,资源文件放在服务器上,如何监测到下载的进度呢,不仅仅是知道什么时候下载完成能播放了,而是下载的一个进度,有相关的事件吗?
我想在页面里引入一个audio标签,资源文件放在服务器上,如何监测到下载的进度呢,不仅仅是知道什么时候下载完成能播放了,而是下载的一个进度,有相关的事件吗?
8 回答5.8k 阅读✓ 已解决
9 回答9.1k 阅读
6 回答4.7k 阅读✓ 已解决
5 回答3.5k 阅读✓ 已解决
4 回答7.9k 阅读✓ 已解决
7 回答9.7k 阅读
4 回答8.6k 阅读
监测具体的进度,可以绑定
progress
事件或自己启动一个定时器,并用buffered
和duration
计算出来,注意buffered
是一个timeRanges对象,详情请参考:http://www.w3school.com.cn/html5/av_prop_buffered.asp。progress
事件和buffered
在安卓上面的webkit系列支持性很差,这是我前年到去年做audio相关的 Web App 时的实测结果。不知道现在怎样了,缺乏测试机,也没有找到大规模的靠谱测试……至于什么时候可以播放了,这个问题反而比上面的要棘手。
audio有相应事件可以辅助判断音频是否可以播放,但各个浏览器对下面的事件支持不完全/不完整,如果对兼容性敏感的话,不建议使用。
判断音频能否播放,现在最成熟的方案还是在音频调用
load
API以后,开启一个定时器判断<audio>
的相应readystate
属性是否大于了1。“用定时器监测代替事件”依然是解决兼容性问题的万金油。为何一定要做这个判断呢,因为audio标签的
play
的api的实现有差异。现在的浏览器分成两个阵营,play
各有各的逻辑:所以会有调用了audio.play但是什么也没有发生的情况……因此一定要在时序上保证:
audio.load()
audio.readystate>1
的时候audio.play()
参考:w3school HTML 5 视频/音频参考手册
下表为readystate的对应值的代表。
感谢@怡红公子提醒,把跟问题前一个分句相关的答案调到后头……