2014-02-11 63 views
1

我試圖加載更改HTML5視頻播放器的currentTime,捕獲圖像並返回到視頻中的舊位置。html5視頻加載()獲取InvalidStateError

它的作品如果我廣告alert();,但它不工作沒有。因此,我試圖打電話video.load(),但是這給了我這個錯誤消息:

Uncaught InvalidStateError: An attempt was made to use an object that is not, or is no longer, usable.

這是我的代碼:

function myHandler(e) { 
    a = $('#testvideo').get(0).currentTime; 
    generateThumbnail(a); 
} 

function generateThumbnail(i) { 
    var video = $('#testvideo').get(0); 
    for(var j =0; j<4;j++){ 
     video.currentTime = i+ (j/2); 
     if(video.readyState!=4){ 
      video.load(); 
      video.addEventListener('loadeddate', function() { 
       console.log(video.readyState); 
       generateImage(i,j); 
      }, false); 
     }else{ 
      generateImage(i,j); 
     } 
    } 
    returnToPause(i); 
} 

回答

2

這是很難從您的代碼段說,但你可能試圖在視頻加載之前設置當前時間。嘗試運行你的代碼等待loadedmetadata事件被拋出之後:

$('#testvideo').on('loadedmetadata',function(){ 
    // do what you want with this.currentTime 
}) 
0

所以IO解決它,這是我的解決方案,如果別人再需要它。

我只是使用eventlistener seeked處理currentTime已更改和視頻已加載。

video.addEventListener('loadedmetadata', function(){ 
    video.currentTime = startTime; 
}); 

//if video is ready to play grab the images 
video.addEventListener('seeked', function(){ 
    generateImage(); 
}); 

if(frameTime <= snippetLength * framesPerSecond){ 
    var canvas = $('#canvas').get(0); 

    imageArray[frameTime] = canvas.toDataURL('image/jpeg'); 
    .... 
    frameTime++; 
    video.currentTime = +startTime + frameTime/framesPerSecond; 
}else{ 
    displayCurrentImages(); 
    displayCurrentTime(); 
} 

function returnToPause(i){ 
    var video = $('#testvideo').get(0); 
    video.currentTime = i; 
} 

感謝您的幫助

+0

我有一個類似的錯誤。此代碼會觸發該錯誤,並且沒有其他瀏覽器(甚至沒有Edge)出現此問題: 'video.src ='some URL'; video.currentTime = 0;' 修復它是添加'加載'事件處理程序,然後設置值。 – Tatsh

0

video.currentTime = XXX;可以設置聽衆播放

Exp。

video = document.getElementById('video'); 
begin_play = 50; 
play_video_frist = true; //if you want to run only frist time  
video.addEventListener("play", capture, false); 

function capture(event) 
{ 
    if (event.type == "play"){ 
     if(play_video_frist){ 
      play_video_frist = false; 
      video.currentTime = begin_play; 
      } 
    } 
}