【问题标题】:YouTube embed on iPad: Buffers forever when starting via Javascript APIYouTube 嵌入 iPad:通过 Javascript API 启动时永远缓冲
【发布时间】:2012-10-28 12:05:10
【问题描述】:

我在嵌入 YouTube 时遇到了一些问题。

我正在使用 YouTube API 加载视频。在加载的视频之上,我有一个自定义控件<div>(透明),只有一个播放按钮(<img>)。这样做是为了将默认的 YouTube 播放器隐藏在一个播放按钮后面,该按钮与网站上的其余设计一起使用。

<div> 覆盖整个加载的 iFrame,因此播放器本身不可点击 - 我使用 <div> 上的点击事件来启动视频:

// Inside onYouTubePlayerAPIReady():
var player = new YT.Player(playerId, {
  height: height,
  width: '100%',
  videoId: videoId,
  playerVars: {
    html5: '1',
    controls: '0',
    rel: '0',
    showinfo: '0',
    modestbranding: '1',
    theme: 'light',
    color: 'white',
    wmode: 'transparent',
    suggestedQuality: "large"
  }
});

$(".youtube-player-controls").bind("click", function(e){
  if (!player || !player.getPlayerState) return false;
  if (player.getPlayerState() == YT.PlayerState.PLAYING) player.pauseVideo();
  else player.playVideo();
  return false;
});

在 iPhone 上运行良好,但在 iPad(似乎也是 Android)上,视频切换到视频的第一帧,但随后停止在缓冲状态(通过 player.getPlayerState() 检查)。

我尝试使用 player.loadVideoById() 开始视频,但也不起作用(同样的错误)。

如果我删除覆盖控件<div> 从而允许用户实际点击视频,它就可以正常工作。

关于如何使用 Javascript API 播放视频有什么建议吗?

编辑:

我稍微更改了嵌入代码,即我添加了html5=1,如Force HTML5 youtube video 中所述。这将嵌入 iFrame 的内容更改为使用 HTML5 播放器,但并没有解决问题。

我试过了,看看它是否可以像http://developer.apple.com/library/safari/#documentation/AudioVideo/Conceptual/Using_HTML5_Audio_Video/Device-SpecificConsiderations/Device-SpecificConsiderations.html中描述的那样工作。

【问题讨论】:

  • 我似乎也遇到了这个问题。视频在 iPad 甚至 iPhone 4 上不断加载。
  • 对我来说,它实际上在 iPhone 4 上按预期工作。无法测试 iPhone 5。
  • 我遇到了同样的问题。就我而言,它似乎与控件上的覆盖无关,因为我的按钮位于视频后面。视频加载,开始缓冲并停留在黑屏上。

标签: ipad youtube youtube-api


【解决方案1】:

目前我们只是在发送 player.playVideo(); 之前进行检查。功能。这并不理想,但在我们从 Google 获得更好的 API 级别修复之前,它可以正常工作。

在嵌入脚本的顶部你设置你的变量:

var isiPad = navigator.userAgent.match(/iPad/i) != null;

然后在你使用的点击函数中:

if (!isiPad) {
player.playVideo();
}

【讨论】:

  • 不播放视频不是什么好办法。
  • @mikemaccana 解决方案是将不同的事件路由到 ipad。因此,在我们的例子中,我们允许点击事件移除海报框架并通过 JS 为支持的浏览器启动视频。对于 iPad 之类的东西,我们只需在点击时移除海报框架,用户将再次点击以启动视频。它当然不是完美的,但它确实有效。
  • @jabberlope 我不是检测设备的忠实粉丝。另外,我在几种不同的移动设备(iPad 第 3 代、iPod 第 5 代、Moto X)上看到了这一点。有没有办法检测 playVideo() 函数或不能正常工作的部分是否受支持? if (!canPlayViaJS) { player.playVideo(); }
【解决方案2】:

Apple 不允许在 iOS 上通过脚本加载标签(以防止在移动网络上使用不必要的带宽)。多个版本的 Android 显示相同的行为。

您必须先让用户通过点击视频本身来启动视频 - 之后您将能够像在桌面设备上一样通过 API 控制视频。

【讨论】:

  • 这仅适用于 developer.apple.com/library/safari/#documentation/AudioVideo/… 中描述的预加载/自动播放,并且可以使用 Javascript onclick 事件来规避。但是,这是针对 HTML5 音频/视频嵌入进行描述的,因此它可能并不完全适用于 YouTube 嵌入(不要忘记,单击自定义播放按钮时确实会发生某些事情)。
  • 虽然对于同一 DOM 中的 HTML5
猜你喜欢
  • 2013-07-23
  • 2013-02-03
  • 2023-03-09
  • 2020-12-07
  • 2021-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-20
相关资源
最近更新 更多