媒体文件的规格通常比较大,且不会一次全部加载,了解文件的当前加载状态以及播放的准备状态是十分有益的.
使用networkState属性可以了解媒体文件的加载状态,这个属性含有四个状态值;0表示还没有数据,1表示网络处于闲置状态,2表示媒体正在加载,而3表示媒体已完成加载,在媒体加载时,可以使用这个属性添加一个屏幕指示:
if(video.networkState === 2){...}
但更有使用价值的是readyState属性.这个属性与networkState属性相似,也不同的状态值,但这些报告的是媒体的准备状态--是否加载了元数据和这个文件等.这五个状态为:
0.表示无法获得任何媒体信息;
1.表示媒体的元数据完成加载;
2.表示可以获得有关当前画面或回放位置的信息;
3.表示可以获得有关当前画面以及至少下一幅画面的信息;
4.表示可以获得充足的数据和可接受的下载速度从而使媒体可以播放到结尾.
例如,用户可能只想在元数据完成加载时运行一个函数以获取一个视频的持续时间,要实现上述操作,需要确保readyState的状态值至少为1;
if(video.readyState > 0){...}
执行以上示例需要不断地轮询,所以这个解决方案并非是所有情况的最佳解决方案.一个更好的解决方案是让浏览器使用一个事件来报告状态值,后文的媒体事件中对这个事件进行了介绍.