当前位置: 首页 > Linux

网易直播视频编码剖析及实战经验总结

时间:2023-04-06 04:33:38 Linux

极牛技术实践分享活动极牛技术实践分享系列活动是极牛联合顶级VC和技术大咖为企业和技术人员提供的系统性线上技术分享活动。每期不同技术话题,与行业专家深入探讨,着力解决技术实践难点,推动技术创新,每两周周三20点正式开播。欢迎院校、企业、行业专家和技术人员踊跃报名。本期概述用户在直播中遇到的问题。视频编码的基本概念。视频编码的应用场景。视频编码实现框架。直播中的视频编码策略。中国科学技术大学硕士毕业后,加入CiscoWebex。参与的主要项目包括:视频会议编解码器的研发、视频传输控制的研发、开源项目openh264的开发与维护等。2015年加入网易,主要参与视频直播和交互的开发直播,主要负责推流客户端、SDK的开发和维护,以及互动视频直播解决方案的开发。朱玲老师本期的分享围绕着她在视频直播/互动直播产品开发过程中对视频编解码器的理解和视频编解码器的实践经验展开。首先解答了网易视频云与客户对接过程中关于视频的几个问题,然后介绍了视频编码的基本概念、发展现状、实现框架,最后介绍了视频直播应用场景下如何进行视频编解码.控制器做出的一些策略选择。用户问题我们视频云B端用户大概有几百个,问得最多的是视频编解码方面的问题:1)我觉得我很清楚,但是为什么观众看到的画面有点模糊?2)我的上行带宽是200kbps,为什么我不能发送视频?为什么视频不流畅?3)我直播的时候,画面静止的情况下码率很稳定。为什么一移动就爆码?其实这些问题都和视频编码知识有关。当我们了解了视频编码的一些概念和实现框架后,我们再回头看看用户的这些问题。视频编码的基本概念下面简单介绍一下视频编码的几个基本概念,包括视频和编码的概念:帧率:视频是由图像组成的。所谓帧率是指一秒钟内有多少图像。播放编码有帧率的概念。像我们去电影院看电影,帧率一般是24,电视播放一般是25-29。最近,李安的新电影,120帧/4K/3D拍摄,捕捉帧率越高,对真实世界的还原越好。其实根据人眼停留的原理,每秒10帧就会是非常流畅的动画效果,而不是幻灯片放映效果。分辨率:我们经常看电视,会有超清、高清等选择,这里是分辨率,也就是二维图像中像素的个数,像素可以理解为表达式ofasamplingpoint,一幅图像的采样点越多,数模转换的过程中,失真也越小。比如我们所说的超请1920*1080,水平方向1920个采样点,垂直方向1080个采样点。一秒钟发送多少数据?在实时应用中,自适应带宽一直是编码器速率控制算法的目标。对于编码器,我们参考压缩率的概念。比如一帧视频(一张图片)被编码成压缩后的二进制数据有多少个关键帧:这是视频特有的概念。所谓关键帧,顾名思义,就是非常关键。非常关键,没有这个帧,非关键帧就无法解码。为什么是这样?后面会介绍视频编码框架算法的细节,我们会介绍有损和无损loss/losslessencoding:根据原始信息在编码和解码前后是否失真。在现代数字压缩技术中,有损和无损编码的应用随处可见。例如,当我们发送电子邮件时,我们总是先用zip/rar压缩文件。当对端收到压缩包后,解码会完全还原出原来的信息。这是无损编码。有损编码在图像、视频、音频等多媒体信息压缩中比较常见,一是多媒体信息的原始信息量太大,二是利用了人眼的冗余性。在压缩率方面,有损压缩率高于无损,例如:参考序列:Cisco_Absolute_Power_1280x720_5.yuv原始大小:128072083/25=6750KB存档:rar2654KB视频编码器压缩:H264JM100IBPBP结构56KB对比度信息失真:Losswill导致信息失真,但是人眼感官上的冗余是可以利用的。这种失真在一定范围内,不易察觉。从基于内容/波形编码的源建模模型的角度来看,我们称我们要压缩的对象为源。视频可以由视频内容中不同的物体运动组成,也可以是视频中的每个像素点。点组成,如下图:从某种角度来说,基于内容的编码可以达到更高的压缩率,但是需要检测图像的特征点,找出不同的物体,将视频内容分块,以及计算复杂度较高,我们的视频编码大部分还是采用基于波形编码的方法,直观清晰,两者融为一体。在波形编码中,还可以结合视频内容分析来提高压缩率。视频编码标准发展现状/实现框架/AVC和H264实现框架视频编码标准发展现状视频编码标准从1980年代开始制定,至今已有近40年的历史,如下图所示:发展中,从第一代到现在,266已经开始收集信息。每个标准制定和最终解决方案的目标都是将上一代标准的压缩率提高一倍。目前市场上应用最广泛的是h264,包括硬件芯片厂商和软件服务厂商,都支持h264。虽然h265这个相对于h264的新一代编码标准已经起草,而且压缩率比分辨率高。视频序列也比较高。鉴于高昂的专利费和普及问题,从应用的角度来看还比较少,因此成为一些企业的宣传卖点。当然,随着时间的推移,一切都在发展。.视频编码实现框架接下来我们将视频编码框架的细节介绍缩小到H264标准。虽然每个标准的细节和码流语法会有所不同,但一般都采用基于预测和变换相结合的混合编码。模型。AVC/H264的实现框架输入一个视频图像,将图像分割成16*16的编码宏块。编码器作为编码的基本单位,不是直接对原始像素进行压缩处理,而是通过预测,包括帧内预测、帧间预测,得到预测残差,(原始像素与预测像素值之间的残差),进行变换,变换域集中低频系数,高频系数为0,量化,之字形扫描,熵编码输出,量化后的值反量化,反变换,与预测值结合得到重构值,并将块滤波器存储在参考帧列表中,以供后续视频帧编码时参考。视频编码框架:预测(帧内预测/帧间预测)预测编码分为帧内预测和帧间预测。在帧内预测中,像素点的预测参考对象在当前编码的图像帧中,根据编码后的块信息预测当前编码块,消除像素空间中的冗余。其理论依据是图像空间域变化缓慢,相邻像素之间的差异很小。Intraprediction有4x416x16两种模式,每种模式就是下面的预测模式。在帧间预测中,像素块的预测是指已经编码的图像帧。其理论依据是图像时域变化缓慢,运动不剧烈。相邻时间的图像之间有很大的相似性,图像一般可以通过简单的平移运动来建模。帧间预测的内容主要包括参考帧选择、MV搜索和帧间预测块模式选择。变换/量化/熵编码。预测残差经过变换后,像素残差的大部分能量集中在低频部分,高频部分的能量很少。量化后的信息通过无损熵编码传输。以下示例说明了量化系数的影响。一般认为量化是唯一造成损失的部分,其他部分理论上是无损的。量化参数影响编码模式选择、压缩率和失真率。编码器的码率控制控制量化参数值。量化参数的范围是0~51。可见,视频编码压缩是有极限的,不可能随心所欲。量化参数值越高,比特率越低,失真越大,人眼不敏感,或者冗余。当QP>20时,压缩后的监督质量和10没有区别,我们必须选择最合适的qp值,才能达到压缩率高,视频质量好的效果。直播中视频编码策略提高编码效率在实时应用场景中,首先要关注的是编码效率。所谓编码效率是指压缩一帧视频(一幅图像)所需要的时间。我们可以通过以下几点来找出提高编码效率的方法。提高编码压缩率在保证编码效率的基础上,尽可能提高编码压缩率,对原始视频信息进行降噪处理,低通滤波去除不必要的噪声干扰;我们需要从分析视频语义的角度出发,比如Regionofinterest代码。提高编码鲁棒性编码器可以使用切片编码,包括FMO技术。我们的熵编码是基于切片的。不管是CAVLC还是CABAC,都是串行的。一旦出现误码,会影响序列的所有熵解码,但是分片多了,编码的压缩率就降低了,这是一个trade-off。在一些应用场景中,一行使用一个编码切片。将编码后的信息分成不同优先级的包,例如将mv、mbtype等重要信息分成一个数据块,将残差信息分成另一个数据块,这样在丢包的情况下尽量保证重要信息网络完成接收。在解码端,可以采用错误恢复的方法,根据接收到的信息,尽可能多地恢复丢失的信息量,从而达到主观不可感知。下期预览时间:2016年12月7日晚8点方式:在线微信群主题:全球云计算资源整合整合实战讲师:迅达云城运维总监陈真,请关注鸡牛(ji-niu)并回复技术分享。