音视频开发基础知识

其实音视频开发要掌握图像,视频,音频的基础知识,并学会如何对他们进行采集,渲染,处理,传 输等一系列开发和应用。

采集解决了数据从哪里来的问题,渲染解决的是数据怎么崭新的问题,处理解决 的是数据怎么加工的问题,传输解决的是数据怎么共享的问题。这里的每一个门类都可以深挖,衍生出一 个个充满技术挑战的话题。

音频

因为音频技术是为了记录、存储和回放声学现象才发明的,所以先了解声学现象对学习数字音频是有很大帮助的。我们必须要对声学现象有基础的了解,若只研究数字音频而忽略了声学现象,那就本末倒置了。

声音的基础知识

声音的产生是由于物体的振动,造成空间内空气的波动而共鸣发音,再由大气的传播,使人的听觉神经感受到的一种物理现象。

声波就形同水波,声波虽然看不到,但其传送能量形式和水波却是雷同的。

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

响度又叫做音量,是人耳对声音强弱的主观感觉。响度和声音震动的幅度有关,用的力越大,人的鼓 膜震动幅度就越大,发出的声音越响。

音调其实就是人耳对声音高低的感觉,音调主要是和频率有关。声波的频率越高,音调也越高,比如 我们分别敲大鼓和小鼓,会感觉它们所发出的声音不同。小鼓被敲击后振动频率快,发出的声音比较清脆, 即音调较高;而大鼓被敲击后振动频率较慢,发出的声音比较低沉,即音调较低。

音色在同样的音调(频率)和响度(振幅)下,钢琴和小提琴的声音听起来是完全不相同的,因为它 们的音色不同。

声音传播的介质是 固体、液体、气体。介质不同,传播的速度也不同。真空的情况下声音是无法传播 的。

数字音频

首先我们要对自然界的声音(模拟信号)进行采样,采样就是根据奈奎斯特定理在时间轴上对信号进 行数字化信号。采样也称抽样,是连续信号在时间上的离散化,即按照一定时间间隔△t 在模拟信号 x(t)上 逐点采取其瞬时值。采样率越高,声音的还原程度越高,质量就越好,同时占用空间会变大。

量化是用有限个幅度值近似原来连续变化的幅度值,把模拟信号的连续幅度变为有限数量的有一定间 隔的离散值。

编码是按照一定的规律,把量化后的值用二进制数字表示,然后转化成二值或多值的数字信号流。这 样得到的数字信号通过可以通过电缆,卫星通道等数字线路传输。在接收端与上述模拟信号数字化过程相 反,再经过后置滤波再恢复成原来的模拟信号。

上面数字化的过程又叫做脉冲编码调制,通常我们说的音频的裸数据格式就是脉冲编码调制(PCM)数 据。描述一段 PCM 数据需要几个量化指标,常用的量化指标是采样率,位深度,字节序,声道数。

采样率(Sample rate):每秒钟采样多少次,以 Hz 为单位。

位深度(Bit-depth):表示用多少个二进制位来描述采样数据,一般为 16bit。

字节序:表示音频 PCM 数据存储的字节序是大端存储(big-endian)还是小端存储(little-endian),为了数据处理效率的高效,通常为小端存储。

声道数(channel number):当前 PCM 文件中包含的声道数,是单声道(mono)、双声道

音频编码

以 CD 音质来说,量化格式是 2 字节,采样率是 44100,声道数是 2,这些信息就描述了 CD 的音质。那么 CD 的数据采样率 =44100162=1378.125kbps, 在 1 分钟的时间里 ,需要占用的存储空间=1378.125 * 60/8/1024=10.09MB。并不小。

压缩算法包括有损压缩和无损压缩。

常用的音频编码方式有以下几种:

MP3,英文全称 MPEG-1 or MPEG-2 Audio Layer III,是曾经非常流行的一种数字音频编码和有损压缩格 式 , 它 被 设 计 来 大 幅 降 低 音 频 数 据 量 。 它 是 在 1991 年 , 由 位 于 德 国 埃 尔 朗 根 的 研 究 组 织 Fraunhofer-Gesellschaft 的一组工程师发明和标准化的。

AAC,英文全称 Advanced Audio Coding,是由 Fraunhofer IIS、杜比实验室、AT&T、Sony 等公司共同开发, 在 1997 年推出的基于 MPEG-2 的音频编码技术。2000 年,MPEG-4 标准出现后,AAC 重新集成了其特性, 加入了 SBR 技术和 PS 技术,为了区别于传统的 MPEG-2 AAC 又称为 MPEG-4 AAC。AAC 比 MP3 有更高的压 缩比,同样大小的音频文件,AAC 的音质更高。

