音视频技术入门——视频处理

即构科技ZEGO

共 6185字,需浏览 13分钟

 · 2022-02-09

你看到的视频究竟经历了什么到达你眼前?

为什么在视频通话时会出现马赛克?


本篇文章会涉及到视频处理的相关内容,包括视频采集、视频编解码、视频渲染

关于「音视频技术小白科普营」我们想用浅显易懂的语言,将一些基础知识,体系化的介绍给音视频技术初学者或者想要了解音视频技术任何人。感谢阅读,如果您想了解更多关于音视频相关,欢迎关注ZEGO即构官网。

视频处理大纲

视频的秘密

来,看看这个李佳琦。

他嘴上色彩鲜艳的口红,无暇的皮肤,以及屏幕上闪现的文字,

你可能看过无数次直播,但却从来没有想过这个“李佳琦”经历了什么来到你的面前。

这个图像看起来简单,由声音、动态画面、文字组成。剩下的就是一堆可跳转的按钮和互动弹幕。

但是,单单那色彩饱和度丰富的口红和无暇的皮肤,就没有那么简单。


视频作为一种信息,跨越千山万水见到屏幕前的你,需要经历曲折的可不是主播按下录制键那么简单,举起相机,意味着一个视频的生命旅程才刚刚开始。

它需要经历:

采集、前处理、编码、传输、解码、后处理、渲染等一系列处理。

上图哥哥娇艳欲滴的口红就与“采集”息息相关了


1.采集

我们所看到的色彩图像,都与颜色空间有关,“采集”就是对颜色空间进行采样与存储。

佳琪哥哥的口红试色与你收到的宝贝有没有色差,这一步十分重要。


常见的颜色空间有两种,分别是以红、绿、蓝三原⾊的亮度来定量表示颜⾊的RGB模式,和根据⼀个亮度(Y 分量)和两个⾊度(UV 分量)来定义颜⾊空间的YUV模式。


因为人眼对色度的敏感度不如对明亮度,可以对色度的数据进行压缩,因此YUV格式比RGB格式存储空间更小。目前音视频技术多采用YUV模式进行采集,以便获取更大的可压缩空间。

YUV的采样方式%存储方式:

YUV的采样⽅式主要有三种:YUV4:4:4、YUV4:2:2、YUV4:2:0,每个分量占⼀个字节 。
(1)YUV 4:4:4采样,针对每个像素做全采样,每⼀个Y对应⼀组UV分量,每个像素占⽤3个字节 。
(2)YUV 4:2:2采样,UV 分量是 Y 分量采样的⼀半,Y 分量和 UV 分量按照 2 : 1 的⽐例采样,每两个Y共⽤⼀组UV分量,每个像素占⽤2个字节 。
(3)YUV 4:2:0采样,不是指只采样 U 分量⽽不采样 V 分量。⽽是指,在每⼀⾏扫描时,只扫描⼀种⾊度分量(U 或者 V),和 Y 分量按照 2 : 1 的⽅式采样,每四个Y共⽤⼀组UV分量,每个像素占⽤1.5个字节 。
YUV的存储格式⼤概可以分为 packed(打包)、planar(平⾯)、semi planar(半平⾯) 三 个⼤类别。
·打包格式:只有⼀个plane,存储规则是取n个采样点的Y、U、V的分量⼀起打包存储,然后以相同的⽅式存储接下来的n 个采样点;对于n的取值和Y、U、V分量的排列顺序,也存在多种⼦组合格式,⽐较常⽤的格式有YUY2等。
·平⾯格式:拥有三个plane,第⼀个平⾯存储所有的Y分 量,接下来的第⼆个平⾯存储所有的U分量,后的⼀个平⾯存储所有的V分量(也可能倒过来),⼀般可以简称为YUV 4XX P格式,例如应⽤⾮常⼴泛的I420。
·半平⾯格式:介于平⾯格式和打包格式之间,对于 YUV 4XX SP格式都是属于semi planar格式,拥有两个plane,第⼀个平⾯都是先存储所有的Y分量,接下来的U和V分量按照⼀定的规则交叉存储在接下来的平⾯上⾯,U、 V的存储顺序的不同对应不同的⼦格式,如NV21、NV12等。

