記錄一次mobile-ffmpeg和unity一起使用造成的native層報(bào)錯(cuò)導(dǎo)致應(yīng)用崩潰的問題
當(dāng)mobile-ffmpeg和unity一起使用的時(shí)候會(huì)產(chǎn)生類似這樣的錯(cuò)誤:
`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:`
這個(gè)問題在issue里面作者有過回復(fù)稱在4.4版本已經(jīng)修復(fù)了免都,有興趣深入了解的朋友點(diǎn)擊這里咨油。
解決辦法就是將你的mobile-ffmpeg升級(jí)到4.4+版本并且在應(yīng)用初始化的時(shí)候加入以下代碼:
Config.ignoreSignal(Signal.SIGXCPU);
大致意思就是因?yàn)閁nity在內(nèi)部使用Mono框架,而Mono在內(nèi)部將SIGXCPU用于GC,解決方案是忽略SIGPWR和SIGXCPU信號(hào)蛮放。由于時(shí)間比較急沒有去仔細(xì)研究底層的原理,若有明白其中原理的大佬還望給出您寶貴的回復(fù),感激不盡~