干掉大小流切换 I 帧!阿里云 RTC QoS 及视频编码联合优化之切流编码
作者|安基程、田伟峰
审校|泰一
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 技术的升级。
图 1. 变分辨率示意图(左:传统插入 I 帧方式;右:参考帧缩放技术)
H.264/AVC 标准的 SP slice 技术可以用于切换两条分辨率一样的视频流,但是对于切换两条分辨率不同的视频流则无能为力。
2. 切流场景简介
图 2. 多流场景示意图
图 2 展示了多流场景,一个 publisher 上有两个 encoder: Enc0, Enc1, 分别发送大分辨率的流和小分辨率的流 (以下简称大流和小流),两路流的画面内容是一样的,只是分辨率,码率不同,所以清晰度不同,subscriber 可以根据自己网络状况等选择订阅不同的流,比如网络好的时候就收大流,网络差的时候收小流,图 2 中共有 6 个 subscriber 也即 6 个 decoder,其中 Dec0, Dec1, Dec2 接收的是大流,Dec3, Dec4, Dec5 接收的是小流。
图 3. 常规切流示意图
图 3 展示了发生切流时的变化,其中 Dec3 刚开始收的是小流,后面由于某种原因(如网络变好)切换到了大流,则 Enc0 必须要发送一个 I 帧来实现切流,此 I 帧会影响到所有接收大流的 subscriber (如图中的 Dec0, Dec1, Dec2,实际情况中可能会有更多的订阅者),造成切流瞬间的编码质量下降或码率突增。图中绿色箭头代表了 Dec3 接收的帧。但是如果直接将 Enc0 的 P 帧送给 Dec3, 肯定也是不行的,因为两条流的参考帧不一样,分辨率也不一样,必然造成解码错误,正是由于这些困难,目前所有的视频编码标准都未能解决这个痛点。然而阿里云 RTC Codec 通过独创的 SSC 技术可以做到在两条分辨率不同的流之间进行切换时也能够利用帧间信息冗余不编 I 帧,提升压缩效率。
图 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% 码率。
图 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% 码率。
图 6. 常规连续切流示例
图 7. 本文 SSC 技术连续切流示例
本测试直接表明的是一个不断切流的场景,如图 6 所示,Dec3 不断的在大小流之间切换,图 6 展示的是用原有编码 I 帧的切流方式,则 Dec3 收到的全是 I 帧,图 7 展示的是用本文的 SSC 技术的切流方式,Dec3 收到的则全是 PSS 帧,本测试说明在这种情况下 PSS 帧可以比 I 帧节省 29% 码率,率失真曲线如图 8 所示。
图 8. PSS 帧压缩性能展示
实际场景中一般不会出现一直切流的情况,本测试表明在切流处,源流利用 PSS 帧可以比 I 帧节省 29% 码率。
综上,利用本文展示的阿里云 RTC 独创的 SSC 技术,在切流处,目标流可以比 I 帧节省 66% 码率,源流可以比 I 帧节省 29% 码率。
「视频云技术」你最值得关注的音视频技术公众号,每周推送来自阿里云一线的实践技术文章,在这里与音视频领域一流工程师交流切磋。公众号后台回复【技术】可加入阿里云视频云技术交流群,和作者一起探讨音视频技术,获取更多行业最新信息。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
5分钟了解ScyllaDB
1 概述 什么是 Scylla?Scylla 官网上面的描述很好的回答了这个问题 The Real-Time Big Data Database Scale-up performance of 1,000,000s of OPS per node, scale-out to hundreds of nodes and 99% latency of <1 msec 翻译过来是 Scylla 是实时大数据数据库,可以支持每个节点 1,000,000 OPS 的垂直扩展性能,水平可以扩展到数百个节点,99% 的访问延迟可以低于 1 毫秒。Scylla 是性能优异的 NoSQL 宽列存储数据库,完全兼容 Apache Cassandra 并提供了更低的延迟,其 shard-per-core 设计使其能够以亚毫秒平均延迟每秒运行数百万次操作。 压测集群:3 节点 CF=3 CL=1 图片来源于网络 在 DB-Engines 的数据库排名中,Scylla 表现了强大的活力,从 16 年开始排名迅速攀升,目前在宽表数据库领域已经超过了 Bigtable 稳居第六名。 下面我们从几个方面来介绍 ...
- 下一篇
各位 PHPer,Serverless 正当时
前言 PHP 的应用范围相当广泛,尤其是在网页程序的开发上, 根据最新 维基百科 显示,2013年4月的统计资料,PHP已经被安装在超过2亿4400万个网站和210万台服务器上, 而根据 W3Techs 的报告,截至2021年9月, 有78.9%的网站使用PHP。 所以 PHP 是世界第一语言至少在 web 开发领域并不是戏称。 而在技术选型上, PHP 主要采用的是 LAMP(全称是Linux + apache + mysql + php) 或者 LNMP(全称是Linux + nginx + mysql + php), 这种成熟稳定的技术框架推动 PHP web 开发生态的繁荣和商业上的成功。 在传统的开发模式中, 开发者自己需要安装维护各种软件的安装、维护升级: 如果您是一个企业用户, 如果业务体量变大或者为了生产环境的稳定和可用性, 使用负载均衡是一个必然的选项: 即此时, PHP 开发者或者线上运维的同学关心的事情多了起来: 每个增加的生产机器都需要重新安装一遍相关软件, 做相同的 nginx 配置以及 php-fpm 的配置, 以及维护每个生产机器的安全更新 假如开发的应用...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS关闭SELinux安全模块
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Hadoop3单机部署,实现最简伪集群
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7安装Docker,走上虚拟化容器引擎之路
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2更换Tomcat为Jetty,小型站点的福音