Я нашел ошибку в Vimeo JavaScript API и положить пример его на jsfiddle (см самого конца этого поста для ссылки и код (StackOverflow настаивает на вставки коды вместе с jsfiddle)vimeo api - play-event не всегда работает, возможны ли обходные пути?
Я сказал Vimeo об этом, но они никогда не говорили мне, могут ли они дублировать ошибку, или если бы было какое-то временное решение, которое я мог бы использовать.
Поэтому я публикую описание проблемы ниже (вы можете увидеть код и запустить его на jsfiddle), и если у вас есть какие-то идеи (это действительно ошибка vimeo, в отличие от моей ошибки, есть ли какая-то последовательность вызовов, которые я могу сделать, чтобы победить эту проблему), то, пожалуйста, дайте мне знать.
это описание:
Буг может быть описана как: «играть-событие только выстреливает часть времени, это, как предполагается уволить»
Шаги для воспроизведения:
выполнения jsfiddle. Видео будет воспроизводиться в течение нескольких миллисекунд и остановить. Появится предупреждение со словами «play-event», чтобы указать, что игра-событие, как и ожидалось, срабатывает.
пауза видео
воспроизведения видео.
При каждом воспроизведении видео вы увидите предупреждение: «play event off».
приостановить видео снова.
Нажмите кнопку NEXT. Эта кнопка будет искать позицию в середине видео (на самом деле она использует массив с 4 позициями, поэтому при первом поиске вы переходите в первую позицию, в следующий раз, когда вы стремитесь, вы переходите ко второму положению , и т. д.)
Видео перейдет в раздел посередине. Видео начнет воспроизведение. ОШИБКА ЗНАЕТ ЗДЕСЬ. Должно появиться предупреждение о том, что указано «play-event». Но это не так!
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;" /> <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>