如何在android的webview中播放video?
我在SD卡中加载了一个本地html,在这个html中我使用了标签:
<video id="myvideo" controls width="120" height="60" poster="img/img01.jpg" src="video/01.mp4"></video>
然后我发现我没有加载这个HTML,当我禁用标签:,HTML工作正常,我testing了这在我的Android AVD(2.2)?
首先关心编码。 这里有一篇文章,其中包含一个工作示例和一些为Android Webkit编码video的指南。
然后…当我不得不面对这个问题时,我不得不研究一下,find一些有用的答案。 基本上你必须按照原生浏览器的方式打开video
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项目源代码 。
而且,这样做的行为是全屏打开video。 我不知道是否有可能在网页内播放video。 但是这个解决scheme对我来说是个诀窍,我也希望能为你效劳。
问候
这应该是在你已经使用的2.x版本中工作。 但文档说,标签将工作时,浏览器是全屏。
可能性是你的webview也支持它,但它需要全屏。 试试这个。 (虽然我没有尝试过)
编辑:要使视图去全屏,你可以试试这个:
requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);