我正在尝试为 HTML5 音频元素制作一个加载栏(显示加载/缓冲的百分比)。
对于视频标签,可以使用以下方法进行计算:
video.buffered.end(0) / video.duration
但我无法让它与音频标签一起使用。它只是返回一个固定值。
任何想法?
谢谢!
我正在尝试为 HTML5 音频元素制作一个加载栏(显示加载/缓冲的百分比)。
对于视频标签,可以使用以下方法进行计算:
video.buffered.end(0) / video.duration
但我无法让它与音频标签一起使用。它只是返回一个固定值。
任何想法?
谢谢!
在不检查的情况下调用end
方法buffered
是不可靠的。您可能试图在任何情况下调用该方法。检查这个小提琴:
document.querySelector('span').innerHTML = document.querySelector('audio').buffered.length;
<audio src="http://myst729.qiniudn.com/within-temptation_pale.mp3" controls autoplay></audio>
<p>Buffered Length: <span></span></p>
看?在最开始时,缓冲长度为 0 - 没有加载任何内容。start
在调用或end
方法之前,您需要确保缓冲长度不为 0 。
每次阅读buffered
,它确实是固定的。因此,要获得视觉上的“加载”效果,您需要一遍又一遍地阅读它。
在这里,我尝试每 50 毫秒更新一次加载和播放的百分比:
var audio = document.querySelector('audio');
var percentages = document.querySelectorAll('span');
function loop() {
var buffered = audio.buffered;
var loaded;
var played;
if (buffered.length) {
loaded = 100 * buffered.end(0) / audio.duration;
played = 100 * audio.currentTime / audio.duration;
percentages[0].innerHTML = loaded.toFixed(2);
percentages[1].innerHTML = played.toFixed(2);
}
setTimeout(loop, 50);
}
loop();
<audio src="http://myst729.qiniudn.com/within-temptation_pale.mp3" controls autoplay></audio>
<p>Loaded: <span></span>%</p>
<p>Played: <span></span>%</p>
注意:您所在的地方可能无法访问 MP3 文件。如果是这种情况,请尝试其他对您有利的来源。否则你会听到一个非常好听的女声,并且看到百分比不断变化,最终达到 100%。
您可以使用以下代码获取 HTML5 音频元素的进度并将其应用于<progress>
元素:
var myAudio = document.getElementById('#myAudio');
var myProgressBar = document.getElementById('#myProgressBar');
myAudio.addEventListener('timeupdate', onLoadProgress);
function onLoadProgress () {
var progress = parseInt(((myAudio.currentTime / myAudio.duration) * 100), 10);
myProgressBar.value = progress;
}
我不太确定我是否理解你的问题。但这是我用来计算缓冲音频量的一种方法
var audio = document.querySelector('audio');
var set;
window.onload = function(){set=setInterval(buffer,1000);};
function buffer () {
if(audio.buffered.length>0){
var percent = (audio.buffered.end(0) / audio.duration) * 100;
document.querySelector('p').innerHTML = percent+'%';
if(percent === 100){
clearInterval(set);
}
}
}
<audio src="http://customhtml5video.000webhostapp.com/audio.mp3" controls></audio>
<p></p>
它返回的固定值是多少?你能创建一个简单的jsfiddle来演示这个问题吗?
这个html5 医生教程是最近写的,有一些关于 HTML5 音频当前播放状态的很好的信息。页面中间的以下提示看起来可能与您的情况相关:
您可能需要检查 durationchange 事件,因为某些持续时间可能会在媒体下载时发生变化。此外,根据元数据是否可用,您可能需要等到音频开始播放才能检查其持续时间。简而言之,请密切关注 durationchange 事件,并在持续时间未知时注意 NaN 值!