转自http://blog.csdn.net/leixiaohua1020/article/details/50535042?locationNum=3&fps=1
获取ADTS帧,根据buf的大小比7字节还小,返回错误-1.先判断同步字(两个字节)是否为前12位全为1.帧的大小(包括13位)包含帧头部。如果分配的buffer大小小于帧的大小返回1,如果分配的buffer大小大于帧的大小,把buffer里面大小为Size的内容拷贝到data.并把帧的大小值赋给data_size.
##############################
buffer:存储的是音频文件
buf_size:读取到的音频文件的大小
data:存储帧的实际数据
data_size:实际帧的大小
###############################
解析acc格式的音频文件,先打开音频文件,分配大小为1024*1024字节的buffer大小,大小为1024*5字节的帧区大小。
循环读取文件,从文件中一帧一帧地读取数据。这里offset为0,也就是把音频文件拷贝到分配的1024*1024的buffer,并把读取到的字节数赋给data_size,读取到并定义指针input_data指向这个分配的空间。
然后从input_data指针指向的内容中获取一帧数据存到accframe中,而size存储的是帧数据的大小。每获取一帧数据,偏移值就会增加。如果ret为-1表示得到的帧小于7字节,如果为1表示读取到的文件大小小于一帧的大小也会退出。其他情况下每编辑完一帧把读取到的文件大小减去读取到的帧大小,而指向文件指针从文件头向后移动。
由于accframe数组是char型,因而每个元素是1个字节,现在根据第三个元素查看profile的类型,关于acc音频格式可以参考http://blog.csdn.net/qingkongyeyue/article/details/53120453
这里取的是第三个字节的高两位,移到最低两位,然后根据不同的值进行判断不同编码规格进行判断,AAC-LC是低复杂度的AAC
相应的还有AAC-HE(高效率的)
同等音频,音频文件体积(低码率下比较明显):
AAC-LC>AAC-HE
算法复杂度:
AAC-LC<AAC-HE
下面通过判断accframe的第三个字节的,高四位的低两位和第四位的高两位。然后向右移2位,根据不同的值来判断采样率。这里SIZE是帧的大小。