今天跟几个朋友聊天,他们问我是不是在腾讯,在腾讯做什么?然后我就说了我做的事情,我说我在腾讯做音频方面的开发,对外的产品主要是腾讯会议。然后他我一个朋友就截图了他的腾讯会议的软件截图过来。
音视频是一个很好玩,也是一个发展了很久的技术,现在的很多技术知识都还是沿用原来的。不过音频的东西,是挺好玩的。
下面是一些音视频方面的资料
——
音视频开发要掌握图像,视频,音频的基础知识,并学会如何对他们进行采集,渲染,处理,传输等一系列开发和应用。
采集解决了数据从哪里来的问题,渲染解决的是数据怎么崭新的问题,处理解决的是数据怎么加工的问题,传输解决的是数据怎么共享的问题。这里的每一个门类都可以深挖,衍生出一 个个充满技术挑战的话题。
一、音频
音频技术是为了记录、存储和回放声学现象才发明的,所以先了解声学现象对学习数字音频是有很大帮助的。
1、声音的基础知识
声音的产生是由于物体的振动,造成空间内空气的波动而共鸣发音,再由大气的传播,使人的听觉神经感受到的一种物理现象。
声音的三要素是响度,音调和音色。
响度,和声音震动的幅度有关,用的力越大,人的鼓膜震动幅度就越大,发出的声音越响。
音调,主要是和频率有关。声波的频率越高,音调也越高。
音色在同样的音调(频率)和响度(振幅)下,钢琴和小提琴的声音听起来是完全不相同的,因为它们的音色不同。
声音传播的介质是固体、液体、气体。介质不同,传播的速度也不同。真空的情况下声音是无法传播的。
2、数字音频
对自然界的声音(模拟信号)进行采样,采样就是根据奈奎斯特定理在时间轴上对信号进行数字化信号,即按照一定时间间隔△t 在模拟信号 x(t)上逐点采取其瞬时值。采样率越高,声音的还原程度越高,质量就越好,同时占用空间会变大。
量化是用有限个幅度值近似原来连续变化的幅度值,把模拟信号的连续幅度变为有限数量的有一定间隔的离散值。
编码是按照一定的规律,把量化后的值用二进制数字表示,然后转化成二值或多值的数字信号流。这样得到的数字信号通过可以通过电缆,卫星通道等数字线路传输。在接收端与上述模拟信号数字化过程相反,再经过后置滤波再恢复成原来的模拟信号。
上面数字化的过程又叫做脉冲编码调制,通常我们说的音频的裸数据格式就是脉冲编码调制(PCM)数据。描述一段 PCM 数据需要几个量化指标,常用的量化指标是采样率,位深度,字节序,声道数。
采样率(Sample rate):每秒钟采样多少次,以 Hz 为单位。
位深度(Bit-depth):表示用多少个二进制位来描述采样数据,一般为 16bit。
字节序:表示音频 PCM 数据存储的字节序是大端存储(big-endian)还是小端存储(little-endian),为了数据处理效率的高效,通常为小端存储。
声道数(channel number):当前 PCM 文件中包含的声道数,是单声道(mono)、双声道
3、音频编码
以 CD 音质来说,量化格式是 2 字节,采样率是 44100,声道数是 2,这些信息就描述了 CD 的音质。那么 CD 的数据采样率 =44100*16*2=1378.125kbps, 在 1 分钟的时间里 ,需要占用的存储空间=1378.125 * 60/8/1024=10.09MB。并不小。
压缩算法包括有损压缩和无损压缩。
常用的音频编码方式有以下几种:
MP3,MPEG-1 or MPEG-2 Audio Layer III,是曾经非常流行的一种数字音频编码和有损压缩格式 , 它被设计来大幅降低音频数据量 。
AAC,Advanced Audio Coding,是由 Fraunhofer IIS、杜比实验室、AT&T、Sony 等公司共同开发, 在 1997 年推出的基于 MPEG-2 的音频编码技术。AAC 比 MP3 有更高的压缩比,同样大小的音频文件,AAC 的音质更高。
WMA,Windows Media Audio,由微软公司开发的一种数字音频压缩格式,本身包括有损和无 损压缩格式。
二、视频
像素:屏幕显示是把有效面积化为为很多个小格子,每个格子只显示一种颜色,是成像的最小元素,因此就叫做“像素”。
分辨率:屏幕在长度和宽度这俩个方向上各有多少像素,就叫做分辨率,一般用 AXB 来表示。分辨率越高,每个像素的面积越小,显示效果就越平滑细腻。
每一个像素点的 RGB 通道分别对应屏幕位置上的子像素点绘制到屏幕上,进而显示整个图像。
1、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,也是位图在内存中占用 的大小。所以每一张图像的裸数据都是很大的。
2、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 分量。
3、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);
4、视频编码
我们为什么要编码呢?原因很简单,因为 YUV RGB 形式的视频数据太大了。编码的目的就是为了压缩, 让各种视频的体积变得更小,有利于存储和传输。
视频编码的作用:将视频像素数据(RGB,YUV 等)压缩成视频码流,从而降低视频的数据量。视频编码方式有以下几种方式:
5、编码标准
国际上主流制定视频编解码技术的组织有两个,一个是“国际电联(ITU-T)”,它制定的标准 有 H.261、H.263、H.263+、H.264 等,另一个是“国际标准化组织(ISO)”它制定的标准有 MPEG-1、MPEG-2、 MPEG-4 等。
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 的下一代视频编码标准。
6、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 因其简易、实用的解决方案以及开发免费的特性在互联网应用场景中使用较多。