一、音频帧的长度
音频帧的概念没有视频帧清晰,一般来说,一帧视频帧可以认作是经过某种视频编码格式编码后的一副图像,但音频帧跟具体编码格式有关,例如PCM裸数据,就不需要音频帧的概念,只需要根据采样率和采样精度就可以控制音频播放
1.1 音频播放过程
播放时,应用程序从存储介质中读取不同编码格式的音频数据,解码后的PCM数据送到音频驱动程序,转化为人耳可以辨别的模拟音频
录音时,音频驱动不停地把采样所得到的PCM数据送回给应用程序,应用程序按照某种编码格式完成采样、量化、压缩、存储等任务
二、PCM
假设采样率 48khz,位深16bit,双通道,所以长度计算公式:采样率 x 采样大小 x 声道数,单位是:kb/s,即一秒钟的音频数据需要占这么多的 bit 位存储,也成为码率
举例:帧长度 len = 48000 * 16 * 2 / 8 = 192k (Byte)
另外由于音频数据肯定是需要进行传输,一次传输多少字节的数据,一秒钟传输多少次音频数据包,这些都影响着最终音频呈现的效果:是否卡顿?是否音画同步?
举例:发送间隔选择 20ms,那么一秒钟需要发送 1000 / 20 = 50次,由于音频码率为 192k 字节,那么发送一次音频数据包的大小就是 192k / 50 = 3840 字节
三、ADPCM
ADPCM,即自适应差分脉冲编码调制,是一种针对16bit声音波形数据的一种有损压缩算法,将声音流中每次采样的 16bit 数据以 4bit 存储,所以压缩比 1 : 4,优点是算法复杂度低,编解码延时最短,但是声音质量一般,是对PCM数据进行有损压缩
三、G711.A
G711是国际电信联盟ITU-T定制出来的一套语音压缩标准,主要用脉冲编码调制对音频采样,采样率为8khz,压缩率为1:2, 把16位数据压缩成8位
G.711是主流的波形声音编解码器,有两种压缩算法,一是u律,主要运用于北美和日本;二是A律,主要运用于欧洲和世界其他地区。
pcm裸数据经过G711.A编码后,进行网络传输,打包周期一般分为10ms,20ms,30ms,以20ms为例
如果采样率 48khz,位深16bit,双通道,那么码率为:48k * 16 * 2 = 192k (Byte),那么20ms的包 = 192k / 1000 * 20 = 3840 字节个pcm裸数据,由于G711.A编码方式压缩率为 2 :1,所以发送一次G711.A音频数据包的大小就是 3840 / 2 = 1920 字节
四、G726
G.726可将64kbps的PCM信号转换为40kbps、32kbps、24kbps、16kbps的ADPCM信号。 最为常用的方式是 32 kbit/s,由于其只是 G.711速率的一半,所以网络的可利用空间增加了一倍,G.726算法本质就是一个ADPCM, 自适应量化算法,把64kbit/s 压缩到32kbit/s
五、AAC
AAC,中文名是高级音频编码,是一种专为声音数据设计的文件压缩格式,与MP3不同,它采用了全新的算法进行编码,更加高效,音质更佳
备注:对采样率为44.1kHz的AAC音频进行解码时,一帧的解码时间须控制在23.22毫秒内,通常是按1024个采样点一帧