Ran*_*del 44 youtube video android android-webview
我想在WebView中播放YouTube视频,WebView首先显示带有播放按钮的视频,但点击播放按钮后开始进度条,2-3秒后停止进度条和黑色屏幕空白.
Image1:视频首先看播放按钮
Image2:点击播放按钮后屏幕变为空白.
请!帮助我为什么视频没有开始.
IMAGE:1
IMAGE: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;
}
Run Code Online (Sandbox Code Playgroud)
Łuk*_*mek 71
在将HTML内容加载到WebView之前添加这些行.
wv.setWebChromeClient(new WebChromeClient() {
});
Run Code Online (Sandbox Code Playgroud)
从文档:
要在应用程序中支持内联HTML5视频,您需要打开硬件加速,并设置WebChromeClient.对于全屏支持,需要实现onShowCustomView(View,WebChromeClient.CustomViewCallback)和onHideCustomView(),getVideoLoadingProgressView()是可选的.
Nic*_*ion 18
需要以下代码来显示由Web核心框架启动的视频播放器.整个流程的关键是VideoView被传递回WebChromeClient,您需要将该视图附加到视图层次结构.
我通过查看作为AOSP一部分提供的浏览器源代码来组装它.
此代码引用了4个视图,这些视图可能并不明显.视图层次结构是:
FrameLayout mContentView
(根)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>
Run Code Online (Sandbox Code Playgroud)
在您的活动中onCreate
:
mContentView = (FrameLayout) findViewById(R.id.main_content);
mWebView = (WebView) findViewById(R.id.webView);
mCustomViewContainer = (FrameLayout) findViewById(R.id.fullscreen_custom_content);
Run Code Online (Sandbox Code Playgroud)
注册一个WebChromeClient
带mWebView
.该客户端应覆盖以下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;
}
Run Code Online (Sandbox Code Playgroud)
您可能还想添加活动生命周期绑定,例如:
@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();
}
}
Run Code Online (Sandbox Code Playgroud)
对于您的活动,在活动停止或按下后退按钮时隐藏视频.
Sid*_*yas 12
添加webview.setWebChromeClient(new WebChromeClient());
并启用视频添加的插件
if (Build.VERSION.SDK_INT < 8) {
webview.getSettings().setPluginsEnabled(true);
} else {
webview.getSettings().setPluginState(PluginState.ON);
}
Run Code Online (Sandbox Code Playgroud)
Thnaks
在移动设备上流式传输的youtbe视频存在一些问题.如果您直接尝试在Web视图中加载URL并运行它,则视频将无法播放.解决此问题的一种困难方法是在视频视图中流式传输视频.我没试过,但这可以做到.
播放YouTube视频的其他方式,我称之为更简单的方法是将Web视图设置中的用户代理从移动设备更改为桌面.用户代理指示将运行YouTube视频的设备类型,因此服务器会发送该类型的网页.通过这种方式,可以流式传输和播放YouTube视频.以下是如何执行此操作的方法:
public static final int USER_MOBILE = 0;
public static final int USER_DESKTOP = 1;
wv.getSettings().setUserAgent(USER_DESKTOP); // 1 is for the desktop
Run Code Online (Sandbox Code Playgroud)