声网许振明:RTC 场景 UHD 视频应用和探索

news2024/11/25 10:51:57

在这里插入图片描述

大家好,我是声网的视频工程师许振明,今天跟大家主要介绍一下声网在 RTC 场景 UHD 视频的应用和探索。主要基于声网 HFR 和 VDR 两个系统来展开分享。

随着 RTC 技术的发展和应用,越来越多的场景都需要接入 RTC 的能力。尤其是随着编码技术、设备能力的迭代,应用场景对视频分辨率、帧率、色彩还原提出了更高的要求。

声网 RTC 在 UHD 视频 4K60FPS、HDR 方面做了一些工程实践和探索,主要应用在教育双师、高端会议、体育运动等场景。下面我们介绍下声网 UHD 视频的技术支撑,探讨下 4K60FPS、 HDR 产品化上遇到卡顿、设备适配相关的典型问题。

1、UHD

UHD 是 Ultra High Definition 的缩写,也就是超高清的意思。超高清的标准一般是当分辨率达到 4K 或以上,也就是 3840x2160 分辨率及以上,与之对应的概念是 FULL HD、HD。

UHD 视频的概念出现的很早,传统的视频领域、家庭电视、传统的视频直播等都有所应用。UHD 视频有 5 大要素:

  • 超高清:4K、8K
  • 高帧率:渲染
  • 高动态范围:HDR
  • 宽色域:WCG
  • 色深:10bit、12bit

对于 RTE UHD 视频而言,即继承了传统 UHD 视频的几大要素,也做了一些扩充:

  • 超高清:4K、8K
  • 高帧率:采集、渲染
  • 高动态范围:HDR
  • 宽色域:WCG
  • 色深:10bit、12bit
  • 色彩范围:Limit、Full
  • 低延时

RTC 区别于传统直播很重要的一个优势,便是低延时,不能因为分辨率的提升影响延时的效果。

2、声网 UHD 视频

在声网的业务场景中,主要通过 HFR(high frame rate)、VDR(variable dynamic range) 2 套系统实现 UHD 视频的支持。

HFR 主要涉及的是超高清、高帧率和低延时;VDR 包含了高动态范围、HDR 到 SDR 的转换、宽色域、色深、色彩范围。

在这里插入图片描述

如上图右侧所示,我们对 UHD 视频的能力进行了简单的分层。

硬件层以相机为例,至少需要能采集 4K60FPS 的相片;显示设备也需要支持 HDR 的显示效果;系统层包含所有业务场景中应用的系统。假如系统因版本问题不支持色彩管理或者色域管理,对于 HDR 效果的实现会增加难度。

再往上是声网提供的基础能力层。比如我们前面提到的 HFR、VDR,以及新一代编码算法 H.265、传输 SD-RTN;业务层包含各种指标、UHD 和基础能力层为业务提供的 API。

最顶部是应用层。声网作为一家 ToB 的公司,针对不同行业的客户会提供不同的场景应用能力,用业务层对应并支撑应用层。

对于 HFR 我们制定了几个指标:

  • 不掉帧
  • 无卡顿
  • 延时
  • 清晰度

对于 VDR 的指标则主要是针对于色彩相关,包括:

  • 色彩、色差
  • 对比度、亮度
  • MOS
  • 设备适配

下面我们针对 HFR 和 VDR 分别进行展开介绍。

3、HFR

上述视频中有四块手机屏幕,右上位置的屏幕中播放的视频没有经过优化,可以看出存在明显的卡顿。这是我们常见的一个卡顿场景,虽然带宽足够,但因为帧率较低所以造成了主观上严重的卡顿。

除帧率外,对于卡顿的另一个评价标准是均匀度。如在 50 帧的视频中,每两帧的间隔是 20 毫秒,唯独第 47 帧和 48 帧间隔了 200 毫秒,这种不均匀的情况也会导致明显的卡顿。

