上一篇博文介绍了如何用MediaCodec进行aac编码,这篇介绍如何解码,在解码上要注意的点是解码时要一帧一帧的喂给解码器而且得带adts头,另外要将头一帧的两个特殊字节用来对解码器进行配置,解码出来就是pcm编码的音频数据了,可以直接将pcm数据写进AudioTrack进行播放。
/**
* @author zhangsutao
* @file AudioDecoder
* @brief aac音频解码播放器
* @date 2016/8/7
*/
public class AudioDecoder implements AudioCodec{
private static final String TAG ="AudioDecoder";
private Worker mWorker;
private Server mServer;
private byte[] mPcmData;
public AudioDecoder(Server server) throws DecoderServerNullException {
if (server==null){
throw new DecoderServerNullException();
}
mServer=server;
}
public void start(){
if(mWorker==null){
mWorker=new Worker();
mWorker.setRunning(true);
mWorker.start();
}
}
public void stop(){
if(mWorker!=null){
mWorker.setRunning(false);
mWorker=null;
}
if(mServer!=null){
if(!mServer.hasRelease()){
mServer.release();
}
}
}
private class Worker extends Thread{
private boolean isRunning=false;
private AudioTrack mPlayer;
private MediaCodec mDecoder;
MediaCodec.BufferInfo