我尝试使用HTML5计算使用Soundmanager2加载mp4文件的百分比。在以下两个示例中,每次 whileloading 事件在加载 SMSound 对象上触发时,都会调用代码:
// This is the method suggested in the Soundmanager2 documentation
// http://www.schillmania.com/projects/soundmanager2/doc/#smsound-buffered
var percentageLoaded, i, durationLoaded = 0;
for (i = 0; i < this.buffered.length; i++) {
durationLoaded += (this.buffered[i].end - this.buffered[i].start);
}
percentageLoaded = durationLoaded / this.duration * 100;
此示例导致 percentageLoaded 的值为 NaN ,因为 duration 在整个加载过程中保持 0 。我还在持续时间的位置尝试了 durationEstimate ,它仍然设置为 0 。响应标头包含正确的 Content-Type 值( audio / mp4 )和 Content-Length 值,但是持续时间似乎被忽略在这种情况下,Soundmanager2。
var percentageLoaded = audio.bytesLoaded / audio.bytesTotal * 100;
此示例导致 percentageLoaded 的值为 0 ,因为 bytesTotal 保留在 1 和 bytesLoaded 保持在 0 ,直到音频完全加载。同样,标头中的 Content-Range 值正确报告了字节数,但Soundmanager2忽略了该值。
是否有一种我尚未尝试的方法可以正确报告百分比,或者我忽略了哪个会导致此问题的因素?这只是加载mp4s时Soundmanager2的限制吗?
编辑1: 在onload事件触发后,所有值都是正确的,声音播放没有任何问题。
编辑2: 以下是有关CodePen的示例: http://codepen.io/anon/pen/EiIch