在 RTC 场景中,影响卡顿的因素主要有三个:

  • 网络
  • PIPELINE
  • 性能

网络传输中的丢包或抖动,会导致卡顿;视频 PIPELINE 中掉帧、重复帧、吞帧以及抖动造成的不均匀,也会使得帧率或均匀度出现问题,从而导致卡顿;性能导致的卡顿主要是 CPU 或者 GPU 负载较高时,出现耗时较高的情况。

通过我们的测试,当 CPU 跑到 85% 以上时,会明显影响引擎的工作,进而出现卡顿的风险。所以建议把 CPU 的占有率保持在 70% 以下,从而保证较好的处理性能。

现阶段常见的RTC 场景是 720FPS15、720FPS30 或者 1080FPS50,4K60FPS 因为对 SDK 负载的压力以及各个环节的处理精度提出了更高的要求,比如带宽、线程调度、内存管理、采集精度、上屏帧率等,目前一般只应用于某些专业的场景。

另外,条件要求越高便越容易出现问题,越靠近最终效果主观越难判断。60FPS 和 10FPS 的区别人眼是可以分辨的,但 56FPS 和 57FPS、60FPS 的区别,在人眼看来几乎没有不同,因此需要借助专业的量化工具来进行测量。

量化的方法一般有两种,第一种是 perfdog 方法,通过统计屏幕 Display 新一帧后真实刷新的 FPS 和帧耗时。

在这里插入图片描述

这种方法的优点是可以看到整个业务的真实帧率,并且比较贴近用户的主观感受。缺点是无法检测出当视频中出现的重复帧。

举个例子。当 60 帧的视频中第 56 帧和 57 帧是重复帧时,人眼明显可以看出卡顿,但 perfdog 仍然会显示 60 帧的刷新,检测不到出现的重复帧。对此,声网进行了方案的优化,基于相邻帧的相似度和间隔提取,来解决重帧检测不到的问题。

这种方法主要通过对相邻的两帧进行相似度的计算,当相似度为 100%,也就是完全重合的时候,就可以判断这两帧为重帧。另外要考虑的是两帧提取的时间和间隔,如果在 60 帧的情况下提取的时间间隔是 30 毫秒,是与我们的预期不相符的,我们便可以认定这个视频不太符合正常的逻辑。

上方视频中相邻的两帧,可以看出有一定的变化幅度,但幅度很小。因为人眼的观察能力存在差异,进行主观的评测很可能会遗漏或出现偏差,存在不确定性,因此通过量化方法可以避免不确定性的出现,保证 4K60帧的视频真的具有 60 帧。

前文我们讲了如何评测 4K60帧的视频质量,下面我们谈一下针对 4K60帧的卡顿都涉及哪些问题,又该如何优化。

首先和大家介绍一个基于渲染来优化卡顿的方案 —— 基于 vsync 的渲染。

vsync 是垂直同步( Vertical Synchronization )的简称。基本的思路是将 FPS 和显示器的刷新率进行同步。vsync 在设备中一般是一个硬件信号,根据不同的平台封装不同的系统机制。

针对 60 帧的视频来说,每一帧都控制在 16.6 毫秒内刷新,就能保证在一个 vsync 周期内,保证不会产生 Jank。但很多场景中不存在理想的情况,如下图所示:

在这里插入图片描述

本来 Jank 要显示 B,但因为 A 还在显示,导致了 B 的延时,从而产生了卡顿。B 会延时的原因是在中间处理时 B 的耗时稍微有些长,产生了一些抖动。面对这种情况,声网采用了类似于 Double Buffering 或者 Triple Buffering 的机制来处理偶尔出现的抖动。

另外,采集的精度也会影响卡顿的情况。例如在屏幕采集时,假设我们模拟了一个 16.6 毫秒的事件驱动来采集 vsync,但很多情况下因为时延的问题采集不到比较高的精度,效果如下图所示:

在这里插入图片描述