2.物理采集

我们所看到的图像是由各类图像传感器、摄像机、录像机、电视剧等视频设备输出的视频信号。视频由一帧帧照片组成,而照片的好坏与曝光和变焦有关。

焦距是光学系统中衡量光的聚集或发散的度量方式,指从透镜中心到光聚集之焦点的距离。

不同的视频场景需要在图像采集端配备不同焦距的设备,比如上图为了能更清晰真实的感受主播哥哥的美颜暴击,就应采用标准焦距镜头,其视野范围就是人眼所见距离。而上年火爆的直播卖房等场景,为了能将房屋全景呈现,当然采用视野范围更大的短焦距镜头(广角镜头)成像效果更好。长焦镜头视野范围小,却能更好的清晰捕捉远处的画面。

上述这种通过选择不同焦距的镜头来拍摄图像,被称为光学变焦。这是真正意义上的变焦,可清晰放大影像,而无任何画质损失。

下面再来看一下曝光对照片质量的影响。

这是一张你们的女神的曝光前后对比图,岁月的痕迹在曝光后一秒被抹去。但是整个的照片的细节就不明显了,比如眼尾的细纹。

所以曝光也需要灵活取舍。

一张正确曝光的图片可以有N种不同的光圈和快门速度组合。其中光圈和速度联合决定进光量,ISO决定CCD/CMOS的感光速度。如果进光量不够,可以开大光圈或者降低快门速度,还是不够的话就提高ISO。大光圈的缺点是解像度不如中等光圈,快门速度降低则图片可能会糊,提高ISO后图片质量也会下降 。没有完美的方案,如何取舍要灵活决定。

曝光模式即计算机采用自然光源的模式,通常分为多种,手动曝光、自动曝光等模式。也就是说应该通多少的光线使感光元件能够得到清晰的图像。

而曝光量由通光时间(快门速度决定),通光面积(光圈大小)决定。

再次说明了,肤白貌美的佳琪哥哥出现在你的手机屏幕,需要很多边际调整,才能做到不辜负每个口红对试色的期待。

总结一下这一小节,我们了解了,视频在采集阶段的颜色空间表达方式,和其采样及存储的方式。并且通过对物理采集中的变焦、曝光概念的初识,理解了视频采集设备的重要性。

3. 视频压缩的必要性

不管是看直播还是打视频通话,最令人暴躁的情况就是卡顿、加载不出来、花屏、马赛克等,意外情况。

佳琪哥哥刚喊出“买它”!画面卡住,屏幕出现黑边,或者还有些斑驳的马赛克。

每当此时,网速就背了太多的锅。“这破网!”想必各位也吐槽够了,一起来了解一下阻碍你买买买的真正原因吧。

不管是采集,还是编码,都是为了能将视频更高质稳定的传递到观众眼前。

而带宽是有限而固定的,所以在千万剁手女孩与你一起涌入直播间时,考虑到传播效率,及接受信息的时效性和对带宽资源的有效利用,需要对采集后的视频信息进行“压缩”,也就是编码。

如果采集后的视频已经在YUV阶段进行了一部分压缩,为了兼顾画质和传输稳定性,压缩可以从两方面着手,即:

·空间冗余:根据局部相关性,同一张图像中临近的采样点之间往往存在着空间连续性,即颜色相同或相近;
·时间冗余:连续的画面之间存在着空间的连续性,即相邻图像之间变化的内容不是很多。
利用空间冗余和时间冗余的原理,可以对视频进行高效压缩,从而提升传输效率。

如何利用时间冗余和空间冗余压缩视频呢?

这就需要用到预测编码IPB帧与GOP。


4.预测编码&IPB帧
预测编码就是根据已经编码好的块信息得到一个预测值,这样只需要编码实际值与预测值之间的差异即可。
·空间冗余的消除:
帧内预测:根据同一帧中相邻已编码好的块信息得到预测数据,编码差异数据
·时间冗余的消除:
帧间预测:根据已编码帧中的块信息得到预测数据,编码差异数据

