Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

android5.0-6.0播放视频时有几率崩溃 #38

Closed
lewis-v opened this issue Dec 18, 2020 · 9 comments
Closed

android5.0-6.0播放视频时有几率崩溃 #38

lewis-v opened this issue Dec 18, 2020 · 9 comments

Comments

@lewis-v
Copy link

lewis-v commented Dec 18, 2020

5.0-6.0都有出现:
1 #00 pc 0003bb3c /system/lib/libc.so (tgkill+12) [armeabi-v7a]
2 #1 pc 000177f9 /system/lib/libc.so (pthread_kill+52) [armeabi-v7a]
3 #2 pc 00018403 /system/lib/libc.so (raise+10) [armeabi-v7a]
4 #3 pc 00014c37 /system/lib/libc.so (__libc_android_abort+34) [armeabi-v7a]
5 #4 pc 00013020 /system/lib/libc.so (abort+4) [armeabi-v7a]
6 #5 pc 00008595 /system/lib/libcutils.so (__android_log_assert+88) [armeabi-v8]
7 #6 pc 000d248d /system/lib/libstagefright.so (android::NuMediaExtractor::selectTrack(unsigned int)+296) [armeabi-v8]
8 #7 pc 0001d835 /system/lib/libmedia_jni.so [armeabi-v8]
9 #8 pc 001167d3 /data/dalvik-cache/arm/system@framework@boot.oat [armeabi]
10 java:
11 com.tencent.qgame.animplayer.HardDecoder.void startPlay(com.tencent.qgame.animplayer.FileContainer)(SourceFile:9106)
12 ##parent##1##parent##
13 ##child## void access$startPlay(com.tencent.qgame.animplayer.HardDecoder,com.tencent.qgame.animplayer.FileContainer)##child##
14 com.tencent.qgame.animplayer.HardDecoder$start$1.void run()(SourceFile:62)
15 android.os.Handler.handleCallback(Handler.java:815)
16 android.os.Handler.dispatchMessage(Handler.java:104)
17 android.os.Looper.loop(Looper.java:192)
18 android.os.HandlerThread.run(HandlerThread.java:61)

只在5.1.1出现的:
1 #00 pc 00095640 /system/lib/libstagefright.so (android::NuMediaExtractor::~NuMediaExtractor()+59) [armeabi-v7a]
2 #1 pc 000956d9 /system/lib/libstagefright.so (android::NuMediaExtractor::~NuMediaExtractor()+4) [armeabi-v7a]
3 #2 pc 0000d68d /system/lib/libutils.so (android::RefBase::decStrong(void const*) const+40) [armeabi-v7a]
4 #3 pc 0001a64f /system/lib/libmedia_jni.so (android::JMediaExtractor::~JMediaExtractor()+58) [armeabi-v7a]
5 #4 pc 0001a669 /system/lib/libmedia_jni.so (android::JMediaExtractor::~JMediaExtractor()+4) [armeabi-v7a]
6 #5 pc 0000d68d /system/lib/libutils.so (android::RefBase::decStrong(void const*) const+40) [armeabi-v7a]
7 #6 pc 00014c43 /system/lib/libmedia_jni.so (android::spandroid::JCrypto::~sp()+10) [armeabi-v7a]
8 #7 pc 0001af11 /system/lib/libmedia_jni.so [armeabi-v7a]
9 #8 pc 000003df /system/framework/arm/boot.oat [armeabi]
10 java:
11 com.tencent.qgame.animplayer.HardDecoder$release$1.void run()(SourceFile:273)
12 android.os.Handler.handleCallback(Handler.java:739)
13 android.os.Handler.dispatchMessage(Handler.java:95)
14 android.os.Looper.loop(Looper.java:135)
15 android.os.HandlerThread.run(HandlerThread.java:61)

其中5.1.1的那个从日志中看是在selectVideoTrack返回小于0去进行释放工作导致的
总的看起来崩溃都是和selectVideoTrack相关

@hexleo
Copy link
Collaborator

hexleo commented Dec 19, 2020

这里MediaExtractor低版本确实有兼容问题,这个我想办法解决。这里你先检查一下,有没有校验文件的md5,遇到很多问题是上传服务器后,mp4被服务器修改导致文件有问题。我们的vap工具输出的时候有原始的md5,不要用服务器的hash进行校验。或者你升级到2.0.11试试,看看能不能避免这个问题。

@lewis-v
Copy link
Author

lewis-v commented Dec 19, 2020

使用的动效视频是本地资源,而且日志上看是一开始是播放正常的,但是播放多几次就出问题了(同一个View)

