通过Android WebView在YouTube HTML5视频中寻求前进

通过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()方法来实现我的目标。到目前为止,一切都很好,

编辑无论如何,YouTube发布了原生Android API()

我有一个应用程序,在WebView上显示HTML5视频视图。这段视频是从YouTube服务中强制使用HTML5的( )

正如您在URL中看到的,参数“start”显示视频必须开始播放的秒数。我一直在使用
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视频,有两个注意事项:

  • 取决于Android版本,这是不可能的。Android 4.x版通过
    WebView
    无法做到这一点(或者我没有找到方法:)正如我发布的那样
  • 如果您使用的是Android 5或更高版本,则必须将
    WebChromeClient
    设置为
    WebView
    组件:
    setWebChromeClient(新WebChromeClient())
  • 希望有帮助

    供未来观众观看 YouTube现在有一个播放器API:

    在这里,您可以轻松地将视图放置在xml中并在活动中处理它,下面是一些示例:

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