YouTube iFrame API在iOS 8.*上的缓冲期间挂起,特别是在无铬主屏幕web应用程序中



在stackoverflow和id上的其他帖子中没有足够清楚地描述这个问题,无法启动一个新的线程,该线程专门解决在从safari添加到ios 8.*主屏幕的web应用程序中使用YouTube iFrame API时的问题。

在我的web应用程序中,在运行iOS 8.*(8以上的任何版本)的iPhone上的移动Safari web浏览器中查看时,播放效果正常。

我试图解决的具体问题仅发生在将网络应用程序添加到主屏幕并从那里启动后,尝试播放YouTube iframe嵌入时

我将排除发布我所有的代码,比如html标记或一整套JS,因为它看起来是多余的;我想开门见山,但如果有人觉得有必要,请回复,我会更新这篇帖子

在页首我包括必要的元标签如下:

<meta name="apple-mobile-web-app-capable" content="yes"/>

这使得能够从移动Safari"添加到主屏幕",并将web应用程序加载到无铬网络视图中。

我也加载YouTube API在页面头如下:

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

一旦网络应用程序从Safari添加到主屏幕,启动它会将网络应用程序加载到预期的无铬网络视图中,并根据我的代码中的JS通过YouTube iframe API嵌入YouTube视频,如下所示:

var myPlayer = new YT.Player(MY_DIV_TARGET_ID, {
          videoId: MY_YT_VIDEO_ID,
          playerVars: {
      'autohide': 1,
          'autoplay': 0,
          'controls': 0,
          'ps': 'docs',
          'showinfo': 0,
          'color': 'white',
          'modestbranding': 1,
          'iv_load_policy': 3,
          'playsinline': 1,
          'rel': 0,
          'theme': 'dark'
          'enablejsapi': 1
            },
      events: {
        'onReady': onYouTubePlayerReady,
      }
    });

在我的"onYouTubePlayerReady"功能中,我将所有事件侦听器设置为按照YouTube的说明跟踪状态和错误:YouTube iFrame API参考

在这一点上,一旦用户按照苹果公司的要求,在嵌入式播放器中物理点击YouTube提供的播放按钮,即用户必须通过点击/点击播放按钮来物理触发播放,视频就会开始缓冲,事件监听器"onStateChange"就会触发,结果为3和/或YT.PlayerState.buffering。所有这些都是预期行为。

UI也按预期使用微调器进行更新,但播放器此时挂起,永远不会播放视频没有错误我可以在safari开发者控制台的任何地方看到,我可以用来调试这个问题。我也不能和/或不知道如何跟踪缓冲区的百分比。

几个星期以来,我一直在网上不知疲倦地寻找解决方案,但都无济于事。

非常感谢任何帮助

Vimeo、DailyMotion和本地提供的HTML5视频也会出现这种情况,为此遵循了以下指南:https://developer.apple.com/library/mac/documentation/AppleApplications/Reference/SafariWebContent/CreatingVideoforSafarioniPhone/CreatingVideoforSafarioniPhone.html

iOS8更新引入了这个问题,但苹果仍未解决,苹果现在应该已经很清楚这个问题(请参阅SO上的各种错误报告)。

我正在测试8.2b5,但这个问题仍然没有解决。

我的感觉是,他们有点想强迫你进入苹果生态系统和原生应用程序来流媒体播放视频。

PS:audio 也会出现同样的问题

相关内容

最新更新