图中下侧折线图展示的是目前市面上以及部分开源 SDK 的能力状态,基本会在 14 毫秒到 18 毫秒间的波动。这种情况下 60 帧的采集是不够的。因此声网在此基础上进行了优化,效果如图中上侧折线图所示,基本能够收敛在 16.6 毫秒上下,误差 1 毫秒左右,效果基本可以接近 vsync。

上图是一个主观对比的简单示例。左侧为优化前,右侧为优化后。大家可以观察下画面外围的圈在转动时,左侧的顿挫感明显大于右侧。

在 VDR 中有一个很重要的概念叫色彩空间,包含了 Color range 和 Color space。其中 Color range 主要是色彩范围,分为 full range 和 video range,取值范围 [0,255], [16,235]。

Color space 指的是色域。

RGB 是一个相对色彩空间,xyz 是绝对的色彩空间对应自然界的颜色,RGB需要通过color space(bt601,bt709,bt2020,srgb,dcp13) 映射到绝对色彩空间。同一个 RGB 值,不同的色域定义下,对应到不同的自然界颜色。

如下图所示,从 bt601 到 bt709 再到 bt2020,色域的范围是越来越广的。所以如果是同一个 RGB 值,如果色域的定义不一样,那么对应到图中的落点也是不同的。

在这里插入图片描述

色差是 HDR 里面非常重要的一个概念。一个 yuv 用某个矩阵从 RGB 得到,转换成 RGB 也要用同样的逆矩阵,才能得到正确的 RGB 和颜色。

在这里插入图片描述

如上图所示,最左侧第一个人像为原图,第 2、第 3 个人像是用了错误的逆矩阵进行转换,导致人脸、衣服的亮度和色彩都发生了较为明显的变化。第 4、第 5 个人像是用来相同的逆矩阵,所以转换出来的效果和原图更为接近。

另外在 VDR 中,HDR 在亮度、色彩色域、对比度上比 SDR 有优势。如下图所示:

在这里插入图片描述

我们可以看几个细节点。首先看天空的云彩云层以及蓝天的颜色,HDR 的表现力以及细节展示是比 SDR 更丰富的。另外可以看一下夕阳的部分,光照照到地面上的一些细节表现,HRD 明显比 SDR 要更清晰,细节展示更多。

目前越来越多的设备开始支持 HDR 显示,据不完全统计大致有几万种不同的设备,但不同的设备对 HDR 的支持程度是不一样的。支持 HDR 的设备屏幕亮度从 500nit 到 2000nit,并且还有一部分支持 P3 色域、一部分支持 BT2020。

HDR 视频要在该设备上达到好的效果需要 tone mapping。下图是同一设备中不同 tone mapping 的对比:

在这里插入图片描述

这三张图来自同一个源,但在饱和度、画面细节、亮度处理、平滑处理等维度均有差异化的表现。人眼判断下,可以看出第一张图的算法处理效果是相对较好的。

另外,很多设备并不支持 HDR 显示,并且 SDR 屏幕的亮度和色域达不到 HDR 的要求,如果不考虑设备的支持强制的把 HDR 视频显示在 SDR 的屏幕上,会产生比优化前更差甚至不可接受的效果。

为了让尽可能多的用户体验到 HDR,我们可以借助 HDR2SDR,把 HDR 的视频通过算法降级到 SDR,然后再在 SDR 的屏幕上做显示。

这个功能在 RTC 场景中有着很实际的应用。当一个频道内多人互动时,如果有一个人的设备不支持 HDR,传统的逻辑是所有人都需要退回到 SDR 发送。而借助 HDR2SDR 功能就可以让大家都体验到 HDR 的效果。

大家关注的另一点,是如何判断从 HDR 转换到 SDR 后的效果是否够好。对于好坏的判断需要一个参照物,如果效果和 HDR 很接近并且又能正常显示,我认为就是一个相对较好的效果。

下方的 4 张图是同一场景中不同的画面展示效果:

在这里插入图片描述

