vimeo api - 播放事件并不总是有效,任何可行的解决方法?

时间:2016-02-19 14:51:02

标签: javascript vimeo vimeo-api

我在Vimeo javascript API中发现了一个错误,并在jsfiddle上添加了一个示例(请参阅本文末尾的链接和代码(stackoverflow坚持将代码与jsfiddle一起粘贴)

我告诉Vimeo,但他们从未告诉我他们是否可以复制这个错误,或者是否有任何可以使用的解决方法。

所以我发布了下面问题的描述(你可以看到代码并在jsfiddle运行它),如果你有任何想法(它真的是一个vimeo bug而不是我的bug,是否有一些序列我可以做的电话来解决这个问题)然后请告诉我。

以下是描述:

Bug可以描述为:“播放事件只会触发它应该发射的一小部分时间”

重现的步骤:

  1. 运行jsfiddle。视频将播放几毫秒并停止播放。将弹出一个警告,其中包含“play-event”字样,表示该游戏事件正如预期的那样被解雇。

  2. 暂停视频

  3. 播放视频。

  4. 每次播放视频时,您都会看到一个警告:“播放事件”。

  5. 再次暂停视频。

  6. 单击“下一步”按钮。此按钮将寻找视频中间的位置(实际上它使用的是一个有4个位置的阵列,所以第一次寻找时,你会到第一个位置,下次你寻找时,你会进入第二个位置,等等)

  7. 视频将跳转到中间的某个部分。视频将开始播放。 BUG出现在这里。将出现指示“播放事件”的警报。但事实并非如此!

  8. 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;" />
                    &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>
    

1 个答案:

答案 0 :(得分:0)

Vimeo确实回答了 - 假设您的视频已暂停,一个解决方法是首先拨打电话&#39;播放&#39;然后在电话中寻找&#39;然后播放事件就会开始。