Javascript html5视频下载进度仅适用于firefox
我有以下函数来计算视频的加载进度(非常常见): …绑定到$(文档)中的“进度”事件(以及其他一些作为安全措施)。就绪功能:Javascript html5视频下载进度仅适用于firefox,javascript,jquery,html5-video,Javascript,Jquery,Html5 Video,我有以下函数来计算视频的加载进度(非常常见): …绑定到$(文档)中的“进度”事件(以及其他一些作为安全措施)。就绪功能: var videoTest = document.getElementById("videoTest"); $('#videoTest').bind('progress', function () { updateProgressBar (videoTest); }); $('#videoTest').bind('loadeddata', function (
var videoTest = document.getElementById("videoTest");
$('#videoTest').bind('progress', function () {
updateProgressBar (videoTest);
});
$('#videoTest').bind('loadeddata', function () {
updateProgressBar (videoTest);
});
$('#videoTest').bind('canplaythrough', function () {
updateProgressBar (videoTest);
});
$('#videoTest').bind('playing', function () {
updateProgressBar (videoTest);
});
您可以在此处查看一个实例:
正如你所看到的,它在firefox上运行良好,但在其他浏览器中,“percent”变量从未达到预期的“100”值;该函数总是在90~时停止,因此我无法知道视频何时完成加载(这对于我尝试执行的操作至关重要)
这就像“进度”事件在我获得“百分比”的最终值之前停止工作,因为如果单击“播放”按钮,“播放”事件将触发,然后成功计算并读取“百分比”变量的最后一个值(100)
是我遗漏了什么,还是这是一个常见的问题?我有什么办法可以使用吗
提前谢谢 var videoElement=null//TODO设置对视频元素的引用
var videoElement = null; //TODO set reference to video element
var checkVideoLoadingProgressTimerDelay = 50;
var checkVideoLoadingProgressTimerID = -1;
function getVideoLoadingProgress(){
var end = 0;
if(videoElement.buffered.length >= 1){
end = videoElement.buffered.end(0);
}
var progress = end / videoElement.duration;
progress = isNaN(progress) ? 0 : progress;
return progress;
};
function startCheckVideoLoadingProgressTimer(){
checkVideoLoadingProgressTimerID =
setTimeout(checkVideoLoadingProgressTimerHandler, checkVideoLoadingProgressTimerDelay);
};
function checkVideoLoadingProgressTimerHandler(){
var progress = getVideoLoadingProgress();
//TODO update progress bar
if(progress < 1){
startCheckVideoLoadingProgressTimer();
}
};
var checkVideoLoadingProgressTimerDelay=50;
var checkVideoLoadingProgressTimerID=-1;
函数getVideoLoadingProgress(){
var-end=0;
如果(videoElement.buffered.length>=1){
end=videoElement.buffered.end(0);
}
var progress=结束/videoElement.duration;
进度=isNaN(进度)?0:进度;
返回进度;
};
函数startCheckVideoLoadingProgressTimer(){
checkVideoLoadingProgressTimerID=
设置超时(检查VideoLoadingProgressTimerHandler,检查VideoLoadingProgressTimerDelay);
};
函数检查VideoLoadingProgressTimerHandler(){
var progress=getVideoLoadingProgress();
//TODO更新进度条
如果(进度<1){
startCheckVideoLoadingProgressTimer();
}
};
另外,视频的“预加载”属性的值为“auto”,并不保证用户代理将加载整个视频
var videoElement = null; //TODO set reference to video element
var checkVideoLoadingProgressTimerDelay = 50;
var checkVideoLoadingProgressTimerID = -1;
function getVideoLoadingProgress(){
var end = 0;
if(videoElement.buffered.length >= 1){
end = videoElement.buffered.end(0);
}
var progress = end / videoElement.duration;
progress = isNaN(progress) ? 0 : progress;
return progress;
};
function startCheckVideoLoadingProgressTimer(){
checkVideoLoadingProgressTimerID =
setTimeout(checkVideoLoadingProgressTimerHandler, checkVideoLoadingProgressTimerDelay);
};
function checkVideoLoadingProgressTimerHandler(){
var progress = getVideoLoadingProgress();
//TODO update progress bar
if(progress < 1){
startCheckVideoLoadingProgressTimer();
}
};