这个问题在 Stack Overflow 上的其他帖子中没有得到足够清晰的描述,我想启动一个新线程,专门解决在 iOS 8 上添加到主屏幕的 Web 应用程序中使用 YouTube iFrame API 时出现的问题。 * 来自 Safari。
在我的 Web 应用程序中,在运行 iOS 8.*(8 以上的任何版本)的 iPhone 上使用移动 Safari Web 浏览器查看时,播放效果正常。
我试图解决的具体问题仅发生在将网络应用程序添加到主屏幕并从主屏幕启动后尝试播放 YouTube iframe 嵌入时。
我将排除发布我的所有代码,例如 html 标记或完整的 JS 集,因为它看起来多余;我想开门见山,但如果有人觉得有必要,请回复,我会更新这篇文章。
在页面标题中,我包含必要的元标记,如下所示:
<meta name="apple-mobile-web-app-capable" content="yes"/>
这使得能够从移动 Safari“添加到主屏幕”并将 Web 应用程序加载到无边框 Web 视图中。
我还在页面头部加载 YouTube API,如下所示:
<script type="text/javascript" src="https://www.youtube.com/iframe_api"></script>
将 Web 应用程序从 Safari 添加到主屏幕后,启动它会按预期将 Web 应用程序加载到 chromeless Web 视图中,并根据我的代码中的 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 提供的播放按钮 按照 Apple 的要求,用户必须通过单击/点击播放按钮来实际触发播放,视频开始缓冲并且事件侦听器
onStateChange
触发,结果为 3 和/或 YT.PlayerState.BUFFERING。所有这些都是预期行为。
UI 也按预期使用旋转器进行更新,但播放器此时挂起并且从不播放视频。 没有错误火,我可以在 safari 开发者控制台中的任何地方看到我可以用来调试这个问题。我也无法和/或不知道如何跟踪缓冲区的百分比。
我在网上不知疲倦地寻找了数周的解决方案,但没有成功。
非常感谢任何帮助。
Vimeo、DailyMotion 和本地提供的 HTML5 视频也会发生这种情况,这些视频均遵循以下准则: https://developer.apple.com/library/mac/documentation/AppleApplications/Reference/SafariWebContent/CreatingVideoforSafarioniPhone/CreatingVideoforSafarioniPhone.html
这个问题是由 iOS8 更新引入的,Apple 仍然没有解决,现在应该很清楚这个问题(请参阅 SO 的各种错误报告)。
我正在使用8.2b5进行测试,这个问题仍然没有解决。
我的感觉是,他们有点想强迫你进入苹果生态系统和本机应用程序来流视频。
PS:
audio
也出现同样的问题