上一篇博文介绍了如何用MediaCodec进行h264编码,这篇介绍如何用MediaCodec进行h264解码,解码时要注意的点就是要一帧一帧的喂给解码器,编码器是一帧一帧出数据的,网上有些demo居然拿一个定长的数组取数据喂给编码器(奇怪的是他居然说可以),还有就是要将sps和pps配置给解码器。另外MediaCodec可以将解码后的数据直接输出到一个Surface显示出来,我就是用一个SurfaceView来显示图像的
/**
* @author zhangsutao
* @file filename
* @brief 一帧的封装
* @date 2016/8/11
*/
public class Frame {
public byte[] mData;
public int offset;
public int length;
public Frame(byte[] data,int offset,int size){
mData=data;
this.offset=offset;
this.length=size;
}
public void setFrame(byte[] data,int offset,int size){
mData=data;
this.offset=offset;
this.length=size;
}
}
/**
* @author zhangsutao
* @file VideoDecoder
* @brief h264视频解码器
* @date 2016/7/29
*/
public class VideoDecoder implements VideoCodec{
private Surface mSurface;
private static final int TYPE_SPS=7;
private static final int TYPE_PPS=8;
private static final int TYPE_FRAME_DATA=5;
private static final int NO_FRAME_DATA=-1;
private final int TIMEOUT_US=10000;
private static final String TAG="VideoDecoder";
private Server mServer;
private Worker mWorker;
private byte[] mS