IPB帧:
I帧:仅使用帧内的空间相关性进行压缩,压缩效率最低,但其编解码无需用到其他帧的信息,可以独立解码,是GOP的起始点,只使用帧内预测,它是一个完整的画面,没有I帧,P帧和B帧就无法解码;
P帧:前向预测帧,编解码时会参考其前面的帧的信息;
B帧:双向预测帧,编解码时可能同时参考前面和后面的帧信息,压缩效率最高,复杂度高,时延较大。
需要特别说明的是,ZEGO SDK不⽀持推B帧,因为B帧在直播场景下延迟很⼤。但可以解码含有B帧的流,是为了兼容第三⽅软件推流,但是会出现⾳画不同步,⽽且只能⽤软解。

5.GOP(Group of Pictures),是画面组的意思,即两个I帧之间的间隔帧数,一个GOP就是一组连续的画面。

ZEGO SDK中,一个GOP的帧数 = 视频编码帧率 * 关键帧间隔时间(默认2s)。

需要注意的是视频画面的花屏是缺了块,码流出错导致的。比如说丢了I帧、P帧。

而马赛克现象就是码率过低导致的。


那么视频的编码结构是怎么样的呢?

6.高编码效率和网络友好性的任务分别由VCL和NAL来完成,VCL和NAL就是H264的码流结构。

视频编码层VCL(Video Coding Layer)即编码处理的输出,表示被压缩编码后的视频数据序列。

网络传输层NAL(Network Abstraction Layer)定义了数据封装的格式和统一的网络接口,负责格式化VCL数据并提供头信息,以保证数据适合各种信道和存储介质上的传输。基本单元为NALU,每一个NALU包含一个字节的头信息(NAL header)和其后的负载数据(RBSP, Raw Byte Sequence Payload)。

H.264码流在网络中传输时就是以NALU的形式进行传输的。

宏块:视频编码的基本单元,h264通常宏块大小为16x16个像素,所以编码器一般会对图像的宽高有要求,需要为16的倍数

Slice:条带,图像的划分,一帧图像可编码成一个或者多个条带,每条带包含整数个宏块

NALU常见类型:
·IDR图像的片段
·补充增强信息(SEI):一般用作补充字幕信息,例如一些直播答题场景中的字幕,就存储在SEI
·序列参数集(SPS):序列参数集,包含应用于完整视频序列的语法元素,比如图像宽,高等
·图像参数集(PPS):图像参数集,包含应用于编码图像的语法元素,比如量化参数,参考帧列表大小等

上述介绍的是H264编码格式,编码格式也有很多种。


7.常见的编码格式有七种,分别是:

H.261、H.263、H.264、H.265

MPEG1、MPEG2、MPEG4

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

而H.264则是由两个组织的编码专家组,联合组建的联合视频组,共同制定的高度压缩数字视频编解码器标准。

所以它既是ITU-T的H.264,又是ISO/IEC的MPEG-4高级视频编码的第10 部分。

因此,不论是MPEG-4 AVC、MPEG-4 Part 10,还是ISO/IEC 14496-10,都是指H.264。

即构ZEGO SDK内部支持的视频编码格式有:H.264、VP8、H.265

在这里再介绍一下H265。

8.h265

H.265标准,是围绕H.264,保留原来的某些技术,同时对一些相关的技术加以改进而来的新标准。使用先进的技术,用以改善码流、编码质量、延时和算法复杂度之间的关系,达到最优化设置。

具体的内容包括:提高压缩效率、提高鲁棒性和错误恢复能力、减少实时的时延、减少信道获取时间和随机接入时延、降低复杂度等

H.264由于算法优化,可以以低于1Mbps的速度实现标清数字图像传送;

H.265则可以实现利用1-2Mbps的传输速度传送普通高清音视频传送。

另外,根据编码解码方式,也分为两种,分别是硬编硬解与软编软解。

9.硬编硬解与软编软解:

