通过Android WebView在YouTube HTML5video中寻求前进

编辑没关系,YouTube发布了原生Android API( https://developers.google.com/youtube/android/player/ )

我有一个应用程序显示在WebView上的HTML5video。 该video被强制为来自YouTube服务的HTML5( http://www.youtube.com/embed/3FFyT039tJ0?autoplay=1&rel=0&showinfo=0&html5=1&start=90&end=176 )

正如您在URL中看到的那样,参数“start”显示video必须开始播放的秒数。 我已经使用onShowCustomViewWebChromeClient方法来获取由WebView创build的VideoView对象,如下所示。

当我有对VideoView的引用时,我可以使用seekTo()方法来实现我的目标。 直到这里一切都很好,但只适用于低于4.x的Android版本。

许多人都知道, WebViewChromeClient的方法onShowCustomView (从4.x开始)只在用户点击“FullScreen”模式时才被调用,而不是在video开始播放时(在4.x之前如何)。

所以,重点是我无法向前查找90秒,因为我无法获得对VideoView的引用,而且找不到任何解决方法。

Solutions Collecting From Web of "通过Android WebView在YouTube HTML5video中寻求前进"

为未来的观众

YouTube现在有一个播放器API: https //developers.google.com/youtube/android/player/

在那里你可以很容易地在xml中放置一个视图,并在活动中处理它,这里是一些例子: https //github.com/youtube/yt-android-player

如果有人想使用WebView来播放YouTubevideo,需要考虑以下两点:

  1. 根据Android版本,这是不可能的。 Android版本4.x通过WebView无法做到这一点(或者我没有find方法:)正如我张贴在这里
  2. 如果您使用的是Android 5或更高版本,则必须将WebChromeClient设置为WebView组件: setWebChromeClient(new WebChromeClient());

希望能帮助到你!

试试这个:

  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(); } } 

然后写一个webchrome客户端,如下所示:

 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(); } } } };