WMA,英文全称 Windows Media Audio,由微软公司开发的一种数字音频压缩格式,本身包括有损和无 损压缩格式。

视频

首先我们了解下像素的基本概念,屏幕显示的原理,其实是把有效面积化为为很多个小格子,每个格 子只显示一种颜色,是成像的最小元素,因此就叫做“像素”。那么分辨率又是啥意思呢?屏幕在长度和宽度这俩个方向上各有多少像素,就叫做分辨率,一般用 AXB 来表示。分辨率越高,每个像素的面积越小,显示效果就越平滑细腻。每一个像素点的 RGB 通道分别对应屏幕位置上的子像素点绘制到屏幕上,进而显示整个图像。

RGB 表示图像

一张图像是由每个像素点绘成的,那么一像素点的 RGB 又该如何表示呢?

浮点表示

归一化表示,取值范围 0.0~1.0,如 openGL 对每个子像素点的表示方式。

整数表示

取值范围 0~255 或者 00~FF,8bit 表示一个子像素。

如图像格式 RGBA_8888,表示 4*8bit 表示一个像素,而 RGB_565 用 5 + 6 + 5 bit 表示一个像素。一张 1280 * 720, RGBA_8888 格式的图片的大小= 1280 * 720 * 32bit = 1280 * 720 * 32 / 8 byte,也是位图在内存中占用 的大小。所以每一张图像的裸数据都是很大的。

YUV 表示图像

YUV,是另外一种颜色编码方法,视频的裸数据一般使用 YUV 数据格式表示。Y 表示明亮度,也称灰度 值(灰阶值)。UY 表示色度,均表示影响的色彩和饱和度,用于指定像素的颜色。

亮度需要透过 RGB 输入信号建立,方式为将 RGB 信号的特定部分(g 分量信号)叠加到一起。

色度定义了颜色的色调和饱和度,分别用 Cr、Cb 表示,(C 代表分量(是 component 的缩写))。 Cr 反映 RGB 输入信号红色部分与 RGB 信号亮度值之间的差异。Cb 反映 RGB 输入信号蓝色部分与 RGB 信号亮度值之间的差异。

视频帧裸数据之所以采用 YUV 色彩空间,使用为亮度信号 Y 和色度信号 UV 是分离的。当无 UV 色度信号,只有 Y 亮度信号时,那么这样表示的图像就是黑白灰度图像。彩色电视正是使用 YUV 空间使用 Y 亮度 信号解决彩色电视与黑白电视的兼容问题、使黑白电视也能接收彩色电视信号。最常用的 YUV 都使用 8 个 字节来表示,所以取值范围就是 0~255。

音频最开始需要采样,图像也是一样的,YUV 最常用的采样格式是 4:2:0。

YUV 格式有两大类:planar 和 packed

1.对于 planar 的 YUV 格式,先连续存储所有像素点的 Y,紧接着存储所有像素点的 U,随后是所有像素 点的 V。

2.对于 packed 的 YUV 格式,每个像素点的 Y,U,V 是连续存储的。 YUV420(YUV420-Package),分辨率为 84(wh)的 YUV 图像,则内存分布如下

YUV420P(YUV420-Planar) 分辨率为 84(wh)的 YUV 图像,则内存分布如下

YUV 码流的存储格式其实与其采样的方式密切相关,主流的采样方式有三种,YUV4:4:4,YUV4:2:2, YUV4:2:0,YUV 4:4:4 采样,每一个 Y 对应一组 UV 分量。YUV 4:2:2 采样,每两个 Y 共用一组 UV 分量。 YUV 4:2:0 采样,每四个 Y 共用一组 UV 分量。

YUV 和 RGB 转化

凡是渲染到屏幕上的东西(文字、图片或者其他),都要转换为 RGB 的表示形式,那么 YUV 的表示形 式和 RGB 的表示形式之间是如何进行转换的呢?

为了实现格式转换,我们首先要明确待转换格式和目标格式的特点和相互转换关系,这是编程实现转换的核心。对于 RGB 转 YUV 的过程,我们要首先拿到 RGB 文件的数据,再通过上图的 YUV 计算公式对其做 运算,得到 YUV 数据,从而实现转换。而对于 YUV 转 RGB 则要首先获得 YUV 数据,用第二组 RGB 公式计 算得到 RGB 数据。在本实验中,转换公式如下。

