首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >互动场景下的低延迟编码技术

互动场景下的低延迟编码技术

原创
作者头像
LiveVideoStack
修改于 2020-07-29 02:09:44
修改于 2020-07-29 02:09:44
3.4K0
举报
文章被收录于专栏:音视频技术音视频技术

本文由上海交通大学教授宋利在LiveVideoStackCon2020线上峰会的演讲内容整理而成,从分析视频传输系统延迟入手,分析视频编码延迟的产生机制,总结优化编码延迟的技术手段和业界典型的低延迟编码方案,讨论不同场景的延迟要求,并对后续技术演进发展方向进行展望。

文 / 宋利

整理 / LiveVideoStack

本次分享的主题是互动场景下的低延迟编码技术,内容分为四个方面:一是互动媒体服务;二是低延迟视频编码技术;三是低延迟编码方案;四是应用场景和发展趋势。

1. 互动媒体服务

1.1 视频媒体形态

如图所示,我们将现有典型的视频相关服务按照高通量、强交互两个维度进行划分,其中横坐标表示高通量,纵坐标表示强交互,一些典型的视频映射到图中分布于不同的位置。

左下角部分可以称为基本视频,它涵盖了当前的一些主流应用,包括TV、视频监控、视频会议以及多人视频游戏等,其特点是以二维视频为主,同时交互形式包括单项、双项和多人交互。

如果从这个区域往外扩展,外面一层是可以称之为增强视频,沿高通量维度由高清向超高清、自由视、点云、光场过渡,交互维度包括仿真训练、电竞,两者都演进的方向是VR、AR,最后演进到全触感,也就是视频媒体形态正在由基本视频向增强视频演进,这两个维度某种程度和现在5G中两个维度很契合,高通量对应大带宽,强交互对应低延迟。

这张图显示了流媒体视频的典型服务场景,流媒体服务经过多年的发展,现在已经形成一个比较完整的技术和生态链,从源端、云端、边端到终端,包括背后的技术体系也相对比较趋同。现在经常使用的是以RTMP代表加H.264进行源端的推流,到CDN边缘上通过265,包括下行的HLS协议转换,形成流媒体服务的基本流,然后用户侧通过播放器从源端进行拉流,获得流媒体直播的体验。这套架构基本上比较成熟和完善,各家公司的竞争点主要体现在用不同的编码器进行替换,不同上下行协议的改造,以及CDN资源的部署,以此获得竞争优势。从整个媒体服务形态变化的角度看,大部分的努力是针对前面提到的通量这个维度。

图中展示了流媒体实时交互演进的一个典型示例,在直播场景下,通过手机小屏发出交互指令,可以在大屏播放时产生交互的反馈,获得一些个性化的体验;比如在下行过程中发起用户指令,叠加符合正在播放内容的、个性化渲染特效。在这种场景下,整个流媒体架构就会发生变化。在此之前是在云端、边端进行处理,与终端并没有太多交互,技术要素变化不大;但是增加互动维度后,在边缘侧就可以引入很多新的要素。

1.2 系统组成要素

构建一套实时的流媒体系统需要对系统中多个方面进行改进,除了视频编码标准外,媒体传送协议和视频渲染技术都需要实时化和低延迟处理。视频编码方面,低延迟编码技术可以和多种编码标准进行结合。

1.3 互动媒体服务系统的权衡

互动媒体服务系统与单点技术不同,需要考虑多方面因素的权衡。首先要满足低延迟,否则影响互动效果。其次是高体验,互动媒体是在现有媒体上叠加的效果,所以体验是也应该是叠加式的,不能因为互动而使原有基础视频的画质下降。最后是用户的大规模,与视频会议系统不同,一场会议很少会出现超过千人级的规模,互动流媒体场景下,由于更接近直播流媒体,它的用户数量会比较多。

2. 低延迟视频编码技术

2.1 视频编解码

