2

极牛技术实践分享活动

极牛技术实践分享系列活动是极牛联合顶级VC、技术专家,为企业、技术人提供的一种系统的线上技术分享活动。

每期不同的技术主题,和行业专家深度探讨,专注解决技术实践难点,推动技术创新,每两周的周三20点正式开课。欢迎各个机构、企业、行业专家、技术人报名参加。

本期大纲

  1. 直播中用户问题

  2. 视频编码的基本概念

  3. 视频编码的应用场景

  4. 视频编码的实现框架

  5. 直播中视频编码策略

嘉宾介绍
朱玲,网易视频云高级研发工程师,音视频专家。
中科大硕士毕业,进入思科Webex,参与的主要项目包括:视频会议编解码器研发、视频传输控制研发、开源项目openh264的开发维护等。15年加入网易,主要参与视频直播及互动直播开发,主要负责推流客户端、SDK 的开发维护以及互动视频直播方案的开发。

朱玲老师本期的分享围绕她对视频编解码的认识,以及在视频直播/互动直播产品开发过程中,对视频编解码器的实践心得展开。首先解答了网易视频云在对接客户过程中,关于视频比较多的几个问题,然后介绍视频编码的基本概念,发展状况,以及实现框架,最后介绍了在视频直播应用场景下,对视频编解码器做出的一些策略选择。

用户问题

clipboard.png

我们视频云大约有几百家 B 端用户,问的比较多的跟视频编解码相关的问题有
1)我看自己清晰的很,观众看到的画面怎么有点模糊呢?
2)我上行带宽有 200kbps,怎么就发送不了视频呢,视频怎么就不流畅了呢,一顿一顿的呢?
3)我直播时候画面静止的时候码率很平稳,为啥一运动,码率就会 burst 呢?
其实这些问题都和视频编码知识相关,当我们了解了视频编码的一些概念和实现框架,再回头来看用户的这些问题。

视频编码基本概念

clipboard.png

我们先简单介绍下视频编码的几个基本概念,分视频以及编码概念介绍:

帧率:视频是由一幅幅图像组成,所谓帧率,就是一秒中有多少幅图像,采集播放编码都有帧率的概念,像我们去电影院看的电影,帧率一般是24 ,播放的电视一般是25~29,最近李安的新电影,120帧/4K/3D拍摄的,采集帧率越高,对现实世界的还原度越好,实际上,根据人眼逗留原理,一秒10几帧,就很流畅的动画效果了,而不是幻灯片播放效果

分辨率:我们经常看电视,会有选择超清,高清,之类,这里说的就是分辨率,即二维图像像素个数,像素可以理解为一个采样点的表达,一幅图像的采样点更多,数模转换的过程中,失真也越小,譬如我们所说的超请 1920*1080,横向 1920个采样点,纵向有 1080个采样点

码率:采集,播放没有码率的概念,这个主要是视频传输的概念,一秒钟发送多少数据量,在实时应用中,自适应带宽一直是编码器码率控制算法的目标,我们针对编码器而言就是压缩率的概念,譬如一帧视频(一幅图像)经过编码压缩后的二进制数据量有多少

关键帧:这个算是视频特有的概念吧,所谓关键帧,顾名思义,很关键,关键到没有这一帧,非关键帧是无法解码的,为什么这样呢,后面在介绍视频编码框架算法细节处,会做具体介绍

clipboard.png

有损,无损
有损/无损编码:根据编解码前后原始信息是否有失真区分。现代数字压缩技术中,有损无损编码应用都处处可见,譬如我们在发送邮件的时候,总会先把文件用zip/rar压缩一下,对端收到这个压缩包,解码会完全恢复原始信息,这就是无损编码。而有损编码较多见于图像,视频,音频,等多媒体信息压缩中,因为多媒体信息的原始信息太大,其次是利用人眼感官上的冗余。

就压缩率而言,有损的压缩率比无损更高,举例说明:
参考序列: Cisco_Absolute_Power_1280x720_5.yuv
原始大小:
128072083/25 = 6750KB
Archive: rar
2654KB
视频编码器压缩:
H264 JM 100 IBPBP结构 56KB
就信息失真对比:有损会带来信息失真,但是可以利用人眼感官上的冗余,这种失真在一定范围内,不易察觉。

clipboard.png

基于内容/波形编码
从信源建模模型角度区分,我们将我们要压缩的对象称之为信源,视频可以是由视频内容中的不同物体运动组成,也可以是视频中每个构成的像素点组成,如下图所示:

clipboard.png

基于内容的编码从一定角度来说,能达到更高的压缩率,但是其需要做图像的特征点检测,找出不同的物体,将视频内容分块,计算复杂度较高,我们大多数视频编码还是采用的基于波形编码的方式,直观明确,二者相互融合的,波形编码中,也可以结合结合视频内容分析提高压缩率。

