webview - Android Marshmallow 在后台流式传输(缓冲区?)

标签 webview youtube streaming buffer android-6.0-marshmallow

我正在开发一个应用程序,允许您通过 YouTube Player API Reference for iframe Embeds in a WebView 在后台继续接收(如浏览器)Youtube 视频和音频。
当您正在观看视频并使用电源按钮关闭屏幕时,一切仍然正常,但是当我从应用程序中按下主页按钮时,几秒钟就可以完美收听,但是音频开始断断续续。

我尝试在服务中实现 WebView,即使使用 float 覆盖窗口,并且一切正常,但是当我按下主页按钮时会发生同样的事情,开始口吃音频和视频(因为在这种情况下你也可以看到视频) .稍后,如果我返回应用程序,一切都会重新开始正常运行。似乎应用程序需要保持在前台才能正常工作。

我一直在尝试不同的想法,我已经在谷歌上搜索了一个星期,但我不知道这是否有解决方案,错误是在 Android 6.0 中,Android 5.0.2 工作正常。

当我按下主页按钮时,这是 android 5.0.2 的 logcat:

W/cr_media: calling MediaCodec.release()
W/cr_media: calling MediaCodec.release()
E/OMXMaster: A component of name 'OMX.qcom.audio.decoder.aac' already exists, ignoring this one.
W/linker: libaricentomxplugin.so has text relocations. This is wasting memory and prevents security hardening. Please fix.
E/OMXMaster: A component of name 'OMX.qcom.audio.decoder.aac' already exists, ignoring this one.
E/OMXNodeInstance: OMX_GetExtensionIndex OMX.google.android.index.storeMetaDataInBuffers failed
E/ACodec: [OMX.google.vp9.decoder] storeMetaDataInBuffers failed w/ err -2147483648
E/OMXNodeInstance: getParameter(1868562439) ERROR: 0x8000101a

以及适用于 Android 6.0 的 logcat:
E/Surface: getSlotFromBufferLocked: unknown buffer: 0xb8b429e0
D/AudioManager: AudioManager dispatching onAudioFocusChange(1) for android.media.AudioManager@7f0c8a8com.mzrsoftware.android.youparrot.WebViewerYoutube$3@898cfc1
W/cr_media: calling MediaCodec.release()
W/cr_media: calling MediaCodec.release()
W/OpenGLRenderer: Fail to change FontRenderer cache size, it already initialized
E/OMXMaster: A component of name 'OMX.qcom.audio.decoder.aac' already exists, ignoring this one.
E/OMXMaster: Failed to get omx plugin handle
D/AudioManager: AudioManager dispatching onAudioFocusChange(-1) for android.media.AudioManager@7f0c8a8com.mzrsoftware.android.youparrot.WebViewerYoutube$3@898cfc1
E/OMXMaster: A component of name 'OMX.qcom.audio.decoder.aac' already exists, ignoring this one.
E/OMXMaster: Failed to get omx plugin handle
W/OMXNodeInstance: [1:google.vp9.decoder] component does not support metadata mode; using fallback
E/ACodec: [OMX.google.vp9.decoder] storeMetaDataInBuffers failed w/ err -1010 / is-streaming 1
E/OMXNodeInstance: getParameter(1:google.vp9.decoder, ParamVideoAndroidVp8Encoder(0x6f600007)) ERROR: UnsupportedIndex(0x8000101a)
E/Surface: getSlotFromBufferLocked: unknown buffer: 0xb8e1a248
-----(Here audio, video or both start stuttering)-----
W/OpenGLRenderer: Fail to change FontRenderer cache size, it already initialized
E/Surface: getSlotFromBufferLocked: unknown buffer: 0xb8ed9ff0

查看 logcat,并根据我在网上找到的内容,这似乎是 Android 6.0 特有的问题,带有缓冲区(缓冲区欠载),这可能已在 Android 6.0.1 中修复,但我无法证明。

有什么解决办法吗??谢谢!

最佳答案

我在 Android L (5.1.1) 上观察到 youtube 嵌入视频的类似问题,但就我而言,问题仅在于 chrome/ native 浏览器中的视频,并且音频工作正常。当我在某些网站上播放 youtube 嵌入的视频时,视频屏幕保持“绿色”。经过调查,我发现问题在于 libstagefright 中缓冲区的完整性检查不正确(检查 https://android-review.googlesource.com/#/c/178013/)。我正在开发自定义 ROM,因此在 android 操作系统代码中修复了它,现在 AV 可以正常工作。

作为一种解决方法,在 chrome 中,如果我从 chrome://flags 启用“媒体源 API”,那么它可以在不更改操作系统的情况下工作。

关于webview - Android Marshmallow 在后台流式传输(缓冲区?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35852229/

相关文章:

QTcpSocket 高频写入减慢传输速率

matlab - 如何以异步方式有效地将变量从 Matlab 传递到 GPU?

audio - 如何找到 AAC-LC(非 ADTS)音频包长度

windows - Javafx - 在 webview 组件中打开 login.microsoftonline.com 页面

react-native - react 本地YouTube观看事件

html - 如何使YouTube自动播放功能可用于网站?

android - 访问未配置。项目 608941808256 中未使用 YouTube Data API

android - android 中的 YoutubeService 类错误

android - Twitter - 从 webview 检索 pin 代码。安卓

android - 在Jquery Mobile中的一个页面中包含几个页面