0

在 jelly beans android 设备(我相信也是 ICS)上,android WebView 内框架中的 youtube 视频在我们的应用程序中停止工作数周前:没有视频(黑屏),但可以听到声音并看到视频控件。我终于找到了一条关于是什么阻止它们工作的线索。似乎需要在清单中设置以下内容才能使视频正常工作:

android:targetSdkVersion="8"
android:hardwareAccelerated="true"
supports-screens android:anyDensity="false"

另外,在我们单击全屏 youtube 按钮后,视频可以正常工作(但我不想使用全屏)。

1)和2)对我们来说不是问题,我们可以在清单中设置它们(但我想知道为什么需要硬件加速)。但是3)我们不能(出于不同的原因)。

有谁知道为什么 anyDensity 设置为假休息视频以及是否有任何解决方法?

有关重现问题的 apk 的一些信息: apk 是使用 清单的
android 3.0密钥提取构建的:

<uses-sdk android:minSdkVersion="1" android:targetSdkVersion="8"/>
<!-- android:hardwareAccelerated="true" -->
<application android:icon="@drawable/icon" android:label="@string/app_name" android:hardwareAccelerated="true">
    <activity android:name=".TestHTML5WebView"
              android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

</application>

<supports-screens android:anyDensity="false"/>

...

用于 youtube 视频的 html 代码:

<!DOCTYPE html>
<html>
<head>
<title>Test</title>
<meta name="viewport" content="user-scalable=no, width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, target-densityDpi=device-dpi"/>


<script type="text/javascript" charset="utf-8">
            window.onerror = function(errorMsg) {
                    try {
                            alert(errorMsg);
                    }
                    catch(err) {
                            alert('An expected error occurred. please try again later!');
                    }
            }
</script>

<style type="text/css" media="screen">
            body {
                    background: #000;
                    margin: 0;
                    padding: 0;
            }

            .video1 {
                    width: 90%;
                    height: 90%;
                    margin: 0 auto;
            }
</style>
</head>
<body>
    <div class="video1">
            <iframe width="560" height="315" src="http://www.youtube.com/embed/hH9Kx06oO_0" frameborder="0" allowfullscreen></iframe>
    </div>
</body>
</html>

要重现该问题,您可以使用http://code.google.com/p/html5webview/source/checkout中的源代码(只需确保使用本文顶部指示的值更新 manifest.xml, targetSdkVersion、hardwareAccelerated、android:anyDensity)。

谢谢。

洛朗

4

2 回答 2

0

Youtube 最近发布的安卓播放器:

https://developers.google.com/youtube/android/player/

于 2013-02-05T09:56:28.220 回答
0

对于嵌入式视频,应用程序需要表面纹理类。这需要将 android:hardwareAccelerated="true" 设置为 true。根据http://developer.android.com/guide/topics/manifest/supports-screens-element.html, android:anyDensity="false" 不应设置为 false。全屏视频使用surfaceview,surfaceview对硬件加速没有要求。

于 2012-10-25T20:42:20.653 回答