我在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);
}