2016-02-19 6 views
0

Я нашел ошибку в Vimeo JavaScript API и положить пример его на jsfiddle (см самого конца этого поста для ссылки и код (StackOverflow настаивает на вставки коды вместе с jsfiddle)vimeo api - play-event не всегда работает, возможны ли обходные пути?

Я сказал Vimeo об этом, но они никогда не говорили мне, могут ли они дублировать ошибку, или если бы было какое-то временное решение, которое я мог бы использовать.

Поэтому я публикую описание проблемы ниже (вы можете увидеть код и запустить его на jsfiddle), и если у вас есть какие-то идеи (это действительно ошибка vimeo, в отличие от моей ошибки, есть ли какая-то последовательность вызовов, которые я могу сделать, чтобы победить эту проблему), то, пожалуйста, дайте мне знать.

это описание:

Буг может быть описана как: «играть-событие только выстреливает часть времени, это, как предполагается уволить»

Шаги для воспроизведения:

  1. выполнения jsfiddle. Видео будет воспроизводиться в течение нескольких миллисекунд и остановить. Появится предупреждение со словами «play-event», чтобы указать, что игра-событие, как и ожидалось, срабатывает.

  2. пауза видео

  3. воспроизведения видео.

  4. При каждом воспроизведении видео вы увидите предупреждение: «play event off».

  5. приостановить видео снова.

  6. Нажмите кнопку NEXT. Эта кнопка будет искать позицию в середине видео (на самом деле она использует массив с 4 позициями, поэтому при первом поиске вы переходите в первую позицию, в следующий раз, когда вы стремитесь, вы переходите ко второму положению , и т. д.)

  7. Видео перейдет в раздел посередине. Видео начнет воспроизведение. ОШИБКА ЗНАЕТ ЗДЕСЬ. Должно появиться предупреждение о том, что указано «play-event». Но это не так!

  8. CLUE: Если вы не нажмете кнопку NEXT вообще до тех пор, пока видео не будет воспроизведено почти до конца, и ТОГДА вы нажмете кнопку NEXT, вам может повезти, и «play-event» DOES FIRE !!!!! Я думаю, что, когда видео в основном кэшируются на компьютере пользователя, то API работает лучше

    https://jsfiddle.net/3f9z7ffo/

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script> 
    <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js"></script> 
    
    <script type="text/javascript" src="https://f.vimeocdn.com/js/froogaloop2.min.js"></script> 
    
    
    <link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/smoothness/jquery-ui.css" /> 
    
    <script type="text/javascript"> 
        var globalcount = 0; 
        var windowwidth = 0; 
    
        var initialseek = true; 
        var is_chrome = navigator.userAgent.toLowerCase().indexOf('chrome') > -1; 
        var timeoutID; 
        var stoparray = new Array("48", "103.979", "346.513", "407.459"); 
        var quiz = false; 
    
        var startPosition = 0; 
        var stoplength = stoparray.length; 
        var stopindex = -1; 
        var timeinterval = 10; 
        var defaultwidth = 3; 
        var gDuration; 
        var gPlayer; 
        var gvideowidth; 
        var gvideoheight; 
        var hiderank; 
        var gPlayer; 
        var vimeoPlayers; 
    
    </script> 
    

    <center> 
    
        <table> 
         <tr> 
          <td style="width:33%;text-align:right;padding-right:14px"></td> 
          <td style="width:33%"> 
           <div id="HoldPlayer" style="position:relative"> 
            <iframe src='https://player.vimeo.com/video/152639172?autoplay=0&api=1&player_id=player1' 
              id='player1' 
              width='640' height='360' 
              frameborder='0'></iframe> 
           </div> 
          </td> 
          <td style="width:33%"></td> 
         </tr> 
        </table> 
    
        <table style="width:100%"> 
         <tr> 
          <td style="text-align:center"> 
           Window (total time in seconds): <input type="text" id="windowwidth" maxlength="3" style="width: 30px;" /> 
           &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
           <label><input type="checkbox" checked="checked" id="chkplayvid" />Play</label> 
          </td> 
         </tr> 
    
    
        </table> 
    
    </center> 
    
    
    <center> 
        <table> 
         <tr> 
          <td style="text-align:center"> 
           <input type="button" id="nextbutton" onclick="nextPlayer(); return (false);" value="Next" /> 
          </td> 
         </tr> 
         <tr> 
          <td align="center"></td> 
         </tr> 
    
    
        </table> 
    
    </center> 
    
    <div id="oPara"></div> 
    
    
    <script type="text/javascript"> 
    
    
        // +++++++++++++ 
        function ready2() { 
    
         setupEventListeners(); 
         gPlayer.api('getDuration', function (value, player_id) { 
          gDuration = value; // this will be set whenever callback fires 
          playVideo(); 
         }); 
    
        } 
        // +++++++++++++ 
        function setupEventListeners() { 
         gPlayer.addEvent('pause', pauseEvent); 
         gPlayer.addEvent('finish', endEvent); 
         gPlayer.addEvent('play', playEvent); 
        } 
    
    
        function endEvent() { 
         alert("end event!!!"); 
         gidClearTimeout(timeoutID); 
        } 
        function pauseEvent() { 
         alert("pauseEvent!!!"); 
         return; 
        } 
        function playEvent() { 
         alert("playEvent!!!"); 
         globalcount = globalcount + 1; 
    
         if (initialseek) { 
          timeoutID = setTimeout(pausePlayer, 60); 
          initialseek = false; 
         } 
         else { 
          timeoutID = setTimeout(pausePlayer, windowwidth); 
         } 
         return; 
        } 
    
    
        $(document).ready(function() { 
    
    
         $("#windowwidth").val(defaultwidth); 
         setTimeout(addReadyEvent, 60); 
        }); 
        // +++++++++++++ 
        function addReadyEvent() { 
    
         var iframe = $('#player1')[0]; 
         gPlayer = $f(iframe); 
         gPlayer.addEvent('ready', ready2); 
        } 
    
        // +++++++++++++ 
        function showNextButton() { 
         $("#nextbutton").removeAttr('disabled'); 
        } 
        // +++++++++++++ 
        function playVideo() { 
    
         gPlayer.api('play'); 
         return; 
        } 
        // +++++++++++++ 
        function pausePlayer() { 
    
         gPlayer.api('pause'); 
         $("#nextbutton").removeAttr('disabled'); 
         return true; 
        } 
    
        // +++++++++++++ 
        function nextPlayer() { 
         var startPosition = 0; 
         var str = ""; 
         var prevpos = -5; 
         var stopPosition = 0; 
    
         var dur = gDuration; 
         windowwidth = 3; 
         windowwidth = parseFloat(windowwidth); 
         if (isNaN(windowwidth)) { 
          windowwidth = defaultwidth; 
         } 
         if (windowwidth < 1) { 
          windowwidth = 1; 
         } 
         if (windowwidth > 3600) { 
          windowwidth = 3600; 
         } 
         windowwidth = Math.round(windowwidth); 
         stopindex = stopindex + 1; 
    
    
         stopPosition = parseFloat(stoparray[stopindex]); 
    
         if (stopPosition > dur) { 
          stopPosition = dur; 
         } 
         /* was here */ 
    
         startPosition = parseInt(stopPosition - windowwidth, 10); 
    
    
         gPlayer.api('seekTo', startPosition); 
         gPlayer.api('pause'); 
         setTimeout(playVideo, 60); 
    
         return false; 
        } 
    
    </script> 
    

ответ

0

Vimeo ответили - один способ обхода, если ваше видео приостановлено, сначала вызвать «играть», а после этого вызова «искать», а затем проиграет.