@hexleo
Copy link
Collaborator

hexleo commented Dec 21, 2020

素材是h264的还是h265的

@lewis-v
Copy link
Author

lewis-v commented Dec 21, 2020

h264的
这个是用ffmpeg输出的信息
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf58.29.100
Duration: 00:00:10.00, start: 0.000000, bitrate: 1872 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 736x912, 1871 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (default)
Metadata:
handler_name : VideoHandler

@hexleo
Copy link
Collaborator

hexleo commented Dec 21, 2020

你用的是哪个版本?我这代码行数对不上

@hexleo
Copy link
Collaborator

hexleo commented Dec 21, 2020

先记录下当前结论:
播放接口:fun startPlay(assetManager: AssetManager, assetsPath: String)

这里应该MediaExtractor的兼容问题,目前想到的解决方法是手动实现mp4封装,但工作量比较大,手动实现mp4解封装需要充分测试

@lewis-v
Copy link
Author

lewis-v commented Dec 21, 2020

对应2.0.9的HardDecoder的228
private fun release(decoder: MediaCodec?, extractor: MediaExtractor?) {
renderThread.handler?.post {
render?.clearFrame()
try {
ALog.i(TAG, "release")
decoder?.apply {
stop()
release()
}
extractor?.release()//这里。。。。。
glTexture?.release()
glTexture = null
speedControlUtil.reset()
player.pluginManager.onRelease()
render?.releaseTexture()
} catch (e: Throwable) {
ALog.e(TAG, "release e=$e", e)
}
isRunning = false
onVideoComplete()
if (needDestroy) {
destroyInner()
}
}
}

@luohong
Copy link

luohong commented Mar 5, 2021

荣耀 BND AL10 Android 8.0.0,level 26,VAP V2.0.13 遇到了同样的问题。出错堆栈:

1 #00 pc 0004b97c /system/lib/libc.so (tgkill+12) [armeabi-v7a]
2 #1 pc 0001a4e3 /system/lib/libc.so (abort+54) [armeabi-v7a]
3 #2 pc 000c29df /system/lib/libstagefright.so (android::MPEG4Extractor::parseChunk(long long*, int)+13962) [armeabi-v7a]
4 #3 pc 000c097b /system/lib/libstagefright.so (android::MPEG4Extractor::parseChunk(long long*, int)+5670) [armeabi-v7a]
5 #4 pc 000c097b /system/lib/libstagefright.so (android::MPEG4Extractor::parseChunk(long long*, int)+5670) [armeabi-v7a]
6 #5 pc 000c097b /system/lib/libstagefright.so (android::MPEG4Extractor::parseChunk(long long*, int)+5670) [armeabi-v7a]
7 #6 pc 000bef03 /system/lib/libstagefright.so (android::MPEG4Extractor::readMetaData()+98) [armeabi-v7a]
8 #7 pc 000bf12d /system/lib/libstagefright.so (android::MPEG4Extractor::countTracks()+4) [armeabi-v7a]
9 #8 pc 000e6f63 /system/lib/libstagefright.so (android::MediaExtractor::CreateFromService(android::spandroid::DataSource const&, char const*, unsigned int)+1066) [armeabi-v7a]
10 #9 pc 000e6a55 /system/lib/libstagefright.so (android::MediaExtractor::Create(android::spandroid::DataSource const&, char const*)+228) [armeabi-v7a]
11 #10 pc 000ee77f /system/lib/libstagefright.so (android::NuMediaExtractor::setDataSource(int, long long, long long)+142) [armeabi-v7a]
12 #11 pc 0002a5e3 /system/lib/libmedia_jni.so [armeabi-v7a]
13 #12 pc 0067df5f /system/framework/arm/boot-framework.oat (oatexec+6807391) [armeabi]
14 java:
15 com.tencent.qgame.animplayer.FileContainer.setDataSource(FileContainer.kt:5)
16 com.tencent.qgame.animplayer.util.MediaUtil.getExtractor(MediaUtil.kt:2)
17 com.tencent.qgame.animplayer.AudioPlayer.startPlay(AudioPlayer.kt:1)
18 com.tencent.qgame.animplayer.AudioPlayer.access$startPlay(AudioPlayer.kt:1)
19 com.tencent.qgame.animplayer.AudioPlayer$start$1.run(AudioPlayer.kt:1)
20 android.os.Handler.handleCallback(Handler.java:808)

@lewis-v
Copy link
Author

lewis-v commented Mar 5, 2021

是使用asset的方式播放的问题,使用File的方式播放就好了

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants