在触摸某些Android平板电脑之前,YouTube IFrame API播放方法不起作用

我们正在开发YouTube播放器并使用IFrame API。 除了我们的Android 4.2.2testing设备之外,一切工作都非常好。

只有在这些设备上(而不是在任何其他版本的Android上),必须通过触摸video视图来“手动”启动video。 在所有其他设备上,我们可以使用YouTube方法以编程方式启动video播放。

一旦video以这种方式启动,YouTube API就可以按预期工作(即播放,暂停,停止方法都按预期方式编程)。

这是我们的代码的本质:

var player; function onYouTubeIframeAPIReady() { player = new YT.Player('player', { height: '390', width: '640', videoId: 'C0DPdy98e4c', playerVars: { controls: 0, showinfo: 0, modestbranding: 1 } }); } function playVideo() { player.playVideo(); } 

如果我们尝试在用户手动启动video(在Android 4.2.2设备上)之前以编程方式播放video,则video开始缓冲,然后失败。 失败时,video视图变黑,并显示一个不同的模式,在这里的video视图的左上angular看到:

Android 4.2.2上的YouTube API失败

有没有人遇到过这个问题? 有没有人有什么build议呢?

Solutions Collecting From Web of "在触摸某些Android平板电脑之前,YouTube IFrame API播放方法不起作用"

这是一个已知的问题,您有两个可能的解决scheme:

1)如果您可以定位APi> = 17 ,则可以依赖新的WebView和新的WebSettings API方法setMediaPlaybackRequiresUserGesture()

 WebSettings settings = webview.getSettings(); settings.setMediaPlaybackRequiresUserGesture(false); 

2)如果您的目标api <17,则需要在正确的时间模拟用户在WebView上的点击(比如在页面加载之后,发送播放命令之前):

 private void emulateClick(final WebView webview) { long delta = 100; long downTime = SystemClock.uptimeMillis(); float x = webview.getLeft() + webview.getWidth()/2; //in the middle of the webview float y = webview.getTop() + webview.getHeight()/2; final MotionEvent motionEvent = MotionEvent.obtain( downTime, downTime + delta, MotionEvent.ACTION_DOWN, x, y, 0 ); final MotionEvent motionEvent2 = MotionEvent.obtain( downTime + delta + 1, downTime + delta * 2, MotionEvent.ACTION_UP, x, y, 0 ); Runnable tapdown = new Runnable() { @Override public void run() { if (webview != null) { webview.dispatchTouchEvent(motionEvent); } } }; Runnable tapup = new Runnable() { @Override public void run() { if (webview != null) { webview.dispatchTouchEvent(motionEvent2); } } }; int toWait = 0; int delay = 100; webview.postDelayed(tapdown, delay); delay += 100; webview.postDelayed(tapup, delay); } 

这个问题是由于浏览器的限制,如文档: https : //developers.google.com/youtube/iframe_api_reference#Mobile_considerations

我想你可以通过模拟用户点击绕过这个限制…

我不认为这是可能的。 iOS Safari(iPhone,iPad)也一样。 用户交互需要启动video播放。