AAC音频码流解析

来源:互联网 发布:千峰软件测试 编辑:程序博客网 时间:2024/06/03 21:37

转自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是帧的大小。




0 0