一、音频
声音的物理特性
声音的物理性质是波,由物体振动而产生,可引起空气等介质有节奏的振动并传播。
声音的传播介质:在空气中为340m/s,蒸馏水中为1497m/s,铁棒中为5200m/s,真空无法传播。
当两种声音传到耳朵的时差小于80ms,则无法区分开两种声音。如果大于80ms会出现回声。
共鸣证明了声音传播可以带动另一个物体的振动,因此声音的传播也是能量的传播。
声音三要素:
- 频率(音阶):频率越高波长越短,因此低频声响波长较长,能更容易绕过障碍物,声音传的越远。
- 振幅(响度):是能量大小的反应,常用分贝(dB)描述。N=10*lg(A1/A0)。A0是基准量,A1是被量度量。
- 波形(音色):音色为波的形状,比如钢琴和小提琴的介质不同,因此产生的波形不同。

根据上方的等响曲线,人类耳朵的听力范围是20Hz-20kHz,对3-4kHz的声音更敏感。频率范围较宽的音乐,其声压以80~90dB为最佳,超过90dB将会损害人耳。
数字音频
数字音频经过采样、量化、编码3个步骤。
- 采样:奈奎斯特定理(采样定理),按声音最高频率的2倍以上的频率对声音进行采集(AD转换),所以采样频率一般为44.1kHz(1s会采样44100次)。
- 量化:在幅度轴上对信号进行数字化,使用16比特(一个short)表示的范围是[-32768,32767]。
- 编码:涉及到存储的格式,音频的裸数据格式为PCM(Pulse Code Modulation)数据,包括量化格式、采样率和声道数。
以CD为例,量化格式为16比特,采样率为44.1kHz,声道数为2,则CD格式的比特率为:44100162=1411200bps =1378.125kbps。
则一分钟的CD音质的数据,占用的空间大小为:1378.125*60/8/1024=10.09MB。
麦克风如果采集声音?声音纵波通过麦克风里的一层碳膜,碳膜收到挤压发出振动,接触到下方的电极,根据接触时间的长短和频率,完成声音信号和电信号的转换。
音频编码
为了保证音频在网络中实时在线传播,PCM数据量太大,因此需要进行压缩编码。
压缩算法分为有损压缩和无损压缩。包括PCM、WAV、AAC、MP3、Ogg等。原理是压缩掉冗余信号,即不能被人耳感知到的信号。
- WAV:在PCM基础上添加44字节的PCM采样率、声道数、数据格式等信息。无损压缩。适用于音乐音效素材。
- MP3:有损,有不错的压缩比,使用LAME编码的中高码率MP3文件,听感上非常接近WAV。适用于高比特率下对兼容性有要求的音乐欣赏。
- AAC:新一代有损压缩技术,有LC-AAC、HE-AAC、HE-AAC v2等编码格式,在128kbps以下的码率表现优异,多用于视频中的音频编码。
- Ogg:免费,各种码率下都有优秀表现,尤其中低码率,有潜力,但目前兼容性不好。适用于语音聊天的音频消息场景。
二、图像
图像的物理现象
三棱镜的太阳光分解实验,红绿蓝三种色光无法被分解,成为三原色。
屏幕1280*720,如果需要显示图像,则需要把这幅图像的每一个像素点的RGB通道分别对应到屏幕位置的子像素点进行绘制。
图像的数值表示
图像的数值表示有两种,RGB表示和YUV表示。
- RGB表示方式:0-255,8个比特代表一个子像素,32个比特表示一个像素(每个像素有3个子像素组成)。对于1280720分辨率的图片来说,大小为:
1280720*4=3.516MB。即是位图(bitmap)的裸数据。裸数据由于太大,不好直接在网络传输,因此有个图像的压缩格式,如JPEG。 - YUV表示方式:对于视频帧的裸数据,更多的是YUV数据格式。YUV是为了解决黑白电视机能够接收彩色电视信号而产生,将亮度Y和色彩UV进行分离。较RGB视频信号传输相比,不用3个独立的视频信号同时传输,优点在于只需要占用极少的频宽。Y代表明亮度(也称灰阶值),U和V表示的是色度(描述影像的色调Cr和饱和度Cb)。
YUV与RGB转换,可通过矩阵进行转换,目前标清和高清视频的转换矩阵标准不一样。
YUV
在音视频领域,主要使用YUV表示。因此需要重点了解。
YUV格式有以下两种:
- 紧缩格式:Y、U、V一般各采用8个字节,先存储所有像素的Y,再U,再V。
- 平面格式:每个像素的YUV联系交替存储,最常用的采样格式是4:2:0。