硬编硬解:使用非CPU进行编码解码,通过专用的设备,单独完成视频编码解码,如显卡GPU、专用的DSP、FPGA、ASIC芯片等,曾经的VCD/DVD解压卡、视频压缩卡都被冠以“硬解”的称号;

软编软解:通常指的是视频的软件解码,通过软件解码得到的画面效果通常在电脑配置足够好的情况下,比硬件解码来的好很多;

移动平台上,由于性能及功耗的原因,一般推荐是使用硬编硬解,软件编解码比较消耗cpu。

视频的质量和传输速度之间如何平衡,就涉及到了码率控制。

10.码率控制:

码率控制,是一种决定为每一个视频帧分配多少比特数的方法,它将决定码率的大小和质量的分配。它涉及视频质量和信道带宽的折中,减少码率就会牺牲质量,质量提高就会增加码率。

CBR跟ABR的差异:

(1)当连续的画面变化较小,编码的码率达不到设定的码率时,CBR模式会填充数据,直到满足设定的码率,ABR模式则不会填充。

(2)当连续的画面变化较大时,CBR、ABR模式的编码码率,都会有一定程度的上升,但如果设定的码率不够,画面依然会模糊。

11.渲染基本原理:

渲染是指,用软件从模型生成图像的过程,是将三维场景中的模型,按照设定好的环境、灯光、材质及渲染参数,二维投影成数字图像的过程。渲染用于描述:计算视频编辑软件中的效果,以生成最终视频的输出过程。

渲染是三维计算机图形学中的,最重要的研究课题之一,并且在实践领域,它与其它技术密切相关。在图形流水线中,渲染是最后一项重要步骤,通过它,得到模型与动画最终显示效果

渲染的应用领域有:计算机与视频游戏、模拟、电影或者电视特效以及可视化设计,每一种应用都是特性与技术的综合考虑。

(游戏手柄渲染)
(室内渲染)
(影视渲染)

12.各平台常用的渲染组件

(1)SurfaceView

SurfaceView,可用于在 View 层次结构中嵌入其他合成层。他的主要作用:

A.视频输出的屏幕。(这个用得比较多)

B.绘制图像

SurfaceView提供一个直接的绘图表面(Surface)嵌入到视图结构层次中。你可以控制这个Surface的格式,大小,SurfaceView负责在屏幕上正确的摆放Surface。简单说就是SurfaceView拥有自己的Surface,它与宿主窗口是分离的。

(2)GLSurfaceView

该类提供了帮助管理EGL上下文、在线程间通信以及与 Activity 生命周期交互的辅助程序类。

例如,GLSurfaceView 会创建一个渲染线程,并在线程上配置 EGL 上下文。当 Activity 暂停时,状态将自动清除。大多数应用无需了解有关 EGL 的任何信息即可通过 GLSurfaceView 来使用GLES

在大多数情况下,GLSurfaceView 可简化 GLES 的使用。但在某些情况下,却会造成妨碍。

(3)SurfaceTexture

相比SurfaceView,SurfaceTexture是从Android3.0(API 11)加入的一个新类,它是Object的子类,它的主要用途从一个图像流捕获帧数据作为OpenGL ES的纹理。

这些图像流可以来自于相机的预览数据,或者视频的解码数据,从一个SurfaceTexture 创建一个 surface 可以被用于android.hardware.camera2, MediaCodec, MediaPlayer,Allocation等的输出目标。


在下一篇连载中,我们将详细介绍下音视频技术中的音频处理环节,科普关于音频的采集、渲染、编解码、前处理的相关知识。

敬请期待!

如果您现在想了解更多关于音视频的讯息,欢迎加入我们的音视频技术分享群。我们会定期举办线上技术分享、音视频在各行业中的应用分享、技术干货等。

群是免费的,但是谢绝广告和水聊。添加即构微信号,拉您进群。
微信号zegoshouqian,添加时请备注:知乎音视频群
即构机构号将实时分享音视频领域的技术洞见以及行业讯息,与您一起探讨音视频创新的更多可能性。
欢迎提问&求关注 ( ´ ▽ ` )ノ
以上。
浏览 3
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报