第二部分介绍了低延迟视频编码的共性技术,这些技术可能会用在不同的编码方案中。视频编码器有几大阵营,在分发域有:H.264/HEVC/VVC、AVS2/3、VP9/AV1,在分发域中压缩性能是它的主要驱动力。在制作域有:TICO/JPEG-XS、JP2K、LLVC、XAVC、ProRes,这些编码器虽然是应用于视频中,但从技术角度来说更多是图像编码器。

将两大类编码器放在一起,更容易看出彼此之间的差异性,图中展示了五个维度,分别是:高压缩比、低延迟、低复杂度、高质量、平台友好性。将五个维度进行比较,分发域的编码如图所示,它的特点是高压缩比,但延迟和复杂度比较大,质量没有制作域那么高,相对来说压缩比就比较大。

帧内标准如JEPG、JPEG2K、XAVC、WebP,在延迟性和复杂度方面要好些,但代价是压缩比要差些,因为它应用的是专业领域场景,所以质量和码率比较高。

JPEG XS 是JPEG阵营过去两年推出的一个标准,强调复杂度和速度,它的性能在低延迟、低复杂度方面表现比较优秀,但压缩比较差。由图可知,要根据不同应用场景做出均衡性选择。

2.2 编码延迟的构成

编码延迟是指从视频单元(通常是帧)采集到编码完成生成码流所消耗的时间。公式中的max是表示以编码单元中花费时间最大的模块为延迟时间。

编码延迟的来源主要包括三部分:一是视频帧参考关系,二是编码流水线的设计,三是编码模块的复杂度。

2.2.1 低延迟参考结构

左图展示的是HEVC RA模式,典型的编码器一般使用双向B帧,在提高压缩率的同时会带来帧重排序延迟,在HEVC的典型RA模式中,双向参考关系额外引入了3帧延迟。

右图展示的是HEVC的LDP模式,如果只考虑延迟,HEVC的LDP模式只使用P帧,适用于低延迟场景,其单向参考关系不引入额外的延迟,但是带来了9%~42%的编码性能损失。

2.2.2 低延迟编码帧结构

周期性帧内刷新(PIR)编码结构是在LDP模式的基础上进一步降低延迟,被很多商业编码器所支持,被称为超低延迟的编码配置。

如图所示,它的原理是将一帧切成四个纵向的条块,每隔四帧就可刷新一遍。

它的特点主要有:一是常用的超低延迟配置模式,输出码率平缓,缓冲区溢出概率小。二是可以确保在一个刷新周期内完全恢复错误。三是刷新的频率方向,可以根据视频内容进一步优化。

2.2.3 编码流水线优化

编码器的整体架构决定了编码器的延迟和并行度,主要分为三种:帧处理、块处理、条处理。

帧处理是指对每个运动估计进行预测,编码器处理的模块是以帧为单元的,它会将整帧运动估计处理完,再进行运动补偿,在MPEG2这种比较简易的编码器中经常使用这种结构。

块处理相当于单线程参考编码器中的小逻辑,将每个CTU或每个宏块逐步推送到运动估计、预测等部分,X-循环是指每个块里会进行不同模式的选择,是不同模式的循环。Y-循环是指所有的块可以再循环一遍。其中每块中的宏块可以独立输出,不需要等整个帧处理完,所以它的好处是输出粒度小。但如果将块级的编程变成高并发、流水化结构就比较困难,因为粒度小,想做到流水化结构,处理单元要足够多。需要说明,编解码上下文很关键,切断上下文则编码预测性能会受到大的影响。

条处理是基于两者之间的处理,每一个内循环的粒度是以条块为基础,外循环是不同条块之间流水化推进。同时,运动估计和运动补偿耦合比较好适合于整体计算,可以将运动估计和预测放到一个计算单元上,其余的部分组合到另一个上,这样可以增加多级流水的处理。

