前言
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)
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?