base64解密,可以看到关键错误:
signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00000018
#00 pc 0x719c0 /system/lib/libstagefright.so (???)
#01 pc 0xa020b /system/lib/libstagefright.so (???)
#02 pc 0x9ffe3 /system/lib/libstagefright.so (android::MediaCodec::~MediaCodec()+138)
#03 pc 0xa027d /system/lib/libstagefright.so (android::MediaCodec::~MediaCodec()+4)
#04 pc 0xe7c7 /system/lib/libutils.so (android::RefBase::decStrong(void const*) const+50)
#05 pc 0xa1577 /system/lib/libstagefright.so (android::MediaCodec::renderOutputBufferAndRelease(unsigned int)+66)
#06 pc 0x1d5e1 /system/lib/libmedia_jni.so (???)
#07 pc 0xbcae75 /system/framework/arm/boot.oat (???)
关键在libstagefright.so这个so出错,定位到android::MediaCodec::renderOutputBufferAndRelease(unsigned int)+66
该函数是用于设置视频渲染
status_t MediaCodec::renderOutputBufferAndRelease(size_t index, int64_t timestampNs) {
sp<AMessage> msg = new AMessage(kWhatReleaseOutputBuffer, this);//发送消息
msg->setSize("index", index);
msg->setInt32("render", true);//设置是否渲染
msg->setInt64("timestampNs", timestampNs);//timestampNs
sp<AMessage> response;
return PostAndAwaitResponse(msg, &response);
}
再找到函数
// static
status_tMediaCodec::PostAndAwaitResponse(const sp<AMessage>&msg, sp<AMessage>*response){
status_t err = msg->postAndAwaitResponse(response);
if(err != OK){
return err;
}
if(!(*response)->findInt32("err",&err)){
err = OK;
}
return err;
}
定位到错误,但是由于没有更多信息以及没有真机继续调试,这边只能通过崩溃大概率猜测,可能是因为判断视频渲染问题,因为常常卡死嘛,也有可能是选择了软件渲染,导致CPU占用过多,是不是可以在手机里设置硬件加速之类的……
以上,大多都是猜测,也可能完全不对……具体实验和调试还是需要楼主自己看吧