这三种处理方式属于任务级分解,也是并发、并行化操作。此外,还有数据级分解,就是数据被切割并分配给不同的处理器。右图是在处理4K时可以切成多个高清进行处理,可以用到四种方案:帧级并行、slice级并行、tile级并行、波前并行处理。在实际的编码中,并发、并行化操作中任务级分解和数据级分解是混合使用的。

2.2.4 低延迟并行码率控制

一旦变成并行流水化,除了各个基本模块的调度,还要涉及整体码率控制的调整。码流的平稳程度是影响编码缓冲区延迟的重要因素,缓冲区上溢会造成数据丢失;缓冲区下溢会造成编码器无法得到数据,进而使得视频卡顿。在条/块级并行编码方案中,码率控制模型需要重新优化设计。

2.2.5 编码模式快速预测

第三个方面涉及编码中各个模块的复杂度,当代编码器的编码模式比较多,组合量比较大,即使每种编码模式足够快也不行,核心在于如何快速的在众多候选模式中选出准确的哪个,这就需要根据某种属性快速做出决策。这时深度学习的方法可以发挥作用,近期我们的一个工作中,采用基于深度学习预测CU划分和基于统计学习预测PU模式组合,替换高复杂度的递归编码探索,实现在性能基本保持不变前提下实现复杂度的显著降低。

3. 低延迟编码方案

3.1 SVT构架

这部分介绍一些典型的系统编码方案,首先是英特尔开源的SVT架构,它支持了前面所提到的很多要素,设计比较不错。

SVT构架细节

SVT架构是基于软件的视频编码优化框架,通过联合前处理-编码内部算法,实现性能-延迟-质量的三维优化,并针对Xeon处理器进行优化。

之所以称SVT为三维并行架构,因为它解耦视频分析、模式选择与编码,实现进程级并行;分层GOP内的帧级并行;将一帧图像分为不同条块,实现条块级并行。

SVT也照顾到速度和码率的主观质量优化,对于速度方面的主观质量优化有:首先根据整体复杂度目标,设置搜索的划分模式集合;其次根据块的HVS重要性进行区分;对于码率方面的主观质量优化有:一是根据HVS重要性调整QP偏置;二是降低人眼不敏感区域变换域高频分量。

3.2 H.265低延迟方案

SVT支持很多个编码器,以SVT-HEVC为例,它支持了13个preset(M0~M12),在速度和视觉质量之间实现了较好的权衡。其次,采用客观质量模式(默认)用于权衡速度和客观质量的关系,性能和速度优于x265。而且,最快档次的延迟在百毫秒级别,压缩比在300:1左右,配合其他低延迟技术可以降为小几十毫秒级别。

这部分介绍了H.265低延迟方案的硬件编码器,首先,NETINT基于自研芯片设计了Codensity T408视频转码器,在ASIC中进行复杂的编解码算法处理,从而最小化主机CPU的使用率,编码延迟约为5ms。

其次,NVIDA基于GPU设计了NVENC编码器,可以大幅度释放CPU和内存的负载压力,编码延迟约为3-10ms。

3.3 H.264低延迟方案

前面的两个方案主要面向云端的转码、流媒体服务等,还有一类是面向移动终端的,除了低延迟之外,对功耗、复杂度要求更严格,在这种场景下使用比较多的方案是基于H.264。H.264标准已经被工业界广泛认可和应用,其作为H.265的上一代标准,本身的编码复杂度相对较低,现有低延迟方案大都基于硬件设计。

左图是TPCast方案,它使用CAST公司的H.264-E-BPF IP核编码器,基于H.264 Baseline Profile设计。而且采用CAVLC选项降低熵编码复杂度,并采用帧内刷新技术降低比特率峰。它的编码延迟为10ms级别,压缩率为50:1。

右图是HHI方案,它基于H.264 Baseline Profile设计,采用Intra(16×16和4×4)和VLC编码(不使用CABAC),编码延迟为宏块行级,压缩率为10:1~20:1。两种方案应用的场景不同。

3.4 JPEG-XS低延迟方案

