2011-12-03 65 views
7

我试图检测视频文件何时完成加载。我使它在firefox和safari上成功运行,但在chrome上,缓冲事件表现奇怪。 so, 在我的本地主机chrome中工作正常,但是当我上传到服务器时;铬html5视频buffered.end事件

  1. 缓冲百分比停止约50%,但缓冲区100%,

  2. 当页面刷新,百分比入住%0,但它继续缓冲..

这里是我的javascript

function loaded() 
     { 
      var v = document.getElementById('myVideo'); 
      var r = v.buffered; 
      var total = v.duration; 
      var current=v.currentTime; 
      var start = r.start(0); 
        var end = r.end(0); 
      var downloadPercent= Math.round((end/total)*100) 
      $("#loadProgress").css('width',downloadPercent+ '%'); 

        if(downloadPercent==100){ 
       $("#preloaderWrapper").fadeOut(function(){ 
       document.getElementById('myVideo').play(); 
       clearInterval(ratoteLoad); 
       $(this).remove();     
        });    
      }  

     } 

      $('#myVideo').bind('progress', function() 
      { 
       loaded(); 
      }); 

有什么想法吗? 谢谢

回答

7

试试这个:

myVideoTag = document.getElementById('video'); 
myVideoTag.addEventListener('progress', function(e) { 
    var percent = null; 
    // FF4+, Chrome 
    if (myVideoTag && myVideoTag.buffered && myVideoTag.buffered.length > 0 && myVideoTag.buffered.end && myVideoTag.duration) { 
     percent = myVideoTag.buffered.end(0)/myVideoTag.duration; 
    } 
    // Some browsers (e.g., FF3.6 and Safari 5) cannot calculate target.bufferered.end() 
    // to be anything other than 0. If the byte count is available we use this instead. 
    // Browsers that support the else if do not seem to have the bufferedBytes value and 
    // should skip to there. Tested in Safari 5, Webkit head, FF3.6, Chrome 6, IE 7/8. 
    else if (myVideoTag && myVideoTag.bytesTotal != undefined && myVideoTag.bytesTotal > 0 && myVideoTag.bufferedBytes != undefined) { 
     percent = myVideoTag.bufferedBytes/myVideoTag.bytesTotal; 
    } 

    if (percent !== null) { 
     percent = 100 * Math.min(1, Math.max(0, percent)); 

     // ... do something with var percent here (e.g. update the progress bar) 

    } 

}, false); 

...评论从mediaelement.js复制代码很好,但调整更容易显示在这里。我省略了Firefox 3.0的代码,因为它不太相关。 在所有的主流浏览器工作正常

PS:THX约翰代尔的MEJS - 伟大的东西;)

+0

谢谢你的评论,我想这一点,但似乎仍然相同,我... –

+0

您的评论说测试在IE 7/8中,但我想测试会失败,因为这些浏览器不使用'addEventListener' – AlienWebguy

+0

@AlienWebguy:对我很耻辱 - 那是真的!我省略了'myVideoTag.attachEvent('progress',function(e){...})的额外例程;'' –