YUV 4:4:4采样,每一个Y对应一组UV分量。
YUV 4:2:2采样,每两个Y共用一组UV分量。
YUV 4:2:0采样,每四个Y共用一组UV分量。即水平方向和垂直方向的抽样率都是4:1。
对于非压缩的8比特量化的视频来说,8*4的一张图片,占用48字节的内存。

对于一帧为1280720的视频帧,用YUV420P的格式来表示,数据量大小为12807201+12807200.5=1.318MB,如果fps为24,则一部90分钟的电影,数据量大小是 1.318MB * 24 fps 90 * 60s=166.8GB。这样的大小,存储和流媒体播放都是大问题。
三、视频
基本概念
1、帧(Frame)
简单的理解帧就是为视频或者动画中的每一张画面,而视频和动画特效就是由无数张画面组合而成,每一张画面都是一帧。
2、帧数(Frames)
帧数其实就是为帧生成数量的简称,可以解释为静止画面的数量。
3、帧率(Frame Rat)
帧率=帧数/时间,单位为帧每秒(f/s, frames per second, fps)
帧率的关键值:
- 10-12 FPS:由于人类眼睛的特殊生理结构,如果所看画面之帧率高于每秒约10至12帧的时候,就会认为是连贯的,此现象称之为视觉暂留。
- 24 FPS:一般电影的拍摄及播放帧数是每秒24帧。
- 60 FPS:这个帧率对人眼识别来说已经具备较高的平滑度。在做页面性能优化时,常用60FPS作为一个基准,所以需要尽量让每一帧的渲染控制在16ms内,这样才能达到一秒60帧的流畅度。
- 85 FPS:人类大脑处理视频的极限,人眼无法分辨更高频率的差异。
4、分辨率
视频、图片的画面大小或尺寸,以像素为单位。
5、码率/比特率
单位时间播放连续的媒体如压缩后的音频或视频的比特数量。常用单位“比特每秒”,缩写是“bit/s”。比特率越高,带宽消耗得越多。
6、编码
编码,就是去除冗余信息,实现数据量的压缩。空间上的冗余和时间上的冗余。
- 帧间编码:可以去除时间上的冗余信息。包括:运动补偿、运动表示、运动估计。
- 帧内编码:可以去除空间上的冗余信息。对标图像的JPEG,ISO制定了视频压缩标准MPEG,目前版本到MPEG 4 AVC。LTU-T指定了H.261到H.265等一系列体系,其中H.264使用多种压缩技术,应用也最为广泛。
H.264编码相关
1、IPB帧
- I帧(intra picture):帧内编码帧,可理解为关键帧,通常是每个GOP的第一个帧,可以当成静态图像,I帧压缩可以得到6:1压缩比而不会觉察到模糊。
- P帧(predictive-frame):前向预测编码帧,解码时需要参考前一个已编码帧(P帧或I帧)的信息。
- B帧(bi-directional):双向预测内插编码帧,解码时需要参考前一个已编码帧(P帧或I帧)以及后面一个P帧。
2、PTS和DTS
- DTS(Decoding Time Stamp),用于视频的解码,也就是解码顺序的时间戳。
- PTS(Presentation Time Stamp),用于解码阶段进行视频的同步和输出。
在没有B帧的情况下,DTS和PTS的输出顺序是一样的,一旦存在B帧,B帧会打断解码和显示的顺序,导致PTS和DTS则会不同。
解码顺序:I帧-> P帧-> B帧

3、IDR帧(instantaneous decoding refresh picture)
H.264采用多帧预测,需要参考前面多个I帧,IDR帧是一种特殊的I帧,即这帧之后的所有帧只会参考到这个IDR帧,不会再参考前面的帧。解码器一旦收到IDR帧,就会立即清理参考帧缓冲区。
4、GOP(Group Of Picture)
采用的压缩方式是分组,即关键帧的周期。两个IDR帧之间的距离就是gop_size。过大会影响seek响应速度,过小会导致压缩效果不好。字节大小:I帧> P帧> B帧。多使用B帧(I压缩率1/7,P是1/20,B可以达到1/50),能节省大量空间,用来更多的保存I帧,便能在相同码率下提供更好的画质。