我正在开发一个应用程序,允许您通过 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/