媒体编解码器| Android |视频解码本机崩溃

媒体编解码器| Android |视频解码本机崩溃,android,video,opengl-es-2.0,samsung-mobile,android-mediacodec,Android,Video,Opengl Es 2.0,Samsung Mobile,Android Mediacodec,一些背景:我的应用程序允许用户使用OpenGL和MediaCodec API从API 16及更高版本开始在屏幕上预览多个视频。这些视频都是.mp4文件 在我解码了表面上的视频后,我也经历了类似的崩溃。但我的是专门针对三星设备的 紧急救援线: A/libc﹕ 0x00000000处的致命信号11 SIGSEGV代码=1,线程11685 MediaCodec_循环 LogCat输出: 当我尝试在Galaxy S3上解码超过2个视频文件时,问题就特别出现了。2个视频播放得很好 我在HTC OneX4.

一些背景:我的应用程序允许用户使用OpenGL和MediaCodec API从API 16及更高版本开始在屏幕上预览多个视频。这些视频都是.mp4文件

在我解码了表面上的视频后,我也经历了类似的崩溃。但我的是专门针对三星设备的

紧急救援线:

A/libc﹕ 0x00000000处的致命信号11 SIGSEGV代码=1,线程11685 MediaCodec_循环

LogCat输出:

当我尝试在Galaxy S3上解码超过2个视频文件时,问题就特别出现了。2个视频播放得很好

我在HTC OneX4.1.x和LG Nexus4.2.x上测试了相同的代码,他们一次播放6个视频都没有问题

你知道问题是什么吗

编辑1

问题主要是软件编解码器,我的mime类型的编解码器有3个硬件和1个软件,分别是OMX.SEC.avc.dec、OMX.SEC.avcdec、OMX.SEC.avc.Decoder和OMX.google.h264.Decoder。OMX.SEC.avc.dec只能对1个视频进行解码,而其他视频则得到OMX.google.h264.decoder,因为它们的解码器在我的情况下,其他2个是无用的


我也在Nexus5Lollipop、小米Mi3KitKat和Galaxy S4KitKat上测试了该应用程序,绝对没有问题,因为这些设备成功地分配了6个硬件编解码器进行解码。

