前言
AAC音频数据格式是一个很常见的音频压缩编码数据格式,经常会有这样的需求,通过麦克风采集到的PCM格式音频数据,编码为AAC格式音频数据,然后通过网络发给另一端,网络的另一端接收到AAC格式音频数据后,解码为PCM格式音频数据。本文将介绍用AudioToobox框架实现音频的编解码
AAC数据格式封装格式ADTS解析原始音频编码后形成的裸的AAC数据是无法直接解码的,一般会在前面添加能够描述音频信息(如采样率,采样格式,声道数)的头部信息,常见的有ADTS封装格式,如下: (ADTS头部)(压缩的AAC音频数据) ADTS头部 它描述了音频的采样率,采样格式,声道数等信息;具体格式参考如下网站:http://wiki.multimedia.cx/index.php?title=ADTShttp://wiki.multimedia.cx/index.php?title=MPEG-4_Audio#Channel_Configurations 下面是由压缩的AAC数据长度/声道数,采样率为44.1kHz生成ADTS头部的代码:
- (NSData *)getADTSDataWithPacketLength:(NSInteger)packetLength channel:(int)channel
{
int adtsLength = 7;
char *packet = malloc(sizeof(char) * adtsLength);
// Variables Recycled by addADTStoPacket
int profile = 2; //AAC LC 编码压缩级别
int freqIdx = 4; //44.1KHz // 采样率
int chanCfg = channel; // 声道数
NSUInteger fullLength = adtsLength + packetLength;
// fill in ADTS data
packet[0] = (char)0xFF; // 11111111 = syncword
packet[1] = (char)0xF9; // 1111 1 00 1 = syncword MPEG-2 Layer CRC
// packet[1] = (char)0xF1; // 1111 0 00 1 = syncword MPEG-4 Layer CRC
packet[2] = (char)(((profile-1) 3);
packet[5] = (char)(((fullLength&7)
关注
打赏