【问题标题】:Safari 11 / YouTube API bug. Rapid play/pause and failure to autoplaySafari 11 / YouTube API 错误。快速播放/暂停和无法自动播放
【发布时间】:2018-03-10 13:29:00
【问题描述】:

这刚刚开始被用户报告给我。我花了很多时间探索自己的错误代码,但它似乎与 Safari 11 (最新) 相关。

当使用 YouTube IFrame Embed API 的一个简单示例时,Safari 将在播放和暂停状态之间快速切换,直到最终暂停。

这不是示例的最优化版本,因为这里有一些关于什么可以使它工作的探索。我想跳过并自动播放,但它不会按预期的方式工作。我尝试使用 startplayVideo 记录的 YT API 示例。

我最近才确认这是一个错误,它解释了为什么示例中有一些详细参数。

注意事项:

  • 有时视频会根据您刷新的次数播放,但这种情况很少见。
  • 自动播放标志通常会失败。
  • 在此示例中使用 start 标志向前跳,因为 startSeconds 不起作用。
  • 代码示例适用于其他浏览器:ChromeOperaFirefox

这是您可能在 Safari 控制台中看到的图像,显​​示了 Player State 恐慌,最终降落在 2(暂停)。

这是一个复制/粘贴代码示例,它将复制该错误。将它放到任何 HTML 文件中,您应该会在 Safari 11 中看到它失败。

<style>
    body, html, iframe {
        position: absolute; left: 0; right: 0; top: 0; bottom: 0; width: 100%; height: 100%;
        margin: 0;
        padding: 0;
        pointer-events: none;
    }
</style>


<script>
    var videoId = "9nwQ1F7oX-8";

    var playerVars = {
        autohide: 1,
        autopause: 0,
        autoplay: 1,
        cc_load_policy: "0",
        disablekb: 1,
        enablejsapi: 1,
        iv_load_policy: 1,
        modestbranding: 1,
        origin: "*",
        rel: 0,
        showinfo: 0,
        start: 122,
        version: 3
    };
</script>


<iframe id="ytplayer"
    frameborder="0"
    allowfullscreen="1"
    title="YouTube video player"
    width="100%"
    height="100%"
    x-src="https://www.youtube.com/embed/9nwQ1F7oX-8?enablejsapi=1&amp;origin=*&amp;rel=0&amp;version=3&amp;iv_load_policy=3&amp;modestbranding=1&amp;showinfo=0&amp;autohide=1&amp;disablekb=1&amp;autoplay=1&amp;autopause=0&amp;cc_load_policy=0&amp;startSeconds=30&amp;widgetid=1"
    src="https://www.youtube.com/embed/9nwQ1F7oX-8?enablejsapi=1&amp;origin=*&amp;start=122">
</iframe>


<script>
window.onYouTubeIframeAPIReady = function() {
    console.log("YouTube is ready!", videoId, playerVars);

    var api = new YT.Player("ytplayer", {
        width: "100%",
        height: "100%",
        videoId: videoId,
        playerVars: playerVars,
        events: {

            onError: function(e) {
                // 100 – The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.
                // 101 – The owner of the requested video does not allow it to be played in embedded players.
                // 150 – This error is the same as 101. It"s just a 101 error in disguise!

                console.warn("An error has occurred", arguments);
            },

            onReady: function() {
                // log
                console.log("YouTube player is ready to use");

                //
                api.playVideo();
            },

            onStateChange: function(e) {
                // log
                console.log("YouTube state change ", e);

                // Finished
                if (e.data == 0) {
                    console.log("Finished");
                }

                // Playing
                else if (e.data === YT.PlayerState.PLAYING) {
                    console.log("Playing");
                }

                // Pausing
                else if (e.data === 2) {
                    console.log("Pausing");
                }

                // Buffering
                else if (e.data === 3) {
                    console.log("Buffering");
                }
            }
        }
    });

}
</script>

<script src="https://www.youtube.com/iframe_api"></script>

【问题讨论】:

  • 我遇到过类似的情况,Safari 中的播放器查看了 Youtube 播放按钮。我隐藏了不显示的 iframe,但将不透明度更改为 0,当它准备好时更改为 1。然后可以通过自动播放或单击按钮播放视频

标签: javascript html youtube safari


【解决方案1】:

我在使用视频播放器时遇到了很多问题,尤其是在不同的浏览器和不同的设备上自动播放。

似乎自动播放功能和 API 播放/暂停相互混淆,导致播放器状态恐慌。

对我来说效果最好的最终解决方案:

使用 playerVars 中的 'autoplay: 0' 将自动播放设置为 off 。 'api.playVideo();'您在“onReady: function()”中使用的应该从那里获取它并将播放器带入“播放”状态。

【讨论】:

  • 我试过了,但没有用。如果您有想法,请提交示例。我提供的代码应该是可复制/可粘贴且易于修改的。
  • 不,对我也不起作用。苦苦挣扎,欢迎提出建议。
猜你喜欢
  • 2012-10-06
  • 2015-03-20
  • 2018-04-28
  • 2018-06-01
  • 2018-12-17
  • 1970-01-01
  • 1970-01-01
  • 2018-07-14
  • 2011-04-29
相关资源
最近更新 更多