记录一次mobile-ffmpeg和unity一起使用造成的native层报错导致应用崩溃的问题
当mobile-ffmpeg和unity一起使用的时候会产生类似这样的错误:
`11-25 16:00:47.029 8062 8081 E CRASH : signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0013c28811-25 16:00:47.029 8062 8081 E CRASH : *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***11-25 16:00:47.029 8062 8081 E CRASH : Build type 'Release', Scripting Backend 'il2cpp', CPU 'armeabi-v7a'11-25 16:00:47.029 8062 8081 E CRASH : Build fingerprint: 'samsung/beyond2qlteue/beyond2q:9/redacted/Gredacted:user/release-keys'11-25 16:00:47.029 8062 8081 E CRASH : Revision: '17'11-25 16:00:47.029 8062 8081 E CRASH : pid: 8062, tid: 8081, name: UnityMain >>> com.redacted.redacted <<<11-25 16:00:47.029 8062 8081 E CRASH : r0 c8906bc0 r1 00000000 r2 00000000 r3 0000000011-25 16:00:47.029 8062 8081 E CRASH : r4 00000000 r5 c8905aa0 r6 c962e680 r7 0000000511-25 16:00:47.029 8062 8081 E CRASH : r8 00000000 r9 00000000 sl 00000001 fp caafe97011-25 16:00:47.029 8062 8081 E CRASH : ip c9628e2c sp caafe950 lr c8906868 pc 0013c288 cpsr c06f870011-25 16:00:47.029 8062 8081 E CRASH :11-25 16:00:47.029 8062 8081 E CRASH : backtrace:`
这个问题在issue里面作者有过回复称在4.4版本已经修复了,有兴趣深入了解的朋友点击这里。
解决办法就是将你的mobile-ffmpeg升级到4.4+版本并且在应用初始化的时候加入以下代码:
Config.ignoreSignal(Signal.SIGXCPU);
大致意思就是因为Unity在内部使用Mono框架,而Mono在内部将SIGXCPU用于GC,解决方案是忽略SIGPWR和SIGXCPU信号。由于时间比较急没有去仔细研究底层的原理,若有明白其中原理的大佬还望给出您宝贵的回复,感激不尽~