从图中开一看出,HDR 的在亮度和细节展示方面明显优于 SDR。第三张图是 HDR2SDR 的一种算法实现,展示效果有所优化,但细心的朋友可以发现算法消除了灯光的光晕。

第四张图是 HDR2SDR 的另一种算法,在提升展示效果的同时保留了光晕的细节。我们一般认为第二种算法要优于第一种算法,更接近我们想要的需求和效果。但这类评价都是偏主观的,还是要看优化后的参照物是什么,特定情况进行特定的分析。

以上是我本次分享的内容。声网在 UHD 视频方面主要是通过高帧率系统和 VDR 系统实现 UHD 视频的支持。欢迎大家体验、交流,谢谢。

(正文完)

  • 注册并试用每月 10000 分钟免费的声网视频SDK,体验四行代码、三十分钟快速构建沉浸式实时互动场景
  • 下载体验声网相关 SDK & Demo

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/168137.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux】Ubuntu20.04.5安装ROS1【教程】

文章目录【Linux】Ubuntu20.04.5安装ROS1【教程】写在前面,一些特别注意的点安装步骤大纲1.选择软件镜像源(可以省略,如果不成功再试这一步)2.添加ROS软件源和密钥3.安装ROS14.设置环境变量5.安装rosinstall6.检查安装是否成功Ref…

基于uds和modbus协议的bootloader对比

2022年参与了两个bootloader项目的开发,两个项目使用的芯片、通讯驱动不同,因此传输协议也不同,年底了将两个项目做一个对比,也顺便加深下对bootloader的理解。相同点:modbusuds刷新流程刷新流程大同小异,简…

活动星投票技能创意大赛网络评选微信的投票方式线上免费投票

“技能创意大赛”网络评选投票_建立投票链接_作品投票小程序_扫码投票制作方法现在来说,公司、企业、学校更多的想借助短视频推广自己。通过微信投票小程序,网友们就可以通过手机拍视频上传视频参加活动,而短视频微信投票评选活动既可以给用户…

C语言详解——自定义类型:结构体、枚举、联合体

🌇个人主页:平凡的小苏 📚学习格言:别人可以拷贝我的模式,但不能拷贝我不断往前的激情 🛸C语言专栏:https://blog.csdn.net/vhhhbb/category_12174730.html 小苏希望大家能从这篇文章中收获到许…

【Pytorch】稀疏矩阵的表示与加减运算

前提知识:LongTensor()是64位整数型向量,FloatTensor()是32位浮点数向量。 有大量0元素的时候,我们可以使用坐标形式存储稀疏矩阵。 一个3*3的矩阵,但是只有坐标(0,0)处有值(值为1)…

量子计算(二十二):Grover算法

文章目录 Grover算法 一、什么是搜索算法 二、怎么实现Grover搜索算法 Grover算法 一、什么是搜索算法 举一个简单的例子,在下班的高峰期,要从公司回到家里,开车走怎样的路线才能够耗时最短呢?最简单的想法,当然…

Radius vector (半径矢量)

Radius vector引言定义引言 今天给大家介绍一下什么是Radius vector。 定义 从圆心到当前位置的矢量r⃗\vec{r}r。它也被叫做位置向量。 其中,O表示圆心,这里我们称之为原点位置,A表示当前位置。因此矢量OA⃗\vec{OA}OA是一个Radius vec…

VsCode简单使用,配置c/c++编译环境,个人感受

整体感觉 本质就是一个加强的文本编译器,增加了终端和控制台,可以程序交互,相当于一个IDE的外部框架。和sublime有一定相似性,但界面和插件安装方面远远优于sublime。应该说这是一种为编译语言设计的显示框架,真正起作…

代码随想录算法训练营第二十天 二叉树 java : 654.最大二叉树 617.合并二叉树 700.二叉搜索树中的搜索 98.验证二叉搜索树

LeetCode 654.最大二叉树 题目讲解 思路 二叉树的根是最大值左子树最大值左边部分构造的最大二叉树右子树最大值是右边部分构造的最大二叉树 AC代码 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode ri…

