Andrdoid MediaCodec OutputBuffer方法

时间:2015-04-23 09:23:45

标签: android mediacodec

我在Android上使用Mediacodec进行H264流解码。 原始数据流由一系列NAL单元组成。 视频中的每个帧(640 * 480)在流中分为四个部分。

每次我将缓冲区(一个NAL单元)发送到Mediacodec Decoder并等待输出缓冲区。

事实证明,输出缓冲区容量与YUV帧一样大,但是出现的输出缓冲区数量几乎是帧数的四倍.I 猜输出缓冲区只返回解码结果的1/4。如果是这样,我怎样才能得到连续的YUV帧数据?

public void setDataToDecoder(byte[] videoBuffer,int size,int id){
        Log.e("Decoder","-----------"+id);
        inputBufferIndex = mediaCodec.dequeueInputBuffer(-1);
        //Log.e("Decoder","InputIndex "+inputBufferIndex);
        if(inputBufferIndex>=0){
            ByteBuffer inputBuffer=inputBuffers[inputBufferIndex];
            inputBuffer.clear();
            inputBuffer.put(videoBuffer,0,size);
            mediaCodec.queueInputBuffer(inputBufferIndex, 0, size, timeStamp, 0);
            timeStamp++;
        }
        BufferInfo bufferInfo = new BufferInfo();
        outputBufferIndex = mediaCodec.dequeueOutputBuffer(bufferInfo, 0);
        while(outputBufferIndex>=0){
            ByteBuffer outputData=outputBuffers[outputBufferIndex];
            if(bufferInfo.size!=0){
                outputData.position(bufferInfo.offset);
                outputData.limit(bufferInfo.offset+bufferInfo.size);
                Log.e("P","oooo"+outputData.position());
                Log.e("P","oooo"+outputData.limit());
            }
            int tmp;
            if(FrameCt<=20){
                try {
                    tmp = fc.write(outputData);
                    Log.e("P",""+tmp);
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            FrameCt++;
            mediaCodec.releaseOutputBuffer(outputBufferIndex, false);
            outputBufferIndex = mediaCodec.dequeueOutputBuffer(bufferInfo, 0);
        }
        Log.e("Decoder","-----------"+id);
    }

0 个答案:

没有答案