2014-02-11 61 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; 
      } 
    } 
}