Oli*_*ran 9 javascript android youtube-api android-4.2-jelly-bean youtube-iframe-api
我们正在开发YouTube播放器,并且正在使用IFrame API.除了我们的Android 4.2.2测试设备外,一切都非常好用.
仅在这些设备上(而不是在任何其他版本的Android上),必须通过触摸视频视图来"手动"启动视频.在所有其他设备上,我们可以使用YouTube方法以编程方式启动视频播放.
以这种方式启动视频后,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();
}
Run Code Online (Sandbox Code Playgroud)
如果我们尝试在用户"手动"启动视频之前以编程方式播放视频(在Android 4.2.2设备上),则视频开始缓冲然后失败.如果失败,视频视图将变为黑色并显示不同的图案,如图所示视频视图的左上角:

有没有其他人遇到过这个问题?有没有人对如何处理有任何建议?
这是一个已知的问题,您有两种可能的解决方案:
1)如果你可以定位APi> = 17,你可以依赖新的WebView和新的WebSettings api方法setMediaPlaybackRequiresUserGesture()
WebSettings settings = webview.getSettings();
settings.setMediaPlaybackRequiresUserGesture(false);
Run Code Online (Sandbox Code Playgroud)
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);
}
Run Code Online (Sandbox Code Playgroud)
小智 2
此问题是由于浏览器限制造成的,如文档中所述: https: //developers.google.com/youtube/iframe_api_reference#Mobile_considerations
我想你可以通过模拟用户点击来规避这个限制......
| 归档时间: |
|
| 查看次数: |
9194 次 |
| 最近记录: |