干掉大小流切换 I 帧!阿里云 RTC QoS 及视频编码联合优化之切流编码

简介: 阿里云 RTC 独创 「SSC 技术」

如果要在两条分辨率不同的视频流之间切换,尽管这两条流的画面内容基本一样,但是由于两条流的参考帧不同,分辨率不同,目前所有的视频编码标准都无法做到利用帧间预测编码得到编解码匹配的结果,而帧内预测编码即I帧的压缩效率是非常低下的,因此在切流处很容易造成视频质量下降或由于码率突增引起的卡顿;阿里云RTC codec 在前代标准的基础之上通过独创的切流编码技术和网络层QoS体系的紧密配合可以做到在此种场景下仍然利用帧间预测编码P帧且编解码匹配,相比于I帧显著提升压缩效率,提升视觉体验。


作者|安基程、田伟峰

审校|泰一


1. 背景介绍

一条视频流,如果中途改变分辨率,对于目前主流的 H.264/AVC, H.265/HEVC 标准来说,必须要编码 I 帧,即只能利用帧内信息冗余,如图 1(左)所示;新一代的编码标准如 AV1,H.266/VVC 等可以做到利用帧间信息冗余,不编 I 帧,以提升压缩效率,基本原理是通过对参考帧进行缩放,使得参考帧和当前帧的分辨率一致,如图 1(右)所示,阿里云 RTC codec 的变分辨率编码(Resolution Change Coding,以下简称 RCC)技术也具备该能力,详情请参考我们之前的分享:《阿里云 RTC QoS 弱网对抗之变分辨率编码》


本文将要介绍的切流编码(Stream Switch Coding,以下简称 SSC)技术是对 RCC 技术的升级。


image.png

图 1. 变分辨率示意图(左:传统插入 I 帧方式;右:参考帧缩放技术)


H.264/AVC 标准的 SP slice 技术可以用于切换两条分辨率一样的视频流,但是对于切换两条分辨率不同的视频流则无能为力。


AV1标准的S frame 虽然可以用于从高分辨率的流切换到低分辨率的流,但是其会造成编解码不匹配,有误差传播风险。


2. 切流场景简介

image.png

图 2. 多流场景示意图


图 2 展示了多流场景,一个 publisher 上有两个 encoder: Enc0, Enc1, 分别发送大分辨率的流和小分辨率的流 (以下简称大流和小流),两路流的画面内容是一样的,只是分辨率,码率不同,所以清晰度不同,subscriber 可以根据自己网络状况等选择订阅不同的流,比如网络好的时候就收大流,网络差的时候收小流,图 2 中共有 6 个 subscriber 也即 6 个 decoder,其中 Dec0, Dec1, Dec2 接收的是大流,Dec3, Dec4, Dec5 接收的是小流。


image.png

图 3. 常规切流示意图


图 3 展示了发生切流时的变化,其中 Dec3 刚开始收的是小流,后面由于某种原因(如网络变好)切换到了大流,则 Enc0 必须要发送一个 I 帧来实现切流,此 I 帧会影响到所有接收大流的 subscriber (如图中的 Dec0, Dec1, Dec2,实际情况中可能会有更多的订阅者),造成切流瞬间的编码质量下降或码率突增。图中绿色箭头代表了 Dec3 接收的帧。但是如果直接将 Enc0 的 P 帧送给 Dec3, 肯定也是不行的,因为两条流的参考帧不一样,分辨率也不一样,必然造成解码错误(编解码不匹配),正是由于这些困难,目前所有的视频编码标准都未能解决这个痛点。然而阿里云 RTC Codec 通过独创的 SSC 技术可以做到在两条分辨率不同的流之间进行切换时也能够利用帧间信息冗余不编 I 帧,提升压缩效率。


image.png

图 4. 本文 SSC 技术切流示意图


图 4 展示了利用 SSC 技术进行切流,同样是 Dec3 从小流切换到大流,在切流时 Enc0 编码了一个 PDS 帧,Enc1 编码了一个 PSS 帧,图中的绿色箭头表示了 Dec3 接收的帧,其通过接收一个 PSS 帧实现了切流。PDS 帧本文称之为目标流切换帧(P frame for Destination-stream Switch),PSS 帧本文称之为源流切换帧(P frame for Source-stream Switch),Dec0, 1, 2 和之前相比,接收的 I 帧变成了 PDS 帧,Dec3 接收的 I 帧变成了 PSS 帧,PDS 帧和 PSS 帧都利用了帧间信息冗余进行编码,因此压缩效率相对于 I 帧有显著提升。


3. 测试结果

PDS 帧压缩性能测试

本文通过测试一个视频会议序列 FourPeople 来比较 I 帧,P 帧,和 PDS 帧的压缩性能。将该序列分别压缩为全 I 帧,全 P 帧(除了第一帧为 I 帧),和全 PDS 帧(除了第一帧为 I 帧)。图 5 展示了压缩结果,横坐标为码率,纵坐标为 PSNR,精确计算 BD-rate 显示,同等质量下,P 帧可以比 I 帧节省 93% 码率,PDS 帧在具备 I 帧的切流能力的同时可以比 I 帧节省 66% 码率。


image.png

图 5. PDS 帧压缩性能展示


本测试直接说明如果将一个序列每帧都编码为 I 帧,则其每帧都具备切流能力,但是损失了压缩性能,如果都编码为 P 帧,虽然可以比 I 帧节省 93% 码率,但是完全不具备切流能力,如果都编码为 PDS 帧,则可以在保留 I 帧切流能力的同时,比 I 帧节省 66% 码率。


实际场景中一般不会每帧都出现切流的情况,本测试表明在切流处,目标流利用 PDS 帧可以比 I 帧节省 66% 码率。


PSS 帧压缩性能测试

由于 PSS 帧涉及到分辨率的切换,用传统(如 H.264, H.265 标准)的 P 帧已无法编码,所以本文只比较了 I 帧和 PSS 帧的压缩性能。本文使用了一个大小分辨率帧交错的视频会议序列来测试,即偶数帧为大分辨率,奇数帧为小分辨率,分别编码全 I 帧,和全 PSS 帧(除了第一帧为 I 帧)。同等质量下,PSS 帧比 I 帧可以节省 29% 码率。

image.png

图 6. 常规连续切流示例


image.png

图 7. 本文 SSC 技术连续切流示例


本测试直接表明的是一个不断切流的场景,如图 6 所示,Dec3 不断的在大小流之间切换,图 6 展示的是用原有编码 I 帧的切流方式,则 Dec3 收到的全是 I 帧,图 7 展示的是用本文的 SSC 技术的切流方式,Dec3 收到的则全是 PSS 帧,本测试说明在这种情况下 PSS 帧可以比 I 帧节省 29% 码率,率失真曲线如图 8 所示。


image.png

图 8. PSS 帧压缩性能展示


实际场景中一般不会出现一直切流的情况,本测试表明在切流处,源流利用 PSS 帧可以比 I 帧节省 29% 码率。


综上,利用本文展示的阿里云 RTC 独创的 SSC 技术,在切流处,目标流可以比 I 帧节省 66% 码率,源流可以比 I 帧节省 29% 码率。


「视频云技术」你最值得关注的音视频技术公众号,每周推送来自阿里云一线的实践技术文章,在这里与音视频领域一流工程师交流切磋。公众号后台回复【技术】可加入阿里云视频云技术交流群,和作者一起探讨音视频技术,获取更多行业最新信息。

image.png