JPEG-XS低延迟方案是更低延迟的方案,它支持Main、Light、Light-subline、High这4种配置编码延迟为毫秒甚至微秒级,视觉无损情况下的压缩率为2:1~6:1,是一个简化的帧内压缩技术。

它的编码过程有:样本拉伸、DC偏移量去除、可逆颜色变换、小波变换、预量化、常规量化、熵编码。JPEG-XS主要是由IntoPIX公司推动的。

3.5 新型的低复杂度/低延迟编码方案

以V-Nova为代表介绍一下新型的低复杂度/低延迟编码方案,V-Nova P+立项的MPEG 5--LCEVC标准,为内容分发域提供高压缩率、低复杂度方案。

左图所展示的编码结构类似于可伸缩编码SVC,分为基本层和增加层,网络带宽的适应性不是其考虑重点,而是考虑终端的兼容性以及复杂度,面向内容分发域。可以应用的场景如当手机上有一块硬解码能力的芯片,支持264 HD,如果传来一个4K的内容,利用这种方案可以进行分层,基本层利用264 HD,增强层用HEVC 4K编码,这样基本层可以使用手机的硬解码264 HD能力,而增强层可以使用复杂度比较低的软件能力,将其进一步增强解码提升到4K。

除此之外,V-Nova公司也正在SMPTE的制作域中推VC-6,主要用于专业的内容制作和影像应用。它的卖点是结合了机器学习技术和优化的码率控制,使用intra-only配置,编码延迟为80ms,编码的HD流为60Mbps。

4. 应用场景和发展趋势

4.1 应用场景

图中展示的是不同延迟量级对应的应用场景的划分,低延迟要与不同场景进行耦合,不同场景对延迟量的要求不同。图中横轴表示编码延迟,根据延迟时间将场景分为四种,纵轴表示压缩比。

秒级延迟场景以赛事直播为例,它对编码延迟要求并不高,之前一般采用H.264实时编码,对4K或8K视频开始使用H.265或AVS2编码标准实时编码。

百毫秒级延迟场景如视频通信、无线投屏,视频通信可接受的端到端延迟为~200ms。以ZOOM为例,它采用了H.264标准编码,编码延迟为11ms(720p),端到端延迟要求低于150ms。无线投屏以Miracast为例,它认证的无线设备端到端延迟不超过250ms,使用H.264和H.265(可选)标准,编码延迟约10~100ms。

十到一百毫秒级别称之为十毫秒级延迟场景,以云VR、云游戏为例,一般端到端延迟低于100ms时才能获得良好的体验。

NVIDA GeForce Now使用NVENC硬件编解码器可实现3-10ms的编码(H.265)和解码延迟,端到端延迟约75ms。

Google Stadia采用H.264和VP9编码标准,端到端延迟约130ms。

毫秒级延迟大多数场景不超过10毫秒,应用领域涵盖远程制作、数字孪生、高级XR等,往往同时需要非常高的视频质量和超低延迟,需要TSN/TTE(时间敏感/触发)类的基础网络架构支持,目前可选择的有JPEG-XS、SMPTE无压缩的解决方案,压缩效果还不太好,所以高压缩比下的超低延迟编解码仍然存在巨大技术挑战。

4.2 发展趋势

近期在多视角、自由视方面,华为、优酷、咪咕都做过一些示范应用,即将原先导播切换的自由度传送到用户侧,由用户进行发送,用户在观看流媒体视频中可以根据自己的喜欢进行视角的切换,以实现媒体服务的个性化。

以游戏类和远程操控类为代表的场景,以往观看流媒体是被动接收,现在大小屏都可以进行实时性交互,因此互动体验增强,这也是互动媒体发展的趋势。

本次分享主要介绍了低延迟互动媒体服务中的低延迟视频编解码环节的相关技术。要做到较好的低延迟互动媒体服务,还需要低延迟传送协议、实时图像渲染以及基础ICT网络技术整体的演进。就编码而言,需要结合平台特性重构编码实现架构,细化编码各工具性能与延迟关系。

