2012-01-27 143 views
13

这是关于在webview中使用最新的嵌入格式(iframe)加载YouTube视频。的IFRAME格式嵌入Android webview无法呈现通过iframe嵌入的youtube视频

<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 & 3.2设备(HTC欲望&华硕变压器)的代码

实施例,web视图只会显示一个黑色矩形。

我尝试过类似嵌入从VIMEO

<iframe src="http://player.vimeo.com/video/35693267" width="640" height="360" frameborder="0"></iframe> 

在2.3,视频正确
起到在3.2,一个黑色的矩形闪蒸并消失时,iframe区域是空白的。

最后,如果使用旧的嵌入格式(使用对象标签),则视频会在webview中的2.3.3 & 3.2中正确显示。

我检查了相关的问题,并在两个2.3 & 3.2设备的应用和/或活动标记,但仍然没有视频添加

android:hardwareAccelerated="true" 

这是一个大问题,因为更多的网站现在使用最新格式(iframe)来嵌入他们的YouTube视频。 Android/Youtube团队,请看看这个问题。

+0

你应该这样回答:https://stackoverflow.com/a/24592012/2371425,因为它实际上解决了这个问题。 – Sakiboy 2018-02-12 07:27:18

回答

11

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

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

Google Reader-esque optimizing of WebViews on Android

+0

你说得对。我进一步发现,如果您在播放视频时旋转设备,应用程序将会全部混乱。我最终使用了建议的缩略图和链接解决方案。 – littlestove 2012-01-31 04:46:43

+0

你如何确定链接到YouTube或vimeo h264文件? – cottonBallPaws 2012-04-24 20:46:29

+0

查看我的答案。我的答案解决了这个问题,非常简单。 – Sakiboy 2015-01-06 22:04:30

0

我会建议使用一些代码来检测用户的环境......使用iframe的代码只对(在iPhone,iPod,iPad的)iOS设备,并使用旧代码的其他人。

7

如果你想内播放影片WebView你需要用碱URL加载数据!

DONT做到这一点:

mContentWebView.loadDataWithBaseURL(null, webViewContentString, 
      "text/html", "UTF-8", null); 

而是执行此

//veryVeryVery important for playing the videos! 
    mContentWebView.loadDataWithBaseURL(theBaseUrl, webViewConentString, 
      "text/html", "UTF-8", null); 

基本URL将成为像你中显示什么样的 “原始” 的网址您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); 

你需要有硬件加速在清单打开(仅适用于SDK 14及以上)。

Ex。硬件加速开:

<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> 
+1

避免loadDataWithBaseURL(...)与null基础网址为我工作。谢谢! – IK828 2014-07-21 20:40:42

+0

花了我几天的时间来解决这个问题!我认为这是行不通的! – Sakiboy 2014-07-22 03:13:53

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