android 平台播放MP4视频崩溃问题

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为空。

Hi,

从堆栈来看,好像是第三方库的问题,请问这个是你们自己接的播放器吗?我好像搜了一下引擎没有使用FFMpeg播放视频。内部因为版本太久了,已经搜不到UE4相关的问题了,所以也不知道我们是否见过类似的问题,抱歉。

你好, 我们没有使用第三方播放软件,使用的是 UE4 默认的 AndroidMediaPlayer,

[Image Removed] 这里的崩溃线程应该是在AndroidMediaPlayer里启动的 , logcat的崩溃 日志 如下

[Image Removed] 这里面的FFmpegExtractor 应该是由oppo手机android系统的播放器调进去的,

vivo手机也会崩溃在同样的栈,但是使用的MPEG4Extractor

[Image Removed]

好的,还有几个问题想问一下:

  1. 是否在其他android系统的设备上也有类似的崩溃,还是只在android8及一下的设备有问题?
  2. 视频是打包进pak里,还是放在外部?
  3. 能否用新版本的引擎比如UE5.5测试一下,看看是否也有类似的问题?

我查阅了一下android media player相关的代码,没有看到针对特殊android系统做的修改,不确定是否是这些系统的功能有什么问题。麻烦先用新的引擎版本测试一下,谢谢。