比较理想的做法是面向不同延迟的弹性编码方案,如右图所示,将RD曲线按照延迟-压缩比的关系,形成一套根据场景需求进行弹性配置的编码框架,这是近期低延迟编码努力的方向。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
带带弟弟OCR,Python 的一个识别验证码的开源库
对于OCR文字提取,在之前也介绍过了Umi-OCR 这个工具,那么我们今天要分享的这个主要是来用于解决验证码相关的问题的一个开源工具。ddddocr ,作者的github项目地址如下:https://github.com/sml2h3/ddddocr?tab=readme-ov-file
huolong
2024/04/01
2.7K1
phpy基于深度学习ddddocr库进行OCR双重数字识别
ddddocr(Deep Double-Digital Digits OCR)是一个基于深度学习的数字识别库,专门用于识别双重数字(双位数字)的任务。它是一个开源项目,提供了训练和预测的功能,可用于识别图片中的双位数字并输出其具体的数值。
Tinywan
2024/09/17
3140
phpy基于深度学习ddddocr库进行OCR双重数字识别
5行Python实现验证码识别,太稳了!
当时采用的是pillow+pytesseract,优点是免费,较为易用。但其识别精度一般,若想要更高要求的验证码识别,初学者就只能去选择使用百度API接口了。
小小詹同学
2021/07/27
13.9K0
5行Python实现验证码识别,太稳了!
Python自动打码,DdddOcr通用验证码自动识别库
在Python爬虫中,或者使用POST提交的过程中,往往需要提交验证码来验证,除了人工打码,付费的api接口(打码接口),深度学习识别验证码,当然还有适合新人使用的OCR验证码识别库,简单的验证码是可以完全实现自动打码的,比如下面本渣渣分享的通用验证码自动识别库:ddddocr(带带弟弟OCR)!
二爷
2021/11/19
3.9K0
Python自动打码,DdddOcr通用验证码自动识别库
Python ddddocr 构建 exe 程序后运行报错:Failed Load model ... common_old.onnx
👋 你好,我是 Lorin 洛林,一位 Java 后端技术开发者!座右铭:Technology has the power to make the world a better place.
Lorin 洛林
2024/01/17
6690
Selenium验证码ddddocr识别:带带ddocr
思路: 由于验证码不是图片,需要用到selenium进行截取验证码,然后通过ddddocr识别数字
德宏大魔王
2023/08/08
9670
Selenium验证码ddddocr识别:带带ddocr
Python实现验证码识别
之前有个爬虫需求,但每次请求都需要进行验证码识别,故需要ocr识别,推荐一个Python免费的验证码识别-ddddocr(谐音带带弟弟OCR)
用户9925864
2022/07/27
1.5K0
Python实现验证码识别
项目实战-RuoYi后台管理系统-用Python基于图像识别技术处理登录页面的验证码
之前在群里咨询,做自动化的时候,接口怎么去处理验证码的,接下来介绍一下如何通过图像识别技术去实现。
小博测试成长之路
2022/04/27
1.2K0
项目实战-RuoYi后台管理系统-用Python基于图像识别技术处理登录页面的验证码
【验证码识别专栏】今天不炼丹,用 cv 来秒验证码
本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!
K哥爬虫
2024/12/02
3630
【验证码识别专栏】今天不炼丹,用 cv 来秒验证码
【Python爬虫项目实战三】Ddddocr识别Ocr过开放猫验证码(接Authorization认证更新)
在对接之前,我们先看一下识别效果,可见效果一般,存在个别识别不出来,又因为需要付费于是不考虑
德宏大魔王
2023/08/08
1.3K0
【Python爬虫项目实战三】Ddddocr识别Ocr过开放猫验证码(接Authorization认证更新)
[C#]使用winform部署ddddocr的onnx模型进行验证码识别文字识别文字检测
ddddocr是一个强大的Python OCR(光学字符识别)库,特别适用于验证码识别。它利用深度学习技术,如卷积神经网络(CNN)和循环神经网络(RNN),对图像中的文字进行高效准确的识别。虽然ddddocr本身是一个Python库,但你可以通过一些方法将其功能集成到Winform应用程序中,以进行验证码识别、文字识别和文字检测。
云未归来
2025/07/22
880
[C#]使用winform部署ddddocr的onnx模型进行验证码识别文字识别文字检测
验证码识别最佳方案,你不来试试?
验证码分析:图片上有折线,验证码有数字,有英文字母大小写,分类的时候需要更多的样本,验证码的字母是彩色的,图片上有雪花等噪点,因此识别改验证码难度较大。
测试开发囤货
2021/08/11
3.3K0
验证码识别最佳方案,你不来试试?
基于DdddOcr通用验证码离线本地识别SDK搭建个人云打码接口Api
最近介绍了一款免费的验证码识别网站,识别效率太低,考虑到ddddocr是开源的,决定搭建搭建一个,发现原作者sml2h3已经推出好久了,但是网上没有宝塔安装的教程,于是本次通过宝塔搭建属于自己的带带弟弟OCR通用验证码离线本地识别
德宏大魔王
2024/09/09
6440
我的AI之路 —— OCR文字识别快速体验版
还记得前一阵某小盆友拿过来一个全是图片的ppt,让我把里面的文字给抠出来(我当时很震惊!!!),随后在网上随便找了个OCR的在线文档转换软件,就给转过来了——这里面用到的技术就是OCR文字识别,所以本篇就带大家宏观上了解一下文字识别的技术方案与实现过程。
用户1154259
2018/08/20
4.3K0
我的AI之路 —— OCR文字识别快速体验版
盘点一个Python网络爬虫过验证码的问题(方法一)
前几天在Python最强王者群【鶏啊鶏。】问了一个Python网络爬虫的问题,这里拿出来给大家分享下。
Python进阶者
2023/08/31
4760
盘点一个Python网络爬虫过验证码的问题(方法一)
快速部署属于自己的 OCR API
上篇文章我们讲解了验证码识别的最佳解决方案,今天我们把验证码识别的能力,服务化,对外输入一个OCR接口。
测试开发囤货
2021/08/13
2.1K0
快速部署属于自己的 OCR API
基于python语言识别验证码(自动化登录,接口验证)
对每个人而言,真正的职责只有一个:找到自我。然后在心中坚守其一生,全心全意,永不停息。所有其它的路都是不完整的,是人的逃避方式,是对大众理想的懦弱回归,是随波逐流,是对内心的恐惧 ——赫尔曼·黑塞《德米安》
山河已无恙
2023/11/04
7980
带带弟弟ocr和pip下载换源
前阵子用python弄个登录器,需要填写简单验证码的,想通过ocr的方式进行识别,所以搜索了一番,发现了个比较有用的库——ddddocr,戏称带带弟弟ocr。
偶尔敲代码
2023/12/26
4570
带带弟弟ocr和pip下载换源
【验证码逆向专栏】最新某验三代滑块逆向分析,干掉所有的 w 参数!
本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!
K哥爬虫
2024/01/26
5240
【验证码逆向专栏】最新某验三代滑块逆向分析,干掉所有的 w 参数!
打包py、文件转换、验证码识别、获取文件等问题
在日常中我们写好的pyhton脚本每次运行时都需要安装软件,但是这样造成了一个不好的现象就是,你写好脚本后需要供别人使用的时候,别人没下载软件则无法运行脚本,很麻烦很难受。
用户6841540
2024/07/28
2960
推荐阅读
相关推荐
带带弟弟OCR,Python 的一个识别验证码的开源库
更多 >
交个朋友
加入腾讯云官网粉丝站
蹲全网底价单品 享第一手活动信息
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档