Android webview无法呈现通过iframe嵌入的YouTube视频

时间:2012-01-27 16:10:54

标签: android webview youtube

这是关于在webview中使用最新的嵌入格式(iframe)加载youtube视频。

iframe嵌入格式示例

<iframe width="637" height="358" src="http://www.youtube.com/embed/olC42gO-Ln4?fs=1&amp;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团队,请看一下这个问题。

6 个答案:

答案 0 :(得分:11)

Android浏览器完全是错误的视频播放和嵌入。它根本不适用于各种设备。试图让它工作只是浪费你的时间。我的建议是,您不要试图加入<iframe>,而只是提供直接链接到YouTube页面或h264文件的视频缩略图。

早期的讨论,可能的解决方案。

Google Reader-esque optimizing of WebViews on Android

答案 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());