可视化监控告警-grafana

需求背景 根据我们的业务背景,需要监控3个纬度。 Iaas层:即腾讯云的基础设施CVMPaas层:即使用的腾讯云Paas服务,各种中间件Saas层:即我们本身的服务指标监控。 腾讯云监控,可以覆盖1,2场景, …

HarmonyOS/OpenHarmony应用开发-ArkTS的声明式开发范式

基于ArkTS的声明式开发范式的方舟开发框架是一套开发极简、高性能、跨设备应用的UI开发框架,支持开发者高效的构建跨设备应用UI界面。 基础能力 使用基于ArkTS的声明式开发范式的方舟开发框架,采用更接近自然语义的编程方式,让开发者可以直…

「自控原理」2.2 控制系统的复域数学模型

本节引入控制模型的复域模型——传递函数,并介绍其构建和使用方法。 本节介绍了几种常见环节的传递函数 文章目录传递函数的定义传递函数的标准形式首1标准型尾1标准型传递函数的性质传递函数的局限性典型环节的传递函数控制系统的复域数学模型是传递函数。拉普拉斯…

深入浅出java并发编程(Thread)

快速了解 package java.lang;public class Thread implements Runnable {}Thread是lang包下的一个类,实现了Runnable接口。源码如下 FunctionalInterface public interface Runnable {public abstract void run(); }Runnable是一个函数式接口不会抛出异常没有返回…

Minecraft 1.19.2 Fabric模组开发 05.动画效果物品

我们本次在Fabric中实现一个具有动画效果的物品,本次演示的模型代码均在文末给出 效果演示效果演示效果演示 首先,请确保你的开发包中引入了geckolib依赖,相关教程请参考:Minecraft 1.19.2 Fabric模组开发 03.动画生物实体 1.首先我们要使用…

nvidia显卡编码并发session限制破解

对于服务器型显卡(比如:Tesla T4、NVIDIA A100等),nvidia显卡编码并发session路数没有限制,对于消费型显卡(比如:GeForce RTX 3070、GeForce RTX 3080等),nvidia显卡编码并发session…

Odoo 16 企业版手册 - 财务管理之会计仪表板

会计仪表板 财务管理是任何类型业务不可避免的一部分。无论您经营的业务规模或类型如何,如果财务流程没有得到适当的管理和监控,您将在未来面临严重的财务失败。手动管理所有会计操作不是一个好主意,因为它需要大量的时间和精力。在人工会计管…

esp32 Python开发快速入门--环境配置以及点亮LED灯

esp32 Python开发快速入门--环境配置以及点亮LED灯1. 环境配置2. 固件的烧录3 下面开始点灯1. 环境配置 需要配置两个环境, 开发的IDE Thonny 链接如下 https://thonny.org/ 安装串口助手,芯片是通过串口来实现通信的,需要驱动,…

Openresty宏观概述笔记

最近由于项目需要学习了安全代理的相关知识,其实刚开始的时候是非常需要一个入门的介绍,大概说明下这个到底是个什么东西,能干啥,简单的原理是什么,为此我记录下我看完用完的心得,记录成笔记。 一般我们代码…

Nginx基础01:安装和基本使用

背景Nginx是一个高性能的Web服务器,几乎所有的Web服务都需要使用Nginx。关于Nginx的功能特性这里不再赘述,让我们从0开始,了解Nginx的基本用法,学习它在Web服务中都有哪些应用。本文主要介绍Nginx的安装以及基础的控制命令。Nginx…

讨论| 电视行业已是落日夕阳?

如今,随着移动设备、互联网技术的发展,电视似乎逐渐淡出人们的视野。近期,与电视相关的热门讨论似乎都是对于各大视频平台的会员投屏制度,这似乎更加减少了大众对于电视的使用欲望。那么电视领域是否真的趋于淘汰了呢?…