通过 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 版本。
众所周知,WebViewChromeClient
的 onShowCustomView
方法,从 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:请求关注通过WindowManager添加的视图(WebView)