2013-05-30 7 views
0

간헐적 인 오류가 발생하는 좌절한 상황에 처해 있습니다. 기능상 PHP는 비디오와 3 개의 그림을 지정합니다. 비디오가 페이지가로드 된 후 800ms가 지나면 재생이 시작되고 비디오가 끝날 때 즉시 그림이 표시됩니다.이 시점에서 사용자는 키 (그림 위치에 해당)를 누르고 키 누르기는 반응 시간을 측정하는 기능을 트리거합니다 그들이 선택한 사진을 저장하고 다음 페이지를로드하면이 모든 작업이 새로운 비디오와 새로운 사진으로 다시 발생합니다.간헐적 인 오류 : loadstart와 durationchange 사이에 비디오가로드되지 않게하려면 어떻게해야합니까?

가끔은 모두 정상적으로 작동합니다 ... 때때로.

다른 시간에 내가 비디오를 볼 것으로 예상되는 빈 화면이 나타납니다. 때로는 즉시 발생합니다. 때로는 15 ~ 20 회 정도의 성공적인로드가 발생하거나 중간에로드됩니다. Chrome 27.0.1453.93을 실행하고 Chrome의 내장 자바 스크립트 콘솔을 사용하여 오류를 추적하고 있습니다. 비디오가로드되지 않는 경우에도 javascript 오류 (DOCTYPE HTML PUBLIC "-// W3C // DTD HTML 4.01 // EN">)가 없습니다.

어디에서 문제가 발생했는지 정확하게 파악하기 위해 이벤트 리스너를 추가하고 익명 함수를 사용하여 js 콘솔 로그 파일에 일부 출력을 전달하여 어떤 비디오 이벤트 단계가 발생했는지 여부를 확인했습니다. 최소한 비디오는 안정적인 패턴입니다. 비디오가로드되지 않을 때마다 loadstart가 발생했지만 durationchange는 발생하지 않았습니다. 나는 계속해서 문제를 일으키는 것을 막을 수 없다.

답장을 보내거나 답장을 보내거나 다른 사람들이 경험을 뒷받침 할 정도로 나는 미친 듯이 느껴지지 않습니다. 가장 관련성이 높은 두 개의 자바 스크립트 함수를 여기에 포함 시키겠다.하지만 나는 그들이 얼마나 좋은지 잘 모르겠다.

<script> 

    function playVid(newSource){ 

      console.log("playVid worked"); 
      setTimeout(function(){//tells it to wait for some amount of time (below) before doing the next part 
       console.log("setTimeout was called"); 
       document.getElementById("StimClip").innerHTML="<video id='video1'> <source src='" + newSource + "' type='video/mp4'>Something went wrong. Sorry 'bout that!</video>"; //replace blank.jpg with the appropriate video 
       console.log("the inner html was set"); 
       myAddListener(); 
       console.log("myAddListener was called"); 
       var myVid=document.getElementById("StimClip"); //create a new variable to identify the video 
       console.log("the myVid variable was created"); 
       video1.play(); //play the video 

     } // 


      ,800); //finishes the setTimeout call by specifying how many msec to wait before executing. 


     } 

function myAddListener(){ 
     console.log("myAddListener worked"); 
     var myVideo = document.getElementsByTagName('video')[0];   
     myVideo.addEventListener('waiting', function(){console.log("I'm WAITING...!")}, false); 
     myVideo.addEventListener('suspend', function(){console.log("Nice suspenders.")}, false); 
     myVideo.addEventListener('abort', function(){console.log("video was aborted")}, false); 
     myVideo.addEventListener('error', function(){console.log("there was an error")}, false); 
     myVideo.addEventListener('loadstart', function(){console.log("load start worked")}, false); 
     myVideo.addEventListener('durationchange', function(){console.log("the duration changed")}, false); 
     myVideo.addEventListener('loadedmetadata', function(){console.log("metadata was loaded")}, false); 
     myVideo.addEventListener('loadeddata', function(){console.log("data was loaded")}, false); 
     myVideo.addEventListener('progress', function(){console.log("progress...? ")}, false); 
     myVideo.addEventListener('canplay', function(){console.log("video can play")}, false); 
     myVideo.addEventListener('canplaythrough', function(){console.log("can play through worked")}, false); 
     myVideo.addEventListener('playing', function(){console.log("the video started playing")}, false); 
     myVideo.addEventListener('ended', ShowPics, false); 
    } 
</script> 

답변

1

Oh geez. 나는 아무도 이것에 대답하려고 애쓰는 그들의 시간을 낭비하지 않았기 때문에 기쁩니다. 혹시 궁금한 점이 있다면 loadstart와 durationchange 사이의 비디오 로딩을 멈추게하는 것은 해당 비디오가 존재하지 않는다는 것입니다! (내 비디오 파일 중 하나의 파일 이름에 오자가 있었고 비디오 순서가 무작위로 지정 되었기 때문에 동일한 파일을로드하려고 할 때 항상 실패했다고 말할 수는 없었습니다.)

수정 됨.