视频编码标准发展现状 / 实现框架 / AVC、H264的实现框架

视频编码标准的发展现状
视频编码标准从上世纪80年代开始发展至今,有接近40年的历史,如下图所示:

clipboard.png

标准一直在发展中,从第一代到现在发展到266开始收集信息阶段了,每一次的标准制定以及最终成为方案的目标就是压缩率是之前一代标准的一倍。

目前市场上应用最广泛的还是h264,包括硬件芯片厂商的,软件服务厂商,都是支持h264的,虽然比h264新一代的编码标准h265也早已经draft了,且压缩率在分辨率较高的视频序列中也比较高,鉴于专利费昂贵,以及普及度的问题,从应用角度来说还是比较小众,也因此是一些公司的宣传卖点,当然,随着时间的推移,一切都在发展中。

视频编码的实现框架
接下来,我们会将视频编码框架细节的介绍缩小到H264标准中,尽管各个标准的细节,码流语法会有不同,但大体上都是采用基于预测与变换结合的混合编码模式。

clipboard.png

AVC/H264 的实现框架
输入视频图像,将图像按照分成 16*16 编码宏块,作为编码的基本单元,编码器压缩处理的并不是直接的原始像素,而是会通过预测,包括帧内预测,帧间预测,得到预测残差,(原始像素与预测像素值之间的残差),进行变换,变换域将低频系数集中,高频系数为0,量化,zigzag扫描,熵编码输出,量化之后的值进行反量化,反变换,并结合预测值,得出重建值,并且区块滤波存储在参考帧列表中,以供后序视频帧编码参考用。

视频编码框架:预测(帧内预测 / 帧间预测)

预测编码分为帧内预测,帧间预测。
帧内预测,像素的预测参考对象在当前正在编码的图像帧内,根据已经编码的块信息,来预测当前编码块,消除像素空间上的冗余。理论依据就是图像空间域变化是缓慢的,相邻像素之间的差值很小。

帧内预测有两种模式 4x4 16x16 ,每种模式下面的预测模式。

clipboard.png

clipboard.png

clipboard.png

帧间预测,像素块的预测参考已经编码过后的图像帧,理论依据是图像时间域变化是缓慢的,运动不剧烈。相邻时间的图像之间存在很大的相似性,图像之间一般可以用简单的平移运动建模。

帧间预测的内容主要包括,参考帧选择,MV 搜索,以及帧间预测分块模式选择。

clipboard.png

clipboard.png

clipboard.png

变换 / 量化 / 熵编码,预测后的残差经过变换之后,像素残差大多数能量都集中低频部分,高频部分的能量很少,量化之后的信息,进行无损熵编码传输。
下面举例说明,量化系数的影响,一般认为量化是造成有损的唯一部分,其他部分理论上都是无损的。

量化参数影响了编码的模式抉择,压缩率,以及失真率,编码器的码率控制,控制的就是这个量化参数值,量化参数有个范围在0~51。

clipboard.png

可见,视频编码压缩是有极限的,不可能随意到多少,量化参数值越高,码率越低,失真越大,人眼的不敏感,或者说冗余,当QP>20的时候,压缩之后的主管质量和10是没有什么差异的。我们一定要选择一个最合适的qp值达到压缩率高视频主管质量也好的效果。

直播中视频编码策略

clipboard.png

提高编码效率
实时应用场景中我们首先要关注的就是编码效率问题,所谓编码效率,即压缩一帧视频(一幅图像)的所需要的时间,我们可以通过下面几个点去提高编码效率。

clipboard.png

提高编码压缩率
在保障编码效率基础上,尽可能的提高编码压缩率,对视频原始信息进行降噪处理,低通滤波去处不必要的噪音干扰;我们需要更多从分析视频语义角度出发,譬如感兴趣区域编码。

clipboard.png

提高编码鲁棒性
编码器端可以采用分片编码,包括FMO技术,我们的熵编码是以片为单元,无论是CAVLC,还是CABAC都是串行的,一旦发生误码,将会影响后序所有熵解码,但是片分的更多,降低了编码的压缩率,都是权衡,有些应用场景一行为一个编码片。

clipboard.png

将编码之后的信息,分成不同的优先级打包,譬如讲将mv,mbtype等重要信息,分成一个数据块,将残差信息分成另一个数据块,这样可以在丢包网络中,尽量保障重要信息的完整接收。

解码器端,可以采用错误恢复手段,尽可能的在已经接收的信息基础上,尽量恢复出丢失的信息量,达到主观上的不易察觉。

下期预告
时间:2016年12月7日 晚8点
方式:线上微信群
主题:全球云计算资源一体化整合实战
讲师:陈震,迅达云成运维总监

报名请关注极牛(ji-niu)并回复技术分享。


极牛
110 声望25 粉丝