MediaCodec解码偶尔会异常导致视频流卡死问题

使用Rk3288 pro的板子对取得的rtsp流使用MediaCodec硬解码偶尔会异常导致视频流卡死问题,求大神解决。。。
init如下:
MediaFormat mediaFormat = MediaFormat.createVideoFormat(mMime,mWidth,mHeight);
mMediaCodec = MediaCodec.createDecoderByType(mMime);
if (mMediaCodec == null) {
return false;
}
mMediaCodec.configure(mediaFormat, mSurface, null, 0);
mMediaCodec.start();

decode如下:
ByteBuffer inputBuffers = mMediaCodec.getInputBuffers();
// int inputBufferIndex = mMediaCodec.dequeueInputBuffer(-1);
int inputBufferIndex = mMediaCodec.dequeueInputBuffer(0);
if (inputBufferIndex >= 0) {
ByteBuffer inputBuffer = inputBuffers[inputBufferIndex];
inputBuffer.clear();
inputBuffer.put(input,0,length);
mMediaCodec.queueInputBuffer(inputBufferIndex, 0, length, 0, 0);
}
MediaCodec.BufferInfo bufferInfo = new MediaCodec.BufferInfo();
int outputBufferIndex = mMediaCodec.dequeueOutputBuffer(bufferInfo,0);
while (outputBufferIndex >= 0) {
mMediaCodec.releaseOutputBuffer(outputBufferIndex, true);
outputBufferIndex = mMediaCodec.dequeueOutputBuffer(bufferInfo, 0);
}
望大家一起讨论解决!

本帖最后由 jingjin221 于 2016-10-12 09:06 编辑

请确定是卡在哪一步了?看代码,应该是卡在获取解码输入缓冲区那里了,dequeueInputBuffer的TIMEOUT不要设置成-1,宁可丢帧也不能一直在那里等待,设置成0或者一个具体时间!

jingjin221 发表于 2016-10-12 09:05
请确定是卡在哪一步了?看代码,应该是卡在获取解码输入缓冲区那里了,dequeueInputBuffer的TIMEOUT不要设 …

设置为0或者其他都是一样的结果

jingjin221 发表于 2016-10-12 09:05
请确定是卡在哪一步了?看代码,应该是卡在获取解码输入缓冲区那里了,dequeueInputBuffer的TIMEOUT不要设 …

设置为0或者其他都是一样的结果

jingjin221 发表于 2016-10-12 09:05
请确定是卡在哪一步了?看代码,应该是卡在获取解码输入缓冲区那里了,dequeueInputBuffer的TIMEOUT不要设 …

设置为0或者其他都是一样的结果

jingjin221 发表于 2016-10-12 09:05
请确定是卡在哪一步了?看代码,应该是卡在获取解码输入缓冲区那里了,dequeueInputBuffer的TIMEOUT不要设 …

设置为0或者其他都是一样的结果

jingjin221 发表于 2016-10-12 09:05
请确定是卡在哪一步了?看代码,应该是卡在获取解码输入缓冲区那里了,dequeueInputBuffer的TIMEOUT不要设 …

设置为0或者其他都是一样的结果

jingjin221 发表于 2016-10-12 09:05
请确定是卡在哪一步了?看代码,应该是卡在获取解码输入缓冲区那里了,dequeueInputBuffer的TIMEOUT不要设 …

设置为0或者其他都是一样的结果

jingjin221 发表于 2016-10-12 09:05
请确定是卡在哪一步了?看代码,应该是卡在获取解码输入缓冲区那里了,dequeueInputBuffer的TIMEOUT不要设 …

设置为0或者其他都是一样的结果

jingjin221 发表于 2016-10-12 09:05
请确定是卡在哪一步了?看代码,应该是卡在获取解码输入缓冲区那里了,dequeueInputBuffer的TIMEOUT不要设 …

设置为0或者其他都是一样的结果

jingjin221 发表于 2016-10-12 09:05
请确定是卡在哪一步了?看代码,应该是卡在获取解码输入缓冲区那里了,dequeueInputBuffer的TIMEOUT不要设 …

设置为0或者其他都是一样的结果

jingjin221 发表于 2016-10-12 09:05
请确定是卡在哪一步了?看代码,应该是卡在获取解码输入缓冲区那里了,dequeueInputBuffer的TIMEOUT不要设 …

设置为0或者其他都是一样的结果

jingjin221 发表于 2016-10-12 09:05
请确定是卡在哪一步了?看代码,应该是卡在获取解码输入缓冲区那里了,dequeueInputBuffer的TIMEOUT不要设 …

设置为0或者其他都是一样的结果

jingjin221 发表于 2016-10-12 09:05
请确定是卡在哪一步了?看代码,应该是卡在获取解码输入缓冲区那里了,dequeueInputBuffer的TIMEOUT不要设 …

设置为0或者其他都是一样的结果

jingjin221 发表于 2016-10-12 09:05
请确定是卡在哪一步了?看代码,应该是卡在获取解码输入缓冲区那里了,dequeueInputBuffer的TIMEOUT不要设 …

设置为0或者其他都是一样的结果

jingjin221 发表于 2016-10-12 09:05
请确定是卡在哪一步了?看代码,应该是卡在获取解码输入缓冲区那里了,dequeueInputBuffer的TIMEOUT不要设 …

设置为0或者其他都是一样的结果

jingjin221 发表于 2016-10-12 09:05
请确定是卡在哪一步了?看代码,应该是卡在获取解码输入缓冲区那里了,dequeueInputBuffer的TIMEOUT不要设 …

设置为0或者其他都是一样的结果

jingjin221 发表于 2016-10-12 09:05
请确定是卡在哪一步了?看代码,应该是卡在获取解码输入缓冲区那里了,dequeueInputBuffer的TIMEOUT不要设 …

设置为0或者其他都是一样的结果

jingjin221 发表于 2016-10-12 09:05
请确定是卡在哪一步了?看代码,应该是卡在获取解码输入缓冲区那里了,dequeueInputBuffer的TIMEOUT不要设 …

设置为0或者其他都是一样的结果

jingjin221 发表于 2016-10-12 09:05
请确定是卡在哪一步了?看代码,应该是卡在获取解码输入缓冲区那里了,dequeueInputBuffer的TIMEOUT不要设 …

设置为0或者其他都是一样的结果