音视频开发进阶指南读书笔记(一)

456 阅读6分钟

第一章 音视频基础概念

声音的物理性质

声波的三要素:频率、振幅和波形。频率代表音阶的高低,振幅代表响度,波形代表音色。

人类能够听到的频率范围大约为:20H~20kHz,人耳对3~4kHz频率范围内的声音比较敏感,当声音的频率范围较宽时,声压在80~90dB最佳,超过90dB会损坏人耳(105dB为人耳极限)

数字音频

将模拟的声音信号数字化,需要涉及到三个概念:采样、量化、编码。

采样

在时间轴上对信号进行数字化。

根据奈奎斯特定理,按比声音最高频率高2倍以上的频率对声音进行采样。可以保证声音不失真。所以一般采样频率为44.1kHz。

量化

在幅度轴上对信号进行数字化。

编码

就是按照一定的格式记录采样和量化后的数字数据,比如顺序存储或压缩存储,等等。

  • PCM(Pulse Code Modulation):音频的裸数据格式,脉冲编码调制。

    它包含以下几个概念:量化格式(sampleFormat)、采样率(sampleRate)、声道数(channel)。它的大小用数据比特率描述,即1秒时间内的比特数目。

对于量化格式16比特,采样率为44100,声道数为2的PCM数据而言,它的比特率为:

 44100*16*2 = 1378.125kbps

存储1分钟的数据需要的空间为:

1378.125*60/8/1024 = 10.09Mb

压缩编码

压缩编码的原理实际上是压缩掉冗余信号,冗余信号是指不能被人耳感知到的信号,包含人耳听觉范围之外的音频信号以及被掩蔽掉的音频信号等。人耳听觉范围之外的音频上面提到过。被掩蔽掉的音频信号则主要是因为人耳的掩蔽效应,主要表现为频域掩蔽效应与时域掩蔽效应。

常用的压缩编码格式:

  • WAV

    WAV 编码的一种实现就是在PCM 数据格式的前面加上44字节,分别用来描述PCM 的采样率、声道数、数据格式等信息。

    特点:音质非常好,大量软件都支持。

    适用场合:多媒体开发的中间文件、保存音乐和音效素材。

  • MP3

    MP3,使用LAME 编码的中高码率的MP3文件,听感上非常接近源WAV文件。

    特点:音质在128Kbit/s以上表现还不错,压缩比比较高,大量软件和硬件都支持,兼容性好。

    适用场合:高比特率下对兼容性有要求的音乐欣赏。

  • ACC

    AAC是新一代的音频有损压缩技术,它通过一些附加的编码技术(比如PS,SBR等),衍生出了LC-AAC,HE-AAC,HE-AACv2三种主要的编码,LC-AAC就是比较传统的AAC,相对而言,主要用于中高码率(>=80Kbps),HE-AAC(相当于AAC+SBR)主要用于中低码(<=80Kbps),而新近推出的HE-AACv2(相当于AAC+SBR+PS)主要用于低码率(<=48Kbps),事实上大部分编码器设成<=48Kbps自动启用PS技术,而>48Kbps就不加PS,就相当于普通的HE-AAC。

    特点:在小于128Kbit/s 的码率下表现优异,并且多用于视频中的音频编码。

    适用场合:128Kbit/s 以下的音频编码,多用于视频中音频轨的编码。

  • Ogg

    Ogg编码是一种非常有潜力的编码,在各种码率下都有比较优秀的表现.尤其在低码率场景下.Ogg除了音质好之外,Ogg的编码算法也是非常出色.可以用更小的码率达到更好的音质.128Kbit/s的Ogg比192Kbit/s甚至更高码率的MP3更优质.但目前由软件还是硬件支持问题,都没法达到与MP3的使用广度.

    特点:可以用比MP3更小的码率实现比MP3更好的音质,高中低码率下均有良好的表现,兼容性不够好,流媒体特性不支持。

    适用场合:语音聊天的音频消息场景。

图像的数值表示

RGB表示方式

  • 浮点表示:取值范围为 0.0 ~ 1.0,比如,在OpenGL ES中对每一个子像素点的表示使用的就是这种表达方式。

  • 整数表示:取值范围为 0 ~ 255或者00~FF,8个比特表示一个子像素,32个比特表示一个像素,这就是类似于某些平台上表示图像格式的 RGBA_8888 数据格式。比如,Android平台上RGB_565的表示方法为16比特模式表示一个像素,R用5个比特来表示, G 用 6个比特来表示, B 用5个比特来表示。

对于一幅图像,一般使用整数表示方法来进行描述,比如计算一张1280*720的RGBA_8888图像的大小,这也是位图(bitmap)在内存中所占用的大小。

1280 * 720 * 32 / 8 = 3.516MB

YUV表示方式

“Y”表示明亮度,也称灰阶值;而“U”和“V”表示的则是色度,它们的作用是描述影像的色彩及饱和度,用于指定像素的颜色。

“U”和“V”分别用Cr 和 Cb来表示。分别反映了 RGB 输入信号红色部分和蓝色部分 与 RGB 信号亮度值之间的差异。

  • 如果只有 Y 信号分量而没有U、V分量,那么这样表示的图像就是黑白灰度图像。

  • YUV最常用的采样格式是 4:2:0。

关于YUV格式的详细分析和存储方式,参考这篇文章

视频的编码方式

采集到的视频源存在冗余信息,我们可以通过帧间编码技术以及帧内编码技术分别去除时间上和空间上的冗余信息。

  • IPB 帧

    I 帧:帧内编码帧,I帧通常是每个GOP(暂且理解为一个组)的第一个帧。

    P 帧:前向预测编码帧(predictive-frame),也称预测帧。

    B 帧:双向预测内插编码帧,也称为双向预测帧。

一般来说 I的压缩率是7,P的压缩率是20,B可以达到50。

  • GOP

两个 I 帧之间形成的一组图片,就是GOP(Group Of Picture)的概念。gop_size表示的是两个 I 帧之间的帧数目。

  • IDR帧

在解码器中,一旦接收到一个 IDR 帧,就会立即清理参考帧缓冲区,并将 IDR 帧作为被参考的帧。

  • PTS 与 DTS

两种不同的时间戳。DTS(Decoding Time Stame)主要用于视频的解码,PTS(Presentation Time Stamp) 主要用于在解码阶段进行视频的同步和输出。

更多内容参考:
iOS设备音视频编码(一)
I帧、P帧、B帧、GOP、IDR 和PTS, DTS之间的关系