所有设备都对硬件编解码器可以同时解码的视频数量有限制,包括实例数或所需的总带宽。尝试执行更多操作可能会导致配置失败或使用软件回退。听起来你好像碰到了一只虫子。没有强制行为,我不知道多个同步解码的CTS测试的状态是什么4.3中没有,不认为4.4中有,不知道5.0。在任何情况下,这都应该在CTS中报告和表示。我已经用我进行的更多信息和测试更新了我的问题。我面临的另一个问题是,这个致命信号使我的应用程序崩溃,对此我无能为力,我试图捕捉到它,但没有成功。是否有方法至少捕获此异常并向用户显示一些消息?这是一个本机崩溃,看起来像是在关闭解码器时试图在SEC OMX代码中设置空指针。这也不例外;没有办法抓住它。如果有人对系统的这一部分有深入的了解,也许可以提出一种解决方法。更多信息,我在几次测试后发现,如果我同时播放5个视频,前4个解码器会得到OMX.SEC.avc.dec codec的实例,第5个解码器会得到OMX.google.h264.decodec。一切都很顺利。但如果我同时播放6个视频应用程序的上限要求,并为第5 n 6个视频创建2个OMX.google.h264.decoder编解码器实例,则在视频播放完毕后,此致命信号再次出现。法登有什么疯狂的猜测吗?在Galaxy S3上进行的测试听起来像是GS3的bug。除了有一张桌子上写着你不能在X设备上同时播放超过N个视频之外,我没有任何解决办法。
02-09 18:56:41.819    1902-1902/? I/DEBUG? *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
02-09 18:56:41.819    1902-1902/? I/DEBUG? Build fingerprint: 'samsung/m0zs/m0:4.1.2/JZO54K/I9300ZSEMK2:user/release-keys'
02-09 18:56:41.819    1902-1902/? I/DEBUG? pid: 16880, tid: 17266, name: MediaCodec_loop  >>> com.flambestudios.picplaypost <<<
02-09 18:56:41.819    1902-1902/? I/DEBUG? signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00000000
02-09 18:56:42.084    1902-1902/? I/DEBUG? r0 00000000  r1 00000000  r2 00008210  r3 00000000
02-09 18:56:42.084    1902-1902/? I/DEBUG? r4 00000000  r5 00000000  r6 00000000  r7 00000000
02-09 18:56:42.084    1902-1902/? I/DEBUG? r8 00000000  r9 64a44e80  sl 00000000  fp 00000001
02-09 18:56:42.084    1902-1902/? I/DEBUG? ip 00000000  sp 64a44d20  lr 00000000  pc 4010e55c  cpsr 20000010
02-09 18:56:42.084    1902-1902/? I/DEBUG? d0  443b400046180400  d1  44a6a00000000000
02-09 18:56:42.084    1902-1902/? I/DEBUG? d2  0000053500000000  d3  00000000000002ed
02-09 18:56:42.084    1902-1902/? I/DEBUG? d4  0000000000000000  d5  000002ed0073e20e
02-09 18:56:42.084    1902-1902/? I/DEBUG? d6  00000535443b4000  d7  00002601443b4000
02-09 18:56:42.084    1902-1902/? I/DEBUG? d8  000000003f800000  d9  4049000000000000
02-09 18:56:42.084    1902-1902/? I/DEBUG? d10 4049000000000000  d11 0000000000000000
02-09 18:56:42.084    1902-1902/? I/DEBUG? d12 0000000000000000  d13 0000000000000000
02-09 18:56:42.084    1902-1902/? I/DEBUG? d14 0000000000000000  d15 0000000000000000
02-09 18:56:42.084    1902-1902/? I/DEBUG? d16 0000000000000001  d17 0000000000000000
02-09 18:56:42.084    1902-1902/? I/DEBUG? d18 000000000073bffb  d19 000000000073cf5c
02-09 18:56:42.084    1902-1902/? I/DEBUG? d20 000000000073bf1b  d21 0020002000200820
02-09 18:56:42.084    1902-1902/? I/DEBUG? d22 000000000073f44f  d23 000000000073bd24
02-09 18:56:42.084    1902-1902/? I/DEBUG? d24 0820082008200820  d25 0020002000200820
02-09 18:56:42.084    1902-1902/? I/DEBUG? d26 0020002000200020  d27 0020002000200820
02-09 18:56:42.084    1902-1902/? I/DEBUG? d28 0020002000200020  d29 000000000073f41e
02-09 18:56:42.084    1902-1902/? I/DEBUG? d30 0820082008200020  d31 0020002000200020
02-09 18:56:42.084    1902-1902/? I/DEBUG? scr 80000013
02-09 18:56:42.099    1902-1902/? I/DEBUG? backtrace:
02-09 18:56:42.099    1902-1902/? I/DEBUG? #00  pc 0000e55c  /system/lib/libc.so (memset+148)
02-09 18:56:42.099    1902-1902/? I/DEBUG? #01  pc 0000144c  /system/lib/libSEC_OMX_Core.so (SEC_OMX_Component_Unregister+16)
02-09 18:56:42.099    1902-1902/? I/DEBUG? #02  pc 00001828  /system/lib/libSEC_OMX_Core.so (SEC_OMX_DeInit+44)
02-09 18:56:42.099    1902-1902/? I/DEBUG? #03  pc 00000ae7  /system/lib/libstagefrighthw.so (android::SECOMXPlugin::~SECOMXPlugin()+18)
02-09 18:56:42.099    1902-1902/? I/DEBUG? #04  pc 00000b0d  /system/lib/libstagefrighthw.so (android::SECOMXPlugin::~SECOMXPlugin()+4)
02-09 18:56:42.099    1902-1902/? I/DEBUG? #05  pc 0000c157  /system/lib/libstagefright_omx.so (android::OMXMaster::clearPlugins()+58)
02-09 18:56:42.099    1902-1902/? I/DEBUG? #06  pc 0000c189  /system/lib/libstagefright_omx.so (android::OMXMaster::~OMXMaster()+12)
02-09 18:56:42.099    1902-1902/? I/DEBUG? #07  pc 0000c1d1  /system/lib/libstagefright_omx.so (android::OMXMaster::~OMXMaster()+4)
02-09 18:56:42.099    1902-1902/? I/DEBUG? #08  pc 0000aec3  /system/lib/libstagefright_omx.so (android::OMX::~OMX()+38)
02-09 18:56:42.099    1902-1902/? I/DEBUG? #09  pc 0000af4d  /system/lib/libstagefright_omx.so (android::OMX::~OMX()+4)
02-09 18:56:42.099    1902-1902/? I/DEBUG? #10  pc 0000ef11  /system/lib/libutils.so (android::RefBase::decStrong(void const*) const+40)
02-09 18:56:42.099    1902-1902/? I/DEBUG? #11  pc 0005399b  /system/lib/libstagefright.so (android::sp<android::MPEG2PSExtractor::Track>::~sp()+18)
02-09 18:56:42.099    1902-1902/? I/DEBUG? #12  pc 000810e3  /system/lib/libstagefright.so (android::MuxOMX::~MuxOMX()+30)
02-09 18:56:42.099    1902-1902/? I/DEBUG? #13  pc 00081125  /system/lib/libstagefright.so (android::MuxOMX::~MuxOMX()+4)
02-09 18:56:42.099    1902-1902/? I/DEBUG? #14  pc 0000ef11  /system/lib/libutils.so (android::RefBase::decStrong(void const*) const+40)
02-09 18:56:42.099    1902-1902/? I/DEBUG? #15  pc 00055e7f  /system/lib/libstagefright.so (android::ACodec::LoadedState::onShutdown(bool)+130)
02-09 18:56:42.099    1902-1902/? I/DEBUG? #16  pc 00056d27  /system/lib/libstagefright.so (android::ACodec::LoadedState::onMessageReceived(android::sp<android::AMessage> const&)+106)
02-09 18:56:42.099    1902-1902/? I/DEBUG? #17  pc 000066bd  /system/lib/libstagefright_foundation.so (android::AHierarchicalStateMachine::onMessageReceived(android::sp<android::AMessage> const&)+80)
02-09 18:56:42.099    1902-1902/? I/DEBUG? #18  pc 00007471  /system/lib/libstagefright_foundation.so (android::ALooperRoster::deliverMessage(android::sp<android::AMessage> const&)+188)
02-09 18:56:42.099    1902-1902/? I/DEBUG? #19  pc 00006d25  /system/lib/libstagefright_foundation.so (android::ALooper::loop()+204)
02-09 18:56:42.099    1902-1902/? I/DEBUG? #20  pc 0001103b  /system/lib/libutils.so (android::Thread::_threadLoop(void*)+94)
02-09 18:56:42.099    1902-1902/? I/DEBUG? #21  pc 00010bb5  /system/lib/libutils.so
02-09 18:56:42.099    1902-1902/? I/DEBUG? #22  pc 00012e00  /system/lib/libc.so (__thread_entry+48)
02-09 18:56:42.099    1902-1902/? I/DEBUG? #23  pc 00012558  /system/lib/libc.so (pthread_create+172)