android - 带 iframe 的视频不显示在 Android Webview 上

标签 android video iframe webview video-streaming

我正在开发 Android 项目(API 级别 8),显示来自另一个网站的 WebView,我无法更改这些网站的代码。在某些未启用强制 GPU 渲染(在设置 --> 开发人员选项中)的设备上,我在 WebView 中遇到视频剪辑问题。以下代码是我从网站上看到的代码

<center><iframe width=\"500\" height=\"315\" src=\"http:\/\/www.youtube.com\/embed\/bf7wpubnyIE\" frameborder=\"0\" allowfullscreen><\/iframe><\/center>  <br \/>

<center> <iframe frameborder=\"0\" width=\"480\" height=\"323\" src=\"http:\/\/www.dailymotion.com\/embed\/video\/xrmnk1\"><\/iframe> <\/center><br \/>

在 Android 方面,我已经启用了几个设置

webview.setWebChromeClient(new WebChromeClient()); 
webview.setWebViewClient(new WebViewClient()); 
webview.getSettings().setJavaScriptEnabled(true);
webview.getSettings().setPluginsEnabled(true);

我相信我不能使用 android:hardwareAccelerated="true" 因为我正在使用 API 级别 8

当我关闭强制 GPU 渲染时,logcat 上的错误显示如下

06-20 14:04:24.455: W/webview(28201):   at android.webkit.WebView.checkThread(WebView.java:9468)
06-20 14:04:24.455: W/webview(28201):   at android.webkit.WebView.loadDataWithBaseURL(WebView.java:2186)
06-20 14:04:24.455: W/webview(28201):   at com.tss.one.MainDetail$1.run(MainDetail.java:144)
06-20 14:04:24.455: W/webview(28201):   at java.lang.Thread.run(Thread.java:856)
06-20 14:04:24.533: V/PhoneStatusBar(10977): setLightsOn(true)
06-20 14:04:24.697: I/ActivityManager(10909): Displayed com.tss.one/.MainDetail: +614ms
06-20 14:04:27.197: D/libEGL(28201): loaded /system/lib/egl/libGLES_android.so
06-20 14:04:27.205: D/libEGL(28201): loaded /vendor/lib/egl/libEGL_POWERVR_SGX540_120.so
06-20 14:04:27.221: D/libEGL(28201): loaded /vendor/lib/egl/libGLESv1_CM_POWERVR_SGX540_120.so
06-20 14:04:27.229: D/libEGL(28201): loaded /vendor/lib/egl/libGLESv2_POWERVR_SGX540_120.so
06-20 14:04:27.729: E/Web Console(28201): Unsafe JavaScript attempt to access frame with URL about:blank from frame with URL http://www.youtube.com/embed/bf7wpubnyIE. Domains, protocols and ports must match.
06-20 14:04:27.729: E/Web Console(28201):  at null:1
06-20 14:04:27.838: E/libEGL(28201): call to OpenGL ES API with no current context (logged once per thread)
06-20 14:04:27.838: D/ShaderProgram(28201): couldn't load the vertex shader!
06-20 14:04:27.838: D/ShaderProgram(28201): couldn't load the vertex shader!
06-20 14:04:27.838: D/ShaderProgram(28201): couldn't load the vertex shader!
06-20 14:04:27.838: D/ShaderProgram(28201): couldn't load the vertex shader!
06-20 14:04:27.838: D/ShaderProgram(28201): couldn't load the vertex shader!
06-20 14:04:28.213: D/dalvikvm(28201): GC_CONCURRENT freed 3468K, 17% free 20475K/24519K, paused 3ms+2ms
06-20 14:04:29.783: E/Web Console(28201): Uncaught Error: INDEX_SIZE_ERR: DOM Exception 1 at http://static1.dmcdn.net/js/gen/widget/pack/player.js.v91ec0434953824904:1
06-20 14:04:29.791: D/MediaPlayer(28201): Couldn't open file on client side, trying server side
06-20 14:04:29.791: I/AwesomePlayer(10888): setDataSource_l('http://www.dailymotion.com/cdn/H264-512x384/video/xrmnk1.mp4?auth=1340348666-9f8ec9001ccce92feec18d9419b07065&helper=0')
06-20 14:04:29.791: V/ChromiumHTTPDataSource(10888): connect on behalf of uid 10124
06-20 14:04:29.791: I/ChromiumHTTPDataSource(10888): connect to http://www.dailymotion.com/cdn/H264-512x384/video/xrmnk1.mp4?auth=1340348666-9f8ec9001ccce92feec18d9419b07065&helper=0 @0
06-20 14:04:33.291: I/SampleTable(10888): There are reordered frames present.
06-20 14:04:33.299: I/OMXCodec(10888): [OMX.TI.DUCATI1.VIDEO.DECODER] AVC profile = 66 (Baseline), level = 30
06-20 14:04:33.299: I/OMXCodec(10888): [OMX.TI.DUCATI1.VIDEO.DECODER] video dimensions are 512 x 344
06-20 14:04:33.299: I/OMXCodec(10888): [OMX.TI.DUCATI1.VIDEO.DECODER] Crop rect is 512 x 344 @ (0, 0)
06-20 14:04:34.432: I/OMXCodec(10888): [OMX.TI.DUCATI1.VIDEO.DECODER] video dimensions are 640 x 448
06-20 14:04:34.432: I/OMXCodec(10888): [OMX.TI.DUCATI1.VIDEO.DECODER] Crop rect is 512 x 344 @ (0, 0)
06-20 14:04:34.604: I/OMXCodec(10888): [OMX.TI.DUCATI1.VIDEO.DECODER] video dimensions are 640 x 448
06-20 14:04:34.604: I/OMXCodec(10888): [OMX.TI.DUCATI1.VIDEO.DECODER] Crop rect is 512 x 344 @ (32, 24)
06-20 14:04:34.612: W/SoftAAC(10888): Sample rate was 44100 Hz, but now is 22050 Hz
06-20 14:04:39.666: I/NuCachedSource2(10888): ERROR_END_OF_STREAM

最佳答案

可能是硬件加速的问题。尝试禁用它:

@TargetApi(11)
private void disableHardwareAcceleration() {
    if(getCustomApp().isHarwareAccelerateDisable() && android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB) {
        Log.e(TAG, "disable HardwareAcceleration");
        webview.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
    }
}

关于android - 带 iframe 的视频不显示在 Android Webview 上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11114630/

相关文章:

android - 如何使用 facebook 帐户在 android 应用程序中获取登录状态?

android - 重新采样音频会改变速度

android - 将 SVN 迁移到 Android Studio

android - 为节奏制作音池

linux - 从脚本生成视频(concat 和简单效果)

javascript - angularjs $compile 错误了 iframe 上的 onload 事件

c++ - OpenCV 背景减法/密码本?

android - 是否可以通过视频标签播放位于 Android WebView 上下载文件夹内的 mp4 文件?

css - Vimeo 嵌入 CSS : override default text styles?

javascript - 我们可以从 iframe 本身打开的页面关闭 iframe 窗口吗?