相关文章
|
1月前
|
SQL 存储 JSON
阿里云数据库 SelectDB 内核 Apache Doris 2.1.0 版本发布:开箱盲测性能大幅优化,复杂查询性能提升 100%
亲爱的社区小伙伴们,Apache Doris 2.1.0 版本已于 2024 年 3 月 8 日正式发布,新版本开箱盲测性能大幅优化,在复杂查询性能方面提升100%,新增Arrow Flight接口加速数据读取千倍,支持半结构化数据类型与分析函数。异步多表物化视图优化查询并助力仓库分层建模。引入自增列、自动分区等存储优化,提升实时写入效率。Workload Group 资源隔离强化及运行时监控功能升级,保障多负载场景下的稳定性。新版本已经上线,欢迎大家下载使用!
阿里云数据库 SelectDB 内核 Apache Doris 2.1.0 版本发布:开箱盲测性能大幅优化,复杂查询性能提升 100%
|
3月前
|
弹性计算 Ubuntu Linux
【阿里云】阿里云ECS云服务器幻兽帕鲁游戏优化及存档导出导入(Ubuntu)
【阿里云】阿里云ECS云服务器幻兽帕鲁游戏优化及存档导出导入(Ubuntu)
1476 4
|
27天前
|
存储 SQL 数据管理
阿里云数据库 SelectDB 内核 Apache Doris 如何基于自增列满足高效字典编码等典型场景需求|Deep Dive 系列
自增列的实现,使得 Apache Doris 可以在处理大规模时展示出更高的稳定性和可靠性。通过自增列,用户能够高效进行字典编码,显著提升了字符串精确去重以及查询的性能。使用自增列作为主键来存储明细数据,可以完美的解决明细数据更新的问题。同时,基于自增列,用户可以实现高效的分页机制,轻松应对深分页场景,有效过滤掉大量非必需数据,从而减轻数据库的负载压力,为用户带来了更加流畅和高效的数据处理体验。
|
30天前
|
人工智能 IDE API
灵动指尖 :阿里云智能编码插件 更好的为IDE内置社区服务
灵动指尖 :阿里云智能编码插件 更好的为IDE内置社区服务
|
2月前
对接阿里云RTC
对接阿里云RTC
30 0
|
3月前
|
存储 关系型数据库 MySQL
阿里云X-Engine引擎:优化大规模电子商务交易处理的新选择
阿里云X-Engine引擎:优化大规模电子商务交易处理的新选择 随着电子商务的飞速发展,数据量的爆发式增长使得数据库面临着巨大的挑战。为了解决这个问题,阿里云数据库产品事业部研发了自研的联机事务处理OLTP(On-Line Transaction Processing)数据库存储引擎——X-Engine。作为PolarDB的存储引擎之一,X-Engine已经广泛应用在阿里集团内部诸多业务系统中,大幅缩减了业务成本,同时也作为双十一大促的关键数据库技术,挺过了数百倍平时流量的冲击。
31 1
|
3月前
|
存储 人工智能 Kubernetes
阿里云ACK助力GPU成本优化,实现灵活管理
摘要:本文将介绍如何在阿里云容器服务ACK中,利用cGPU技术,共享GPU算力,提高GPU利用率,降低TCO。
58 2
|
4月前
|
机器学习/深度学习 人工智能 弹性计算
阿里云林立翔:基于阿里云GPU的AIGC小规模训练优化方案
阿里云弹性计算林立翔在【AIGC】话题下带来了题为《基于阿里云GPU的AIGC小规模训练优化方案》的主题演讲,围绕生成式AI技术栈、生成式AI微调训练和性能分析、ECS GPU实例为生成式AI提供算力保障、应用场景案例等相关话题展开。
|
2月前
对接阿里云RTC
对接阿里云RTC
48 0
|
5月前
|
SQL 关系型数据库 MySQL
阿里云国际站代理商:如何优化阿里云RDS MySQL云数据库?
阿里云国际站代理商:如何优化阿里云RDS MySQL云数据库?随着互联网的快速发展,越来越多的企业开始关注和使用云计算技术。阿里云作为全球领先的云计算服务提供商,其云数据库产品——RDS MySQL在市场上备受欢迎。那么,如何优化阿里云RDS MySQL云数据库呢?本文将从以下几个方面为大家详细介绍。