javascript - YouTube iFrame API 视频在移动设备上间歇性播放

标签 javascript iframe mobile youtube youtube-api

我在这上面花了太多时间,但收效甚微。我们有一个客户,其网站在页面加载时会弹出 YouTube 视频。它会在桌面上自动播放,并在移动设备上显示 Youtube 播放按钮,因为移动设备不支持自动播放。我正在使用 iFrame JS API 实例化视频播放器(下面的代码示例)。此设置在桌面上完美工作,但在移动设备(Android 或 iOS)上,在我和我的同事之间,单击 Youtube 播放按钮仅在大约 80% 的时间内播放视频。其余时间,视频加载旋转器只是旋转,什么也没有发生。如果我使用站点控件关闭重新加载播放器,它将播放,但最初不会播放。

我知道这对于大多数浏览该网站的用户来说不会是一个问题,但我知道如果在 iPhone 上的 100 次重新加载中,即使有 10 次导致这种行为,我们的客户也会发疯。

我按如下方式实例化播放器:

1) 我首先在网站上添加了 Youtube iframe api JS 的“硬拷贝”。

2) 我有一个对象控制包含播放器目标的 youtube“模态”窗口的显示 - 当调用该函数时,它会执行以下操作:

// Write a div element to the container
_instance.videoContainer.innerHTML = '<div id="youtube-player"></div>';
// Grab a reference to it
_instance.el = document.getElementById('youtube-player');
// Call the YT player API
_instance.player = new YT.Player('youtube-player', {
     playerVars: { // trying a bunch of different params with no success
          playsinline : 1 , 
          origin : window.location.origin , 
          autoplay : 1 , 
          wmode: "opaque" , 
          iv_load_policy : 3 
     },
     videoId: videoId , // This is passed to the function
     events : {
          onReady : function(){
               console.log('resolved player');
               // another function that just changes the container visibility
               _instance.play();
          },
          onStateChange : function( event ){
             if( event.data == YT.PlayerState.ENDED ){
                _instance.close();
             }
          }
      }
});
  • 此时,视频要么 100% 在桌面上自动播放,要么在移动设备上显示带有视频缩略图和红色大播放按钮的 Youtube 播放器。这就是麻烦开始的地方——大多数时候它播放得很好,其余时间它只是旋转啊旋转,根本不播放。有趣的是,在 Android 上,如果我模糊窗口并重新打开它,我可以再次单击播放按钮,它就会播放。

  • 此时应该不重要,但当模态关闭时我会销毁 div 和玩家引用。

  • 我已经尝试了几乎所有我能想到的......

    • YouTube 视频不知何故受到限制,仅通过 iframe 到原点显示了这么多次?我将“origin”属性添加到参数中,认为可能是这种情况,但似乎没有太大区别。我加载视频的成功率似乎比我的同事更高。
    • 是否有某种原因需要像示例中那样异步加载 YouTube iframe 脚本,而不是从我的网站加载副本?

    这就是我目前能想到的一切......我是否遗漏了什么?谢谢。

    最佳答案

    有一个相关的thread其中指出大多数移动设备不允许使用自动播放功能。

    从此documentation :

    Due to this restriction, functions and parameters such as autoplay, playVideo(), loadVideoById() won't work in all mobile environments.

    一个simple workaround是拥有“播放”按钮的自定义外观:

    Have an overlay element with pointer-events: none;. pointer-events works on all modern mobile browsers or simply have the video container over the button with opacity: 0.

    希望这有帮助!

    关于javascript - YouTube iFrame API 视频在移动设备上间歇性播放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45364237/

    相关文章:

    javascript - JS & CSS 使用 Xpedite 缩小和合并

    javascript - css boxShadow javascript change setinterval

    javascript - 使用 window.print() 时 Iframe 内容被剪切

    javascript - 使用 postmessage 与 iframe 通信 - 错误在哪里?

    javascript - Ajax 后调用无法在移动设备上运行

    php - 在手机短信中添加换行符

    javascript - 需要使用 javascript 将所选文本设为粗体/斜体/下划线,或者需要非常基本的文本编辑器建议

    javascript - Rails,js响应,只有一个通知

    html - iframe 的 frameborder 属性 - html5

    Flutter 中的 Azure API(面部识别)