通过Android WebView在YouTube HTML5视频中寻求前进
编辑无论如何,YouTube发布了原生Android API() 我有一个应用程序,在WebView上显示HTML5视频视图。这段视频是从YouTube服务中强制使用HTML5的( ) 正如您在URL中看到的,参数“start”显示视频必须开始播放的秒数。我一直在使用通过Android WebView在YouTube HTML5视频中寻求前进,android,html,video,youtube,Android,Html,Video,Youtube,编辑无论如何,YouTube发布了原生Android API() 我有一个应用程序,在WebView上显示HTML5视频视图。这段视频是从YouTube服务中强制使用HTML5的( ) 正如您在URL中看到的,参数“start”显示视频必须开始播放的秒数。我一直在使用WebChromeClient的onShowCustomView方法来获取由WebView创建的VideoView对象,如图所示 当我参考了VideoView时,我可以使用seekTo()方法来实现我的目标。到目前为止,一切都很好,
WebChromeClient
的onShowCustomView
方法来获取由WebView创建的VideoView
对象,如图所示
当我参考了VideoView
时,我可以使用seekTo()
方法来实现我的目标。到目前为止,一切都很好,但只适用于低于4.x的Android版本
正如许多人所知,4.x及以后版本的WebViewChromeClient
的showcustomview方法仅在用户单击“全屏”模式时调用,而在视频开始播放时(在4.x之前的情况下)不会调用
因此,关键是我无法向前搜索90秒,因为我无法获得对VideoView的引用,也找不到任何解决方法。试试这个:
wv.getSettings().setPluginsEnabled(true);
DisplayMetrics metrics = new DisplayMetrics();
getActivity().getWindowManager().getDefaultDisplay().getMetrics(metrics);
int w1 = (int) (metrics.widthPixels / metrics.density), h1 = w1 * 3 / 5;
String item="http://www.youtube.com/embed/3FFyT039tJ0";
wv.getSettings().setJavaScriptEnabled(true);
wv.setWebChromeClient(chromeClient);
wv.getSettings().setPluginsEnabled(true);
try {
wv.loadData(
"<html><body><iframe class=\"youtube-player\" type=\"text/html5\" width=\""
+ (w1 - 20)
+ "\" height=\""
+ h1
+ "\" src=\""
+ item
+ "\" frameborder=\"0\"\"allowfullscreen\"></iframe></body></html>",
"text/html5", "utf-8");
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
如果有人想使用
WebView
播放youtube视频,有两个注意事项:
WebView
无法做到这一点(或者我没有找到方法:)正如我发布的那样
WebChromeClient
设置为WebView
组件:setWebChromeClient(新WebChromeClient())代码>
当newProgress==100时,也许您可以从WebChromeClient#onProgressChanged(WebView视图,int newProgress)中的view参数中获取对视频对象的引用?我还没有尝试过,所以我将其作为注释发布。@Gunnarkarsson我会检查,谢谢!查看MediaelementJS()。我在Quiri media player()中使用这个库来处理各种媒体格式,包括Youtube视频。参见Youtube示例。
private WebChromeClient chromeClient = new WebChromeClient() {
@Override
public void onShowCustomView(View view, CustomViewCallback callback) {
super.onShowCustomView(view, callback);
if (view instanceof FrameLayout) {
FrameLayout frame = (FrameLayout) view;
if (frame.getFocusedChild() instanceof VideoView) {
VideoView video = (VideoView) frame.getFocusedChild();
frame.removeView(video);
video.start();
}
}
}
};