这是关于在webview中使用最新的嵌入格式(iframe)加载youtube视频。
iframe嵌入格式示例
<iframe width="637" height="358" src="http://www.youtube.com/embed/olC42gO-Ln4?fs=1&feature=oembed" frameborder="0" allowfullscreen=""></iframe>
在Android 2.3.3&amp;上测试代码3.2设备(HTC Desire&amp; Asus Transformer),webview只显示黑色矩形。
我尝试了类似于vimeo的嵌入
<iframe src="http://player.vimeo.com/video/35693267" width="640" height="360" frameborder="0"></iframe>
在2.3中,视频播放正确 在3.2中,黑色矩形闪烁并消失,iframe区域为空白。
最后,如果使用旧的嵌入格式(使用对象标签),视频将在2.3.3和2.3.3中的webview内正确显示。 3.2。
我已检查相关问题并添加了
android:hardwareAccelerated="true"
在应用程序和/或活动代码中,但在2.3&amp; 3.2设备。
这是一个大问题,因为现在有更多网站正在使用最新格式(iframe)来嵌入他们的YouTube视频。 Android / Youtube团队,请看一下这个问题。
答案 0 :(得分:11)
Android浏览器完全是错误的视频播放和嵌入。它根本不适用于各种设备。试图让它工作只是浪费你的时间。我的建议是,您不要试图加入<iframe>
,而只是提供直接链接到YouTube页面或h264文件的视频缩略图。
早期的讨论,可能的解决方案。
答案 1 :(得分:10)
如果您想在WebView
内播放视频,则需要使用基本网址加载数据!
不要这样做:
mContentWebView.loadDataWithBaseURL(null, webViewContentString,
"text/html", "UTF-8", null);
DO THE INSTEAD :
//veryVeryVery important for playing the videos!
mContentWebView.loadDataWithBaseURL(theBaseUrl, webViewConentString,
"text/html", "UTF-8", null);
基本网址将类似于&#34;原创&#34;您在WebView
中显示的内容的网址。所以,让我们假设您正在制作新闻阅读器,WebView's
基本网址将成为原始故事的网址。
祝你好运!
还记得设置你的WebView ......就像这样......
mContentWebView.setWebChromeClient(new WebChromeClient());
mContentWebView.getSettings().setPluginState(WebSettings.PluginState.ON);
mContentWebView.getSettings().setPluginState(WebSettings.PluginState.ON_DEMAND);
mContentWebView.setWebViewClient(new WebViewClient());
mContentWebView.getSettings().setJavaScriptEnabled(true);
您需要在Manifest中启用硬件加速(仅适用于SDK 14及更高版本)。
实施例。硬件加速开:
<application
android:name="com.example.app"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme"
android:hardwareAccelerated="true">
<!-- hardwareAccelerated requires SDK 14 -->
...
</application>
答案 2 :(得分:3)
HTML5视频支持
要在您的应用中支持内联HTML5视频,您需要启用硬件加速,并设置WebChromeClient 。
http://developer.android.com/reference/android/webkit/WebView.html
(希望对某人有帮助)
答案 3 :(得分:0)
我建议使用一些代码来检测用户的环境...仅对ios设备(iphone,ipod,ipad)使用iframe代码,并为其他人使用旧代码。
答案 4 :(得分:0)
此代码完全适合不同的设备
webView.setInitialScale(1);
webView.setWebChromeClient(new WebChromeClient());
webView.getSettings().setAllowFileAccess(true);
webView.getSettings().setPluginState(WebSettings.PluginState.ON);
webView.getSettings().setPluginState(WebSettings.PluginState.ON_DEMAND);
webView.setWebViewClient(new WebViewClient());
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setLoadWithOverviewMode(true);
webView.getSettings().setUseWideViewPort(true);
DisplayMetrics displaymetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
int height = displaymetrics.heightPixels;
int width = displaymetrics.widthPixels;
Log.e(SimpleBillsConstants.SIMPLE_BILLS, width + "-" + height);
String data_html = "<!DOCTYPE html><html> <head> <meta charset=\"UTF-8\"><meta name=\"viewport\" content=\"target-densitydpi=high-dpi\" /> <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"> <link rel=\"stylesheet\" media=\"screen and (-webkit-device-pixel-ratio:1.5)\" href=\"hdpi.css\" /></head> <body style=\"background:black;margin:0 0 0 0; padding:0 0 0 0;\"> <iframe style=\"background:black;\" width=' "+width+"' height='"+height+"' src=\""+ VIDEO_URL+"\" frameborder=\"0\"></iframe> </body> </html> ";
webView.loadDataWithBaseURL("http://vimeo.com", data_html, "text/html", "UTF-8", null);
答案 5 :(得分:0)
这对我有用 - 代码打开youtube网站,可以在WebView中播放视频:
mWebView = (WebView) findViewById(R.id.webview);
WebSettings webSettings = mWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
String frameVideo = "<html><body>Youtube video .. <br> <iframe width=\"320\" height=\"315\" src=\"https://www.youtube.com/\" frameborder=\"0\" allowfullscreen></iframe></body></html>";
mWebView.loadData(frameVideo, "text/html", "utf-8");
mWebView.loadUrl("http://www.youtube.com/");
mWebView.setWebViewClient(new WebViewClient());