30

编辑没关系,YouTube 发布了 Native 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”显示视频必须开始播放的秒数。我一直在使用 的方法onShowCustomViewWebChromeClient获取VideoView由 WebView 创建的对象,如此处所示

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

很多人都知道,从 4.x 及更高版本开始,仅在用户单击“全屏”模式时才调用方法onShowCustomViewWebViewChromeClient而不是在视频开始播放时调用(过去是 4.x 之前的情况)。

所以,关键是我无法向前寻找 90 秒,因为我无法获得对 VideoView 的引用,也找不到任何解决方法。

4

3 回答 3

1

对于未来的观众

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

您可以轻松地在 xml 中放置视图并在活动中处理它,以下是示例: https ://github.com/youtube/yt-android-player

于 2017-05-02T23:49:36.053 回答
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();
            }
        }

    }
};
于 2013-03-25T10:13:00.100 回答
0

如果有人想使用WebView尚未播放 youtube 视频,有两个考虑因素:

  1. 根据Android版本,这是不可能的。Android 4.x 版WebView无法做到这一点(或者我没有找到方法:) 正如我在 此处发布的那样
  2. 如果您使用的是 Android 5 或更高版本,则必须将 设置WebChromeClientWebView组件:setWebChromeClient(new WebChromeClient());

希望能帮助到你!

于 2016-07-16T11:22:25.940 回答