我在Vimeo javascript API中发现了一个错误,并在jsfiddle上添加了一个示例(请参阅本文末尾的链接和代码(stackoverflow坚持将代码与jsfiddle一起粘贴)
我告诉Vimeo,但他们从未告诉我他们是否可以复制这个错误,或者是否有任何可以使用的解决方法。
所以我发布了下面问题的描述(你可以看到代码并在jsfiddle运行它),如果你有任何想法(它真的是一个vimeo bug而不是我的bug,是否有一些序列我可以做的电话来解决这个问题)然后请告诉我。
以下是描述:
Bug可以描述为:“播放事件只会触发它应该发射的一小部分时间”
重现的步骤:
运行jsfiddle。视频将播放几毫秒并停止播放。将弹出一个警告,其中包含“play-event”字样,表示该游戏事件正如预期的那样被解雇。
暂停视频
播放视频。
每次播放视频时,您都会看到一个警告:“播放事件”。
再次暂停视频。
单击“下一步”按钮。此按钮将寻找视频中间的位置(实际上它使用的是一个有4个位置的阵列,所以第一次寻找时,你会到第一个位置,下次你寻找时,你会进入第二个位置,等等)
视频将跳转到中间的某个部分。视频将开始播放。 BUG出现在这里。将出现指示“播放事件”的警报。但事实并非如此!
CLUE:如果您没有完全点击“下一步”按钮,直到视频播放到最后,那么您单击“下一步”按钮,您可能会很幸运,“播放事件”会发生火!!!!!我的猜测是,当视频主要缓存在用户计算机上时,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>
答案 0 :(得分:0)
Vimeo确实回答了 - 假设您的视频已暂停,一个解决方法是首先拨打电话&#39;播放&#39;然后在电话中寻找&#39;然后播放事件就会开始。