在Android WebView中通过YouTube HTML5视频寻求快进功能

30

编辑 不用担心,YouTube发布了原生Android API (https://developers.google.com/youtube/android/player/)。

我有一个应用程序,在 WebView 上显示 HTML5 的 videoview。这个视频是从 YouTube 服务中强制使用 HTML5 播放的(http://www.youtube.com/embed/3FFyT039tJ0?autoplay=1&rel=0&showinfo=0&html5=1&start=90&end=176 )。

正如您在 URL 中所看到的,参数 "start" 显示了视频必须开始播放的秒数。我一直在使用 WebChromeClientonShowCustomView 方法获取 WebView 创建的 VideoView 对象,如此处所见(链接)

当我有了对 VideoView 的引用,我就可以使用 seekTo() 方法来达成我的目标。到这里为止,一切都很好,但只对低于 Android 4.x 的版本有效。

正如许多人所知,从 4.x 版本开始,WebViewChromeClientonShowCustomView 方法只在用户点击 "全屏" 模式时才调用,而不是在视频开始播放时(如之前的版本)。

因此,问题在于我不能向前跳转90秒,因为我无法获得对 VideoView 的引用,并且我找不到任何解决方法。


newProgress == 100 时,您可以从 WebChromeClient#onProgressChanged(WebView view, int newProgress)view 参数中获取 Video 对象的引用。我还没有尝试过这个方法,所以我将它发布为一条评论。 - Gunnar Karlsson
请查看MediaelementJS(http://mediaelementjs.com)。我在我的quirli媒体播放器(http://quir.li)中使用此库来支持各种媒体格式,包括Youtube视频。请参阅Youtube示例。 - Marcel
3个回答

1

0

如果有人想要使用 WebView 播放 YouTube 视频,有两个要考虑的问题:

  1. 根据 Android 版本的不同,可能无法实现。Android 4.x 及以下版本通过 WebView 无法实现(或者我没找到方法 :) 如我在这里发布的 here
  2. 如果你使用的是 Android 5 或更高版本,你需要将 WebChromeClient 设置给 WebView 组件:setWebChromeClient(new WebChromeClient());

希望对你有所帮助!


0

试试这个:

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

    }
};

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接