如何高效学习高级音频编码AAC音频压缩技术?
摘要:AAC的压缩比是1:20,也就是10分钟原始数据100兆,经过它的压缩只有5兆大小。虽然它压缩了很多数据,但对于人来说,压缩后的声音的质量却比mp3的质量总体要高。AAC编码后的音频是需要解码的,它的解码效率也是很高的。AAC有两种数据保存
参考:https://zhuanlan.zhihu.com/p/525616690
参考:https://blog.csdn.net/weixin_45993872/article/details/141866508
声音的录制需要设置采样率,声道数量和编码格式。采样率是说:每秒钟采集声音的次数,单位是赫兹(Hz),一般在android录音中,代码里都写44100的采样率,采样率越高,采集到的音频信息越丰富,但在软件里占用的字节也更多。声道一般是写2个,双声道,声音更立体,声道配置多一个,会多占一倍的字节空间。编码格式一般写:ENCODING_PCM_16BIT。
经过设备录音的原始数据是会占用很多字节的,大概录制10分钟就会产生100多兆的原始数据,所以就有音频压缩技术的出现,帮助提高录音效率。常见的mp3格式的文件就是使用的mp3压缩技术,mp3的压缩比是1:10,也就是10分钟的原始音频数据经压缩后只有10兆大小。而这个AAC音频编码是比mp3压缩技术更先进的音频压缩技术。
AAC的压缩比是1:20,也就是10分钟的原始数据100兆,经过它的压缩后,数据就只有5兆大小。虽然它压缩了很多数据,但对于人来说,压缩后的声音的质量却比mp3压缩后的质量总体要高。AAC编码后的音频是需要解码的,它的解码效率也是很高的。AAC有两种数据保存格式:一种是ADIF,另一种是ADTS。它们两者的区别是,第一种不能在随机音频播放位置播放,也就是不能快进,后退什么的,只能从开头播放。另一种可以随机位置播放。我们在开发中一般就用ADTS的数据格式保存。
ADTS其实,是在原始数据经过压缩后的每帧音频的头部增加的一个头部数组,每帧音频数据都有。这个数组中的每个位置的数据都有它自己的含义。经过AAC压缩后的音频在解码时,都会先根据头部信息去解码压缩后的音频数据。
在开发中,需要自己在MediaCode的编码的输出字节数组中,给加上这个头部信息,然后在我们播放时的解码过程就不需要再去指定这个头部信息了。在开发过程中,还需要保证编码和解码所配置的采样率、声道的配置保持一致;还需要为MediaCode的输入的buffer指定足够的空间,否则会报overflow异常。如果解码时,输出的buffer总是返回-1,很可能是编码的配置和解码的配置不一致造成的。
开发
