Firefly开源社区

标题: MediaCodec解码偶尔会异常导致视频流卡死问题 [打印本页]

作者: ChineseBoy    时间: 2016-10-9 16:55
标题: 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:05
本帖最后由 jingjin221 于 2016-10-12 09:06 编辑

请确定是卡在哪一步了?看代码,应该是卡在获取解码输入缓冲区那里了,dequeueInputBuffer的TIMEOUT不要设置成-1,宁可丢帧也不能一直在那里等待,设置成0或者一个具体时间!
作者: ChineseBoy    时间: 2016-10-17 15:25
jingjin221 发表于 2016-10-12 09:05
请确定是卡在哪一步了?看代码,应该是卡在获取解码输入缓冲区那里了,dequeueInputBuffer的TIMEOUT不要设 ...

设置为0或者其他都是一样的结果
作者: ChineseBoy    时间: 2016-10-17 15:25
jingjin221 发表于 2016-10-12 09:05
请确定是卡在哪一步了?看代码,应该是卡在获取解码输入缓冲区那里了,dequeueInputBuffer的TIMEOUT不要设 ...

设置为0或者其他都是一样的结果
作者: ChineseBoy    时间: 2016-10-17 15:25
jingjin221 发表于 2016-10-12 09:05
请确定是卡在哪一步了?看代码,应该是卡在获取解码输入缓冲区那里了,dequeueInputBuffer的TIMEOUT不要设 ...

设置为0或者其他都是一样的结果
作者: ChineseBoy    时间: 2016-10-17 15:25
jingjin221 发表于 2016-10-12 09:05
请确定是卡在哪一步了?看代码,应该是卡在获取解码输入缓冲区那里了,dequeueInputBuffer的TIMEOUT不要设 ...

设置为0或者其他都是一样的结果
作者: ChineseBoy    时间: 2016-10-17 15:25
jingjin221 发表于 2016-10-12 09:05
请确定是卡在哪一步了?看代码,应该是卡在获取解码输入缓冲区那里了,dequeueInputBuffer的TIMEOUT不要设 ...

设置为0或者其他都是一样的结果
作者: ChineseBoy    时间: 2016-10-17 15:25
jingjin221 发表于 2016-10-12 09:05
请确定是卡在哪一步了?看代码,应该是卡在获取解码输入缓冲区那里了,dequeueInputBuffer的TIMEOUT不要设 ...

设置为0或者其他都是一样的结果
作者: ChineseBoy    时间: 2016-10-17 15:25
jingjin221 发表于 2016-10-12 09:05
请确定是卡在哪一步了?看代码,应该是卡在获取解码输入缓冲区那里了,dequeueInputBuffer的TIMEOUT不要设 ...

设置为0或者其他都是一样的结果
作者: ChineseBoy    时间: 2016-10-17 15:25
jingjin221 发表于 2016-10-12 09:05
请确定是卡在哪一步了?看代码,应该是卡在获取解码输入缓冲区那里了,dequeueInputBuffer的TIMEOUT不要设 ...

设置为0或者其他都是一样的结果
作者: ChineseBoy    时间: 2016-10-17 15:25
jingjin221 发表于 2016-10-12 09:05
请确定是卡在哪一步了?看代码,应该是卡在获取解码输入缓冲区那里了,dequeueInputBuffer的TIMEOUT不要设 ...

设置为0或者其他都是一样的结果
作者: ChineseBoy    时间: 2016-10-17 15:25
jingjin221 发表于 2016-10-12 09:05
请确定是卡在哪一步了?看代码,应该是卡在获取解码输入缓冲区那里了,dequeueInputBuffer的TIMEOUT不要设 ...

设置为0或者其他都是一样的结果
作者: ChineseBoy    时间: 2016-10-17 15:25
jingjin221 发表于 2016-10-12 09:05
请确定是卡在哪一步了?看代码,应该是卡在获取解码输入缓冲区那里了,dequeueInputBuffer的TIMEOUT不要设 ...

设置为0或者其他都是一样的结果
作者: ChineseBoy    时间: 2016-10-17 15:25
jingjin221 发表于 2016-10-12 09:05
请确定是卡在哪一步了?看代码,应该是卡在获取解码输入缓冲区那里了,dequeueInputBuffer的TIMEOUT不要设 ...

设置为0或者其他都是一样的结果
作者: ChineseBoy    时间: 2016-10-17 15:25
jingjin221 发表于 2016-10-12 09:05
请确定是卡在哪一步了?看代码,应该是卡在获取解码输入缓冲区那里了,dequeueInputBuffer的TIMEOUT不要设 ...

设置为0或者其他都是一样的结果
作者: ChineseBoy    时间: 2016-10-17 15:25
jingjin221 发表于 2016-10-12 09:05
请确定是卡在哪一步了?看代码,应该是卡在获取解码输入缓冲区那里了,dequeueInputBuffer的TIMEOUT不要设 ...

设置为0或者其他都是一样的结果
作者: ChineseBoy    时间: 2016-10-17 15:25
jingjin221 发表于 2016-10-12 09:05
请确定是卡在哪一步了?看代码,应该是卡在获取解码输入缓冲区那里了,dequeueInputBuffer的TIMEOUT不要设 ...

设置为0或者其他都是一样的结果
作者: ChineseBoy    时间: 2016-10-17 15:25
jingjin221 发表于 2016-10-12 09:05
请确定是卡在哪一步了?看代码,应该是卡在获取解码输入缓冲区那里了,dequeueInputBuffer的TIMEOUT不要设 ...

设置为0或者其他都是一样的结果
作者: ChineseBoy    时间: 2016-10-17 15:25
jingjin221 发表于 2016-10-12 09:05
请确定是卡在哪一步了?看代码,应该是卡在获取解码输入缓冲区那里了,dequeueInputBuffer的TIMEOUT不要设 ...

设置为0或者其他都是一样的结果
作者: ChineseBoy    时间: 2016-10-17 15:25
jingjin221 发表于 2016-10-12 09:05
请确定是卡在哪一步了?看代码,应该是卡在获取解码输入缓冲区那里了,dequeueInputBuffer的TIMEOUT不要设 ...

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




欢迎光临 Firefly开源社区 (https://dev.t-firefly.com/) Powered by Discuz! X3.1