我正在努力在WebView中播放YouTube视频,WebView显示第一看视频与播放按钮,但在点击播放按钮开始进度条和2-3秒后停止进度条和黑色屏幕空白。
Image1:带有播放按钮的视频优先显示
Image2:单击播放按钮后,屏幕变为空白。
请!帮我解释一下为什么视频不能启动。
图片:1

图片:2

这是我在webview中播放YouTubeVideo的源代码。请帮帮我。
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
WebView wv = (WebView) findViewById(R.id.webView1);
wv.getSettings().setJavaScriptEnabled(true);
wv.getSettings().setPluginsEnabled(true);
final String mimeType = "text/html";
final String encoding = "UTF-8";
String html = getHTML();
wv.loadDataWithBaseURL("", html, mimeType, encoding, "");
}
public String getHTML() {
String html = "<iframe class=\"youtube-player\" style=\"border: 0; width: 100%; height: 95%; padding:0px; margin:0px\" id=\"ytplayer\" type=\"text/html\" src=\"http://www.youtube.com/embed/"
+ "J2fB5XWj6IE"
+ "?fs=0\" frameborder=\"0\">\n"
+ "</iframe>\n";
return html;
}发布于 2012-10-06 02:09:14
在将HTML内容加载到WebView之前添加这些行。
wv.setWebChromeClient(new WebChromeClient() {
});从文档中:
为了在您的应用程序中支持内联HTML5视频,您需要打开硬件加速、并设置WebChromeClient。对于全屏支持,需要实现onShowCustomView(视图、WebChromeClient.CustomViewCallback)和onHideCustomView(),而getVideoLoadingProgressView()是可选的。
发布于 2012-10-12 09:00:29
需要以下代码来显示由web核心框架启动的视频播放器。整个流程的关键是将VideoView传递回WebChromeClient,您需要将该视图附加到视图层次结构。
我已经通过审阅作为AOSP的一部分提供的浏览器源代码来组装它。
这段代码引用了4个可能不太明显的视图。视图层次结构为:
FrameLayout mContentView (root)WebView mWebView ( mContentView)FrameLAyout mCustomViewContainer的子项) mContentView)View mCustomView的子项( mCustomViewContainer)的子项
这些视图被配置为设置容器活动的一部分。
<FrameLayout
android:id="@+id/fullscreen_custom_content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FF000000"/>
<FrameLayout
android:id="@+id/main_content"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" >
<WebView
android:id="@+id/webView"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
</FrameLayout>
</FrameLayout>在您的Activities onCreate中
mContentView = (FrameLayout) findViewById(R.id.main_content);
mWebView = (WebView) findViewById(R.id.webView);
mCustomViewContainer = (FrameLayout) findViewById(R.id.fullscreen_custom_content);向mWebView注册WebChromeClient。该客户端应覆盖以下2-4个方法:
void onShowCustomView(View view, WebChromeClient.CustomViewCallback callback)
{
// if a view already exists then immediately terminate the new one
if (mCustomView != null)
{
callback.onCustomViewHidden();
return;
}
// Add the custom view to its container.
mCustomViewContainer.addView(view, COVER_SCREEN_GRAVITY_CENTER);
mCustomView = view;
mCustomViewCallback = callback;
// hide main browser view
mContentView.setVisibility(View.GONE);
// Finally show the custom view container.
mCustomViewContainer.setVisibility(View.VISIBLE);
mCustomViewContainer.bringToFront();
}
void onHideCustomView()
{
if (mCustomView == null)
return;
// Hide the custom view.
mCustomView.setVisibility(View.GONE);
// Remove the custom view from its container.
mCustomViewContainer.removeView(mCustomView);
mCustomView = null;
mCustomViewContainer.setVisibility(View.GONE);
mCustomViewCallback.onCustomViewHidden();
// Show the content view.
mContentView.setVisibility(View.VISIBLE);
}
public Bitmap getDefaultVideoPoster()
{
if (mDefaultVideoPoster == null)
{
mDefaultVideoPoster = BitmapFactory.decodeResource(getResources(), R.drawable.default_video_poster);
}
return mDefaultVideoPoster;
}
public View getVideoLoadingProgressView()
{
if (mVideoProgressView == null)
{
LayoutInflater inflater = LayoutInflater.from(this);
mVideoProgressView = inflater.inflate(R.layout.video_loading_progress, null);
}
return mVideoProgressView;
}您可能还想添加活动生命周期绑定,如下所示:
@Override
protected void onStop()
{
super.onStop();
if (mCustomView != null)
{
if (mCustomViewCallback != null)
mCustomViewCallback.onCustomViewHidden();
mCustomView = null;
}
}
@Override
public void onBackPressed()
{
if (mCustomView != null)
{
onHideCustomView();
} else
{
finish();
}
}添加到您的活动,以便在活动停止或按下后退按钮时隐藏视频。
发布于 2013-02-07 12:45:59
添加webview.setWebChromeClient(new WebChromeClient());并为您的视频启用插件
if (Build.VERSION.SDK_INT < 8) {
webview.getSettings().setPluginsEnabled(true);
} else {
webview.getSettings().setPluginState(PluginState.ON);
}技术
https://stackoverflow.com/questions/12708890
复制相似问题