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

lit*_*ove 14 youtube android webview

这是关于在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>
Run Code Online (Sandbox Code Playgroud)

在Android 2.3.3和3.2设备(HTC Desire和Asus Transformer)上测试代码,webview只显示一个黑色矩形.

我试着从vimeo进行类似的嵌入

<iframe src="http://player.vimeo.com/video/35693267" width="640" height="360" frameborder="0"></iframe>
Run Code Online (Sandbox Code Playgroud)

在2.3中,视频播放正确
在3.2中,黑色矩形闪烁并消失,iframe区域为空白.

最后,如果使用旧的嵌入格式(使用对象标签),视频将在2.3.3和3.2中的webview内正确显示.

我已经检查了相关问题并添加了

android:hardwareAccelerated="true"
Run Code Online (Sandbox Code Playgroud)

在应用程序和/或活动标签中,但在2.3和3.2设备中仍然没有视频.

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

Mik*_*maa 11

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

早期的讨论,有一个可能的解决方案.

Android上的Google阅读器式优化WebViews


Sak*_*boy 10

如果您想在自己内部播放视频,则WebView需要使用基本URL加载数据!

这样做:

mContentWebView.loadDataWithBaseURL(null, webViewContentString,
            "text/html", "UTF-8", null);
Run Code Online (Sandbox Code Playgroud)

做这个安排:

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

基本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);
Run Code Online (Sandbox Code Playgroud)

您需要在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>
Run Code Online (Sandbox Code Playgroud)