Y =0.298R +0.612G +0.117B;

U =-0.168R -0.330G +0.498B+128;

V =0.449R -0.435G -0.083B+128;

R = Y +1.4075( V -128);

G = Y -0.3455( U -128) -0.7169( V -128);

B = Y +1.779( U -128);

视频编码

我们为什么要编码呢?原因很简单,因为 YUV RGB 形式的视频数据太大了。编码的目的就是为了压缩, 让各种视频的体积变得更小,有利于存储和传输。编码的核心思想是去除冗余信息。

冗余信息是指各方面的冗余,比如:

空间冗余:图像内部相邻像素之间存在较强的相关性造成的冗余。比如一张图片中有很多的像素点是 一样的。

时间冗余:视频图像序列中的不同帧之间相关性所造成的冗余。比如,一段视频中,此时的图像和 1S 之后的图像可能部分图片是重复的。

视觉冗余:是指人眼不能感知或不敏感的那部分图像信息。

信息熵冗余“也叫编码冗余。人们用于表达某一信息所需要的比特数总比理论上表示该信息所需要的 最少比特数要大,他们之间的差距就是信息熵冗余。

知识冗余:是指在有些图像中还包含与某些验证知识有关的信息。

.......

视频编码的作用:将视频像素数据(RGB,YUV 等)压缩成视频码流,从而降低视频的数据量。视频编码方式有以下几种方式:

编码标准

在 20 年前国际上主流制定视频编解码技术的组织有两个,一个是“国际电联(ITU-T)”,它制定的标准 有 H.261、H.263、H.263+、H.264 等,另一个是“国际标准化组织(ISO)”它制定的标准有 MPEG-1、MPEG-2、 MPEG-4 等。

1990:H.261(ITU)

1993:MEPG-1(ISO)

1995:H.263(ITU)

1996:MPEG-2(ISO)

2003:H.264

2017:H265 (HEVC)

WMV 是微软推出的一种流媒体格式,它是在“同门”的 ASF 格式升级延伸来得。在同等视频质量下,WMV 格式的文件可以边下载边播放,因此很适合在网上播放和传输。

VP8 来自 On2 的 WebM, VPX(VP6,VP7,VP8,VP9),这个编码设计用于 web 视频。

WebRTC。在 2010 年 5 月,Google 以大约 6820 万美元收购了 VoIP 软件开发商 Global IP Solutions 公司,并因此获得了该公司拥有的 WebRTC 技术。WebRTC 集成 VP8, VP9。

AV1 是一个开放,免专利的视频编码格式,针对互联网传输视频而设计。

AVS 是中国具备自主知识产权的第二代信源编码标准,是《信息技术先进音视频编码》系列标准的简称, 其包括系统、视频、音频、数字版权管理等四个主要技术标准和符合性测试等支撑标准。

H265与 H.264 编解码器相比,HEVC 在压缩方面提供了重大的改进。HEVC 压缩视频的效率比 H.264 要高出两倍。使用 HEVC,相同视觉质量的视频只占用一半的空间。

VP9 是由 Google 开发的开放式、无版权费的视频编码标准,VP9 也被视为是 VP8 的下一代视频编码 标准。

H.265 与 VP9

H.265 与 VP9 编码质量的对比测试,数值越小,则表示编码质量越好。从对比中我们发现 H.265、VP9 两者的差别并不大,整体平均分只差了 0.001,在实际应用中几乎不存在差异。

在编码时间对比中,VP9 完胜 H.265,无论是 4K 视频还是 1920、1280 分辨率的视频,VP9 的编码 耗时都比 H.265 短很多。但是 H.265 的解码效率略高于 VP9 。

H.265 继承了 H.264 的视频编码标准体系,在商业应用中更加广泛,多使用于安防、军政、企业等场 景中,但由于其专利持有者过多,导致其商用费用过高,在推广中面临较大阻力。

VP9 由 Google 研发,可以免费使用。在实际推广中,微软、苹果等公司不愿看到 VP9 一家独大,其 他互联网厂商也不希望主流视频编码格式被垄断,因此目前在主要在 Google 自家的产品中得到支持,其他 使用 VP9 的大厂并不多。

就目前而言,H.265 在企业、安防中使用较为广泛,而 VP9 因其简易、实用的解决方案以及开发免费 的特性在互联网应用场景中使用较多。不论是 H.265 还是 VP9,都有着其优势领域,用户可以根据实际的 应用场景选择使用的格式。

你可能感兴趣的:(音视频开发基础知识)