通过 Android WebView 在 YouTube HTML5 视频中搜索

Posted

技术标签:

【中文标题】通过 Android WebView 在 YouTube HTML5 视频中搜索【英文标题】:Seeking forward in YouTube HTML5 video over Android WebView 【发布时间】:2012-10-11 15:06:48 【问题描述】:

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

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

正如您在 URL 中看到的,参数“start”显示视频必须开始播放的秒数。我一直使用WebChromeClient的方法onShowCustomView获取WebView创建的VideoView对象,见here。

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

众所周知,WebViewChromeClientonShowCustomView 方法,从 4.x 及更高版本开始,仅在用户单击“全屏”模式时调用,而不是在视频开始播放时调用(过去是如何4.x 之前)。

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

【问题讨论】:

当 newProgress == 100 时,也许您可​​以从 WebChromeClient#onProgressChanged(WebView view, int newProgress) 中的 view 参数中获取对 Video 对象的引用?我还没有尝试过,所以我将其发布为评论。 @GunnarKarlsson 我会检查的,谢谢! 看看 MediaelementJS (mediaelementjs.com)。我在我的 quirli 媒体播放器 (quir.li) 中使用这个库来播放各种媒体格式,包括 Youtube 视频。请参阅 Youtube 示例。 【参考方案1】:

对于未来的观众

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

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

【讨论】:

【参考方案2】:

如果有人想使用WebView 播放 youtube 视频,有两个注意事项:

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

希望对你有帮助!

【讨论】:

【参考方案3】:

试试这个:

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

    
;

【讨论】:

以上是关于通过 Android WebView 在 YouTube HTML5 视频中搜索的主要内容,如果未能解决你的问题,请参考以下文章

Android 下的 WebView 中数据如何保存

Android:请求关注通过WindowManager添加的视图(WebView)

Android WebView 调试方法

通过 WebView (Android Studio) 导航到时,Youtube 在应用程序中启动

android webview如何获取网页输出的提示信息

如何通过 React Native 在 Android WebView 中隐藏滚动条