2013-05-30 2 views
0

Я в ужасающей ситуации с периодической ошибкой. Когда функционально, PHP задает видео и 3 изображения для отображения. Видео начинается с 800 мс после загрузки страницы, и изображения отображаются сразу после окончания видео, после чего пользователь нажимает клавишу (соответствующую местоположению изображения), а нажатие клавиши запускает функцию, которая измеряет время реакции , сохраняет изображение, которое они выбрали, и загружает следующую страницу, после чего все это происходит снова с новым видео и новыми изображениями.Прерывистая ошибка: что могло бы заставить видео остановить загрузку между loadstart и durationchange?

Это все работает просто отлично ... иногда.

В другое время я получаю пустой экран, на котором я ожидал увидеть видео. Иногда это происходит сразу, иногда после 15 или 20 успешных нагрузок или где-то между ними. Я использую Chrome 27.0.1453.93 и отслеживаю ошибки с помощью встроенной javascript-консоли Chrome. Даже когда видео не загружается, ошибок javascript нет (с DOCTYPE HTML PUBLIC "- // W3C // DTD HTML 4.01 // EN">).

Чтобы определить, где вещи разрушаются, я добавил кучу прослушивателей событий и использовал анонимные функции для передачи некоторого вывода в файл журнала консоли js, чтобы увидеть, какие этапы видео события происходят или не происходят. Здесь, по крайней мере, является надежным шаблоном: каждый раз, когда видео не загружается, запускается loadstart, но changetime нет. Я просто не могу понять, в чем проблема, которая мешает ему продолжать!

Я с нетерпением жду ответов здесь, будь то ответы или даже просто другие люди, подтверждающие опыт, поэтому я не чувствую себя таким сумасшедшим! Здесь я расскажу о двух наиболее важных функциях javascript, но я не уверен, насколько они хороши.

<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, если это видео не существует! (У меня была опечатка в имени одного из моих видеороликов, и поскольку порядок видеороликов рандомизирован, я никогда не мог сказать, что он всегда терпел неудачу, когда он пытался загрузить один и тот же файл.)

Исправлено.