一、PCM
说到音频,主要有两个概念比较重要,一个是采集到的原始音频数据(比如PCM)和压缩后的音频数据(比如AAC)。
1.什么是PCM?
PCM(Pulse Code Modulation,脉冲编码调制)音频数据是未经压缩的音频采样数据裸流,它是由模拟信号经过采样、量化、编码转换成的标准数字音频数据。
2.如何理解PCM?
PCM是一种用数字表示模拟信号经过采样后的数据的方法。主要包括采样,量化,编码三个主要过程。
◆ 先来看看模拟信号被采样的过程:
◆ 采样率:每秒钟采样的样本数。比如我们常说的44.1kHz,即每秒钟采样44100次。
◆ 量化:将采样到的信号数据四舍五入到一个可用整数表示的过程。(位深)。
连续的模拟信号按一定的采样频率经数码脉冲取样后,每一个离散的脉冲信号被以一定的量化精度量化成一串二进制编码流,这串编码流的位数即为采样深度。位深就是说用多少个比特表示某一个时间点上的振幅。比特数越多,可以表示的振幅变化就越精确,那么声音就会越逼真。
◆ 编码:将量化后的信号转换成二进制数据。
3.描述PCM数据的6个参数:
◆ Sample Rate : 采样频率。8kHz(电话)、44.1kHz(CD)、48kHz(DVD)。
◆ Sample Size : 量化位数。常见值为8-bit、16-bit。
◆ Number of Channels : 通道个数。常见的音频有立体声(stereo)和单声道(mono)两种类型,立体声包含左声道和右声道。另外还有环绕立体声等其它不太常用的类型。
◆ Sign : 表示样本数据是否是有符号位,比如用一字节表示的样本数据,有符号的话表示范围为-128 ~ 127,无符号是0 ~ 255。
◆ Byte Ordering : 字节序。字节序是little-endian还是big-endian。通常均为little-endian。
◆ Integer Or Floating Point : 整形或浮点型。大多数格式的PCM样本数据使用整形表示,而在一些对精度要求高的应用方面,使用浮点类型表示PCM样本数据。
二、音频编码协议 AAC
1.什么是AAC?
AAC(Advanced Audio Coding,高级音频编码)是一种声音数据的文件压缩格式。AAC分为ADIF和ADTS两种文件格式。
2.什么是ADIF和ADTS?
◆ ADIF:Audio Data Interchange Format 音频数据交换格式。这种格式的特征是只有音频数据最前面具有头字节,音频数据流中间没有头字节。因此它的解码只能在头字节处开始进行。故这种格式常用在磁盘文件中。
◆ ADTS:Audio Data Transport Stream 音频数据传输流。这种格式的特征是它每一单元音频数据都有一个header字节,解码可以在这个流中任何位置开始。
3.ADTS的数据结构是怎样的?
4.音频数据抓包分析
音频数据单元开头是FF F1,对应二进制是11111111 11110001,对比协议 前12bit全是1,然后下一bit是0,说明MPEG version 4,然后连续两个0,下一位是1表明没有CRC。