android 平台播放MP4视频崩溃问题 , 目前发现的崩溃机型是 oppo, vivo, 系统版本 android8 及以下,
崩溃不是必现,同样的视频有时崩溃,有时不崩,感觉和视频本身没有关系
崩溃栈如下:
05-26 17:21:10.724 19557 19557 I crash_dump64: obtaining output fd from tombstoned, type: kDebuggerdTombstone
05-26 17:21:10.729 1209 1209 I /system/bin/tombstoned: received crash request for pid 11761
05-26 17:21:10.733 19557 19557 I crash_dump64: performing dump of process 11761 (target tid = 19503)
05-26 17:21:10.735 19557 19557 F DEBUG : *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
05-26 17:21:10.735 19557 19557 F DEBUG : Build fingerprint: ‘OPPO/R11s/R11s:8.1.0/OPM1.171019.011/1577198226:user/release-keys’
05-26 17:21:10.735 19557 19557 F DEBUG : Revision: ‘0’
05-26 17:21:10.735 19557 19557 F DEBUG : ABI: ‘arm64’
05-26 17:21:10.735 19557 19557 F DEBUG : pid: 11761, tid: 19503, name: FFmpegExtractor >>> com.game.coo <<<
05-26 17:21:10.735 19557 19557 F DEBUG : signal 11 (SIGSEGV), code -6 (SI_TKILL), fault addr --------
05-26 17:21:10.735 19557 19557 F DEBUG : x0 0000000000000000 x1 0000000000002986 x2 0000007e2a8ad4a8 x3 0000007dee45edc0
05-26 17:21:10.735 19557 19557 F DEBUG : x4 0000000000002952 x5 0000000000000000 x6 0000000000008000 x7 69e2f01f75259a6a
05-26 17:21:10.735 19557 19557 F DEBUG : x8 0000007dee45edc0 x9 0000007dee45ee30 x10 0000007dee45ede8 x11 0000007dee45ed90
05-26 17:21:10.735 19557 19557 F DEBUG : x12 524a1b931873b23c x13 0000000000000000 x14 0000000000008000 x15 0000000000010000
05-26 17:21:10.735 19557 19557 F DEBUG : x16 0000007e248386a0 x17 0000007eae294c24 x18 0000007df33d94a5 x19 0000007dee45f588
05-26 17:21:10.735 19557 19557 F DEBUG : x20 0000007de5b8b0a0 x21 0000000000000000 x22 0000000000008030 x23 0000000000008000
05-26 17:21:10.735 19557 19557 F DEBUG : x24 0000000000008000 x25 0000007eb0221218 x26 0000007e24834730 x27 0000007de5b8b0a0
05-26 17:21:10.735 19557 19557 F DEBUG : x28 0000000000008000 x29 0000007dee45ee20 x30 0000007e247f64fc
05-26 17:21:10.735 19557 19557 F DEBUG : sp 0000007dee45ed00 pc 0000007e247f6694 pstate 0000000080000000
05-26 17:21:10.780 19557 19557 F DEBUG :
05-26 17:21:10.780 19557 19557 F DEBUG : backtrace:
05-26 17:21:10.780 19557 19557 F DEBUG : #00 pc 0000000000037694 /system/lib64/libmedia_jni.so (_JNIEnv::CallIntMethod(_jobject*, _jmethodID*, …)+100)
05-26 17:21:10.780 19557 19557 F DEBUG : #01 pc 00000000000374f8 /system/lib64/libmedia_jni.so (android::JMediaDataSource::readAt(long, unsigned long)+100)
05-26 17:21:10.780 19557 19557 F DEBUG : #02 pc 0000000000174b20 /system/lib64/libstagefright.so (android::CallbackDataSource::readAt(long, void*, unsigned long)+184)
05-26 17:21:10.780 19557 19557 F DEBUG : #03 pc 0000000000005a0c /system/lib64/libffmpeg_utils.so (android::android_read(URLContext*, unsigned char*, int)+44)
05-26 17:21:10.780 19557 19557 F DEBUG : #04 pc 0000000000058a70 /system/lib64/libavformat.so (ffurl_read+132)
05-26 17:21:10.780 19557 19557 F DEBUG : #05 pc 0000000000059f10 /system/lib64/libavformat.so (fill_buffer+340)
05-26 17:21:10.780 19557 19557 F DEBUG : #06 pc 000000000005b0b0 /system/lib64/libavformat.so (avio_read+116)
05-26 17:21:10.780 19557 19557 F DEBUG : #07 pc 0000000000160dac /system/lib64/libavformat.so (append_packet_chunked+148)
05-26 17:21:10.780 19557 19557 F DEBUG : #08 pc 00000000000c02ec /system/lib64/libavformat.so (mov_read_packet+260)
05-26 17:21:10.780 19557 19557 F DEBUG : #09 pc 0000000000161b74 /system/lib64/libavformat.so (ff_read_packet+200)
05-26 17:21:10.781 19557 19557 F DEBUG : #10 pc 0000000000163164 /system/lib64/libavformat.so (read_frame_internal+116)
05-26 17:21:10.781 19557 19557 F DEBUG : #11 pc 0000000000162d68 /system/lib64/libavformat.so (av_read_frame+472)
05-26 17:21:10.781 19557 19557 F DEBUG : #12 pc 0000000000011e48 /system/lib64/libffmpeg_extractor.so (android::FFmpegExtractor::readerEntry()+264)
05-26 17:21:10.781 19557 19557 F DEBUG : #13 pc 0000000000011d30 /system/lib64/libffmpeg_extractor.so (android::FFmpegExtractor::ReaderWrapper(void*)+8)
05-26 17:21:10.781 19557 19557 F DEBUG : #14 pc 0000000000074d74 /system/lib64/libc.so (__pthread_start(void*)+36)
05-26 17:21:10.781 19557 19557 F DEBUG : #15 pc 000000000001fce4 /system/lib64/libc.so (__start_thread+68)
崩溃在FFmpegExtractor 线程, 上面显x0 寄存器为空,应该是this指针为空, 我们找到了 ssize_t JMediaDataSource::readAt(off64_t offset, size_t size) 的函数代码,应该是 JNIEnv* env = AndroidRuntime::getJNIEnv(); 这里获取的env为空。