如何使用android在webview中播放视频?
Posted
技术标签:
【中文标题】如何使用android在webview中播放视频?【英文标题】:How to play a video in a webview with android? 【发布时间】:2011-06-26 18:14:32 【问题描述】:我在sdcard中加载了一个本地html,在这个html中我使用了标签:
<video id="myvideo" controls poster="img/img01.jpg" src="video/01.mp4"></video>
然后我发现我没有加载这个html,当我禁用标签时:,html工作正常,我在我的android avd(2.2)中测试了这个?
【问题讨论】:
此link 将帮助您解决问题。但它仍然存在链接中提到的一些问题。 【参考方案1】:首先关心编码。这是article with a working example 和一些为 Android webkit 编码视频的指南。
然后...当我不得不面对这个问题时,我不得不进行一些研究并找到一些有用的答案。基本上你必须以原生浏览器的方式打开视频
public class InredisChromeClient extends WebChromeClient implements OnCompletionListener, OnErrorListener
private InterfazWebInredis interfazWeb; // Use Your WebView instance instead
private VideoView mCustomVideoView;
private LinearLayout mContentView;
private FrameLayout mCustomViewContainer;
private WebChromeClient.CustomViewCallback mCustomViewCallback;
private LinearLayout mErrorConsoleContainer;
static final FrameLayout.LayoutParams COVER_SCREEN_GRAVITY_CENTER = new FrameLayout.LayoutParams(
ViewGroup.LayoutParams.FILL_PARENT,
ViewGroup.LayoutParams.FILL_PARENT, Gravity.CENTER);
public InredisChromeClient(InterfazWebInredis iwi)
super();
this.interfazWeb = iwi;
public void onShowCustomView(View view, CustomViewCallback callback)
// super.onShowCustomView(view, callback);
if (view instanceof FrameLayout)
mCustomViewContainer = (FrameLayout) view;
mCustomViewCallback = callback;
mContentView = (LinearLayout) interfazWeb.findViewById(R.id.mainContainer);
if (mCustomViewContainer.getFocusedChild() instanceof VideoView)
mCustomVideoView = (VideoView) mCustomViewContainer.getFocusedChild();
// frame.removeView(video);
mContentView.setVisibility(View.GONE);
mCustomViewContainer.setVisibility(View.VISIBLE);
interfazWeb.setContentView(mCustomViewContainer);
mCustomVideoView.setOnCompletionListener(this);
mCustomVideoView.setOnErrorListener(this);
mCustomVideoView.start();
public void onHideCustomView()
if (mCustomVideoView == null)
return;
// Hide the custom view.
mCustomVideoView.setVisibility(View.GONE);
// Remove the custom view from its container.
mCustomViewContainer.removeView(mCustomVideoView);
mCustomVideoView = null;
mCustomViewContainer.setVisibility(View.GONE);
mCustomViewCallback.onCustomViewHidden();
// Show the content view.
mContentView.setVisibility(View.VISIBLE);
@Override
public void onCompletion(MediaPlayer mp)
mp.stop();
mCustomViewContainer.setVisibility(View.GONE);
onHideCustomView();
interfazWeb.setContentView(mContentView);
@Override
public boolean onError(MediaPlayer mp, int what, int extra)
interfazWeb.setContentView(R.layout.main);
return true;
所以,这段代码的灵感来自android project source code of the browser。
好吧,这个行为是全屏打开视频。我不知道是否可以在网页内的自己的框架中播放视频。但是这个解决方案对我有用,我也希望对你有用。
问候
【讨论】:
如何在 WebView 对象上设置ContentView?我想我错过了什么 @powerj1984 默认情况下,当您单击视频链接时,WebView 会尝试在新窗口中打开它,因此平台会为您执行此操作。我不知道他们是否改变了这种行为,这就是他们在 FroYo 中的工作方式。 我知道这是旧的,但我也没有真正得到 setContentView 调用。 setContentView 不是 WebView 或其父母的功能。你自己实现了吗?你能提供这个项目的完整源代码吗?我真的很感激。 @FuegoFingers,interfazWeb
字段是InterfazWebInredis
的一个实例,它扩展了Activity
。
我是 android 开发新手,我想在 android 网页上的本地存储 html(资产文件夹)上播放本地存储视频..但是当我点击 html 上的视频时,它不会播放..than我看到你的代码,但我不明白在哪里使用你的代码【参考方案2】:
这应该在您已经使用的 2.x 版本中工作。但doc 表示该标签将在浏览器全屏时起作用。
您的 webview 也有可能支持它,但它必须是全屏的。 试试这个。 (不过我没试过)
编辑:要让视图全屏显示,您可以试试这个:
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
【讨论】:
谢谢!但是如何让浏览器全屏呢?现在我加载的html页面太大了,当我想查看所有页面时,我必须使用滚动条来控制它,以及如何将加载的html页面自动调整到我的webview中并使webview全屏? 有人根据这个答案让它工作吗?它对我不起作用。顺便说一句,我在链接的文档中也找不到关于全屏的消息。 上面写着<video> tag support in fullscreen mode
,那里讨论了“浏览器”功能以上是关于如何使用android在webview中播放视频?的主要内容,如果未能解决你的问题,请参考以下文章
如何解决在android开发中WebView在线播放视频黑屏啊?
如何在 Android 的 WebView 中播放 Dailymotion 视频