Jan Ozer:高清直播互动场景下的硬编码如何选型?

news2024/11/19 20:20:00

前言

高清直播逐渐普及,硬编码也成为大势所趋。在 RTE 2022 大会上,来自 NETINT 的 Jan Ozer 通过一系列的对比测试结果,详细分享了如何为高清直播互动场景进行硬编码的技术选型。


本文内容基于演讲内容进行整理,为方便阅读略有删改。

图片

大家好,我是 Jan Ozer。今天我们要讨论的是高清直播场景中的编码技术。我们将聚焦于高清(High-density)视频直播场景进行今天的分享。如大家所见,市场越来越青睐高数据量流媒体,硬件编码也成为了大势所趋。

有四种编码方式供大家选择:CPU、GPU、FPGA 和 ASIC,接下来我们来聊聊该如何选择。

其实就是具体要考虑不同编码方式的特性、成本(资本支出和运维支出)和能耗,很明显能耗也会影响运维支出以及碳排放问题。

做任何选择都要从找到你的工作点(operating point)开始,演讲末尾会着重说明这一点。

我们关注的是高清视频直播流媒体,比如云游戏、互动视频、AR、VR和元宇宙等,不涉及视频点播场景。

演讲中只会谈到视频点播的质量问题和 ASIC 在这方面的表现,但讨论重点还是直播转码。

图片

第一点:软件编码对高流量的直播转码来说较为低效,这个实验会告诉你为什么。

我们用三台不同的电脑进行测试:戴尔 R640、技嘉 R272 和戴尔 R7525。核心数的配置分别是 48、80 和 64。然后,我们还给这三台设备安装了 T408 转码卡进行测试。配置分别为 10、24 和 24。我们测量了这两种方法的性能:安装 T408 且使用 ASIC 的情况下,对比只用软件,使用 X264 快速预设情况下各设备的 FPS(每秒传输帧数)。测试性能包括:FPS,能耗,以及这三台电脑在每个配置中每瓦特的 FPS。

我们发现,两种情况下,使用 T408 的 FPS 要高 13 倍,耗电量相近。虽然必须给 T408 供电,但是因为原来计算机大部分电力都供给 CPU,而如果安装了 T408,CPU 工作量会减少很多。所以两种情况下,整体耗电量是差不多的。

也就是说一台 NVME 服务器,一台安装了 10 个或 24 个 T408 的服务器性能相当于约 13.1 台只用软件进行编码的电脑。

图片

因此,软件编码意味着 7 到 8 倍的成本支出,13 倍的功耗。

使用 HEVC 的情况会更糟糕。因为它是很复杂的一种编解码器。如果在只用软件的情况下,运行会非常缓慢。

图片

如上图这组测试中,我们用搭载 ASICS 的 HEVC 和使用 X264 medium 预设的纯软件做比较。同样,测试指标为 FPS,瓦特和每瓦特的 FPS。

可以看到,相比而言 T408 的 FPS 比纯软件高出 55%。而两者的耗电量还是差不多。

结论表明,不论是从资本支出,还是运维支出的角度来看,纯软件编码对直播流媒体应用来说都太昂贵了。

因此,我们来看一下用硬件替代的方案。选择有 CPU、GPU、FPGA 和 ASIC。你会如何从它们中选择呢?

图片

让我们先来梳理一下这些硬件选项:CPU,中央处理器;GPU,图形处理器;FPGA 是现场可编程门阵列;ASIC 是专用集成电路。

通俗来讲是什么意思呢?

  • CPU 是驱动整个计算机的通用处理器。
  • GPU 是可以驱动图形以及执行其他功能的通用处理器。
  • FPGA 是一种可编程的设备,你可以用它来做很多事情。
  • ASIC,当它以压缩视频为目的产生时,它所做的就是处理视频。

对应的产品例子有:英特尔 Intel Xeon Platinum 8280 处理器,22500 美元,英伟达 T4,2299 美元,AMD/Xilinx Alveo U30,大概 2000 美元。还有这次演讲中会提到的 NETINT Quadra T1,它的价格约为 1500 美元。

如上图所示,每一种硬件的最大功率也不同。CPU 的功率最大,而由于 ASIC 只需要处理视频,所以它的功率最小。

图片

接下来,让我们对这些硬件选项进一步分类。怎样能把这些硬件添加到服务器上呢?

CPU 通常放在主板上。GPU 和 FPGA 放在 PCI 插槽中。像 Netint 的 Quadra 单元这种 ASIC 既可以放在 PCI 插槽中,也可以放在 U.2 插槽中。U.2 是一种非常有效的方式,可以在服务器上添加多张转码卡。

不同的设备之间,软件集成是类似的。大多数都有 FFmpeg 和或 Gstreamer 功能,以及用于软件开发的独立 SDK。

而说到用于转码的芯片可用率:CPU 非常小。CPU 是一个通用设备。因此该设备中只有一小部分是专门用于视频转码的。GPU 要好一点。FPGA 也可以。但 ASIC 的芯片完全是为视频处理而设计的。这意味着它在功率和吞吐量方面的效率都更高。

关于编码的吞吐量:因为 CPU 可用于视频转码的部分很少,所以从设备的总体门数来看,总体吞吐量会相对较小。GPU 和 FPGA 好一点。ASIC 表现优秀。因为它就是为视频处理而生的。

综上所述,按流的成本来计算的话,CPU 是最贵的。GPU 和 FPG A会便宜一点,但 ASIC 通常才是最实惠的选择。

参考上一张幻灯片里各项的功耗,因为 CPU 的功耗非常高,流的输出又非常低,它每个流的功耗会非常高。GPU 和 FPGA 每个流的功耗稍低一点,但最效率最高的还是 ASIC。

那么,高清应用选其中哪一种呢?

CPU 并不适用于高清应用。因为它需要大量电力,且物理集成必须在主板上。选 GPU 和 FPGA 会稍好一些。这两种硬件都采用 PCI 形式,功耗更低。但 ASIC 会是最佳选择。因为它的功耗最低,且它的外形尺寸最方便集成到服务器中。

那么,像Youtube这样的产品会选择哪种方案呢?

它们采用的是 Argos,google 自研的专用于视频转/编码处理单元。在采用 Argos 时,Youtube 选择了 ASIC。因为它是处理视频最有效的方式。

我们认为对于其他公司来说,同样是 ASIC 的 Quadra 可以成为他们的 Argos。这样说是因为,大多数公司无法设计自己的 ASIC。其实没有必要自己来,因为大家可以从 Netint 购买 ASIC 服务,比如 T408,或者 Quadra(接下来会详细介绍)。

图片

那么,到底应该怎样在这些备选方案中选择呢?我会按如上图的顺序进行说明。首先明确各硬件功能,确保它可以满足你的需求。然后了解影响质量和吞吐量的因素,再用各种内容类型进行测试。接下来,选择你的最优点。等下我们会详细讨论这一块。然后进行计算。计算每个流的成本和使用该最优点的每个流的质量。

图片

如上图,是你要检查的硬件功能表,表中已标注了 NETINT Quadra 一项。可以看到,Quadra 支持 H.264、HEVC 和 AV1。在处理功能方面,Quadra 可以进行解码、编码、缩放和叠加,甚至还有人工智能,第三方编码器通常都不具备这项功能。

图片

现在,在了解特定设备上包括哪些功能后,你需要确保在使用该设备生成文件的命令流中包含这些功能。以 NETINT Quadra 的命令流为例,这条流用于解码,即使用硬件解码器。如果命令流里不包含解码这一条,而是直接进入源文件,那你只能使用软件来解码,这会降低整体吞吐量。

这里是用 NETINT Quadra 选择 H.264 编解码器。这里是用 NETINT Quadra 进行缩放。第一个个 rung 是在源分辨率下生成,所以没有缩放。下面的 rung 按比例从 1080p 缩放到 720p。而命令流中没有包含所有所需硬件功能,就会影响到最终的吞吐量。得到的吞吐量会比使用卡上所有可用硬件功能所得到的量要少。

图片

接下来,我们来谈谈质量问题。在大多数直播转码中,我们通常会用相对较低的质量预设部署应用,以减少计算周期,实现吞吐量。如果你用 x.264/x.265 进行转码,你通常在高水平情况下使用中等预设,在低水平情况下使用超快或非常快的预设。而如果是 SVT-AV1,你必须使用 10-12 范围内的预设,以达到完成实时操作所需的吞吐量。

如今,大多数硬件编码器的质量都在这个范围内,所以结果不会和那些使用更慢或更高质量预设的软件编码器相同,但会用于直播转码应用的软件质量相同,该软件用的是典型预设。

为什么呢?因为硬件限制了操作。为了获得适当的吞吐量,当你转码时,你需要硬件吞吐量,这就是为什么质量被设置在这个范围。我们稍后会详述这个问题。

图片

如图,图中展示了使用 X.264 编解码器按预设产生的质量和编码时间。最下面这根曲线代表编码时间。可以看到,从编程时间占比非常少的情况,一直到到非常慢预设这里。曲线开始很低,然后骤升。蓝色曲线代表整体 VMAF 质量。红色曲线代表低帧质量,用来衡量瞬态质量的倾向。在这一点我们会得到相对低的资源和更低的质量。但这是直播转码时必须做的,以此来获得吞吐量。这就是资源和质量的平衡。

图片

而这一点,在中等预设下我们会获得 99.5% 的质量,与我们在非常慢预设情况下,获得的最高质量相同。而 96.1% 的低帧质量是在大约 12.5% 的编码时间实现的,但其实在该时间条件下,你会致力于实现非常慢的,或极慢预设。

上述说明了资源和质量的平衡。这是真正的收益递减。因为在你的编码时间显著增加时,质量增长并不是那么显著。因此,对于大多数不需要直播运维的视频点播编码来讲,不管预设是中等,较慢还是非常缓慢(通常不会用极慢预设,因为无论怎样都不能拿到最好的质量),你投入了 3 倍的编码时间,只能获得微不足道的质量优势。而对直播制作来说,问题在于我们一直在谈论的吞吐量。

通常是 HEVC 使用超高速预设,H.264 非常快,结果不会超过中等质量。就 Quadra 而言,这里是这些设备的总体质量目标。之后我们会展开说明这里的数字。

图片

我想做个实验,看看相比我们刚才看到的软件预设和 NVIDIA T4, Quadra 的质量是多少。所以我对五个文件进行了编码:足球游戏、钢铁之泪、侠盗飞车、子午线和奇幻的晚宴,然后用不同的阶梯生成 85 至 95 的 VMAF。

我对侠盗飞车的文件进行了编码,剪辑成 6Mbps 的速度,拉低了所有平均数。所以虽然我的目标是 85 到 95,但因为我们生成了 6Mbps 的 GTAV,VMAF 的总体平均数会更低一些。稍后会在速率失真曲线上具体展现。

通常一些人会使用的最大值,1080p 。我使用的编码参数:是我用 NVIDIA 生成的。这是我在网上找到的两个文件中学来的,你可以从网上找到,并了解他们推荐的方法。然后我测量了整体的 VMAF 和低帧 VMAF,刚才我有提到过,它可以衡量瞬态质量的倾向。我们来看看这些速率失真曲线。红色代表 Quadra,绿色代表 NVIDIA,紫色代表 VeryFast 配置,蓝色代表中等配置。这是 H.264 总体的 VMAF 质量。

图片

可以看到 Quadra、NVIDIA 和 Medium 预设之间的分数非常接近, Quadra 比 Medium 和 NVIDIA 稍微高一点。而 Quadra 遥遥领先于 VeryFast 预设。

我们一般使用 H.264 的最低质量预设就是 VeryFast,因为可以得到较好的吞吐量,质量也不错。可以看到,NVIDIA 和 NETIENT 的表现都比 VeryFast 好很多。

图片

然后再来看看低帧分数,如上图,同样也有瞬态质量的倾向。可以看到 Quadra 的表现要好于 Medium 和 NVIDIA,而 Medium 处于两者之间,较好于 NVIDIA。Quadra 遥遥领先于 VeryFast,后者更容易存在低帧率问题。

图片

HEVC 也是一样。Quadra 的分数较高于 Medium,优于 NVIDIA,同时远超 VeryFast 预设。在低帧分数中,Quadra 比 Meduim 高的就比较多了,同时远超 NVIDIA 和 VeryFast。

图片

总结一下,在选择你的 Operating point 时,要多加考虑。但最基本的事实是,Quadra 在 H.264 和 HEVC 中能提供中等以上的质量,吞吐量更高,能耗更小。

这给我们留下了一些提醒:我不是 NIVIDIA 编码专家,这是我第一次尝试用 T4 进行高容量转码。我尽力去把他们一一对应作比较。但是各位应该自己进行测试,如果有任何问题,应直接联系 NVIDIA,确保操作无误。

接下来我们就谈一谈之前提到多次的最优点。

最优点就是各位在制作中使用的编码参数,这些参数为应用提供了质量和吞吐量的最优结合。我们关注最优点时因为所有的供应商都会给出吞吐量数据和质量结果。但他们不会在质量和吞吐量中使用相同的配置。现在各位应该明白最优点的重要性了。

所以各位在比较硬件设施时,第一步就是确认影响质量和性能的配置选项。在 NETINT 中,影响质量和性能的关键配置是 Lookahead,即编码帧之前帧。这样编码器就知道接下来会发生什么,从而提升编码质量,尤其是当场景正在或即将改变时,可以提高比特率效率。这会降低性能,减少吞吐量,当然也会增加 Lookahead 的延迟。

下面我们来看一看 Lookahead 的定性影响。这是莫斯科州立大学视频质量测量工具的结果图。展示了逐帧比较两个文件的 VMAF 分数结果。红色部分有 40 帧的 Lookahead 编码区,而绿色部分则没有 Lookahead 编码区。可以看到没有 Lookahead 的区域有非常多的低帧。这些都是瞬态质量问题的潜在区域。

图片

所以 Lookahead 确实会影响你的低帧分数。这些分数说明了什么呢?

图片

就使用调和平均值计算的总体 VMAF 分数而言,我们可以看到有 2.3 VMAF 分的差值,这有明显的差异。一些研究者认为观看者可以辨认出 VMAF 3 分的差别。在低帧分数中,差值非常显著,从 75 分降到了 59 分。观看者肯定可以注意到两个剪辑中的低帧区域。标准差可以衡量质量可变性,这里有 1 分的差值,也是比较显著的。但在吞吐量中,不使用 Lookahead 的部分与使用 40 帧 Lookahead 的高出了 50%。这样你就能明白,为什么公司可能在计算吞吐量时禁用 Lookahead,而在计算质量时启用 Lookahead。这也是我们在比较 NVIDIA 和 NETINT 时要研究的核心问题。

在 NETINT 中可以改变的另一个配置选项是率失真优化(RDO),预设基本上就是 RDO。RDO 可以提升质量,但会减少吞吐量。了解了最能影响质量和吞吐量的配置选项后,你可以创建各种测试来运行这些配置选项,从最复杂、质量最高的,到最简单、质量最低的。(在 Jan 的演讲中,详细分享了一些 NETINT 的测试数据,感兴趣的可以在文末扫码观看演讲回放。)

图片

总结一下,当你比较硬解码器时,首先要明确最能影响质量和吞吐量的关键配置选项,测试多种配置来确定 OP。使用这些参数来测试多个文件的质量和吞吐量。使用技术来输出最佳的质量组合,包括平均帧和低帧、资本支出和运维支出,以及能耗。

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

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

相关文章

膜拜,华为18级工程师用349页构建高可用Linux服务器,其实并不难

前言 本文是华为高级工程师从Linux服务器性能调优与高可用集群构建、MySQL性能调优与高可用架构设计、自动化运维与Linux系统安全等多角度讲解构建高可用Linux服务器的方法和技巧。 希望大家能通过本文掌握 Linux 的精髓,轻松而愉快地工作,从而提高自己…

SwiftUI 后台刷新多个 Section 导致 global index in collection view 与实际不匹配问题的解决

问题现象 在复杂布局的 SwiftUI 视图中,用段(Section)来搭配组合其它容器视图(Form 或 List)无疑极具默契性。不过,在多个 Section 对应的数据被后台多线程修改时,往往会发生难以定位的错误,甚至导致 App 直接崩溃: 如上图所示,我们试图在后台线程更新多个 Section …

[附源码]java毕业设计药品管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

vue3.0的变化汇总

vue2迁移vue3 文档 https://www.javascriptc.com/vue3js/guide/migration/render-function-api.html 1.创建项目 npm init vite-app cd npm install npm run dev 2.setUp() 组合api的(解决v2业务逻辑分散的问题)方法可以单独写在外面的js。 -本质&…

大数据毕设选题 - 疫情实时数据分析可视化(Flask python)

文章目录1 前言1 课题背景2 数据库设计实现3 实现效果4 Flask框架5 爬虫6 Ajax技术7 Echarts8 最后1 前言 🔥 Hi,大家好,这里是丹成学长的毕设系列文章! 🔥 对毕设有任何疑问都可以问学长哦! 这两年开始&#xff0c…

后端学习 - Zookeeper Kafka

实习项目用到了 Kafka,系统学习一下 文章目录Zookeeper一 概述二 数据结构和监听行为三 功能实现1 统一配置管理2 统一命名管理3 分布式锁4 集群管理Kafka一 系统架构1 架构图2 数量关系3 Consumer 重要参数二 工作流程1 消息写入过程2 数据不丢失:ACK、…

邯郸百亿斤粮食生产 国稻种芯·中国水稻节:河北大市粮食经

邯郸百亿斤粮食生产 国稻种芯中国水稻节:河北大市粮食经 记者黄涛、袁柯 人民网石家庄电 杨文娟 科技日报 新闻中国采编网 中国新闻采编网 谋定研究中国智库网 中国农民丰收节国际贸易促进会 国稻种芯中国水稻节 中国三农智库网-功能性农业农业大健康大会报道&…

Android Material Design之MaterialToolbar(三)

上图 引入 implementation com.google.android.material:material:1.4.0属性 属性描述app:menu右侧菜单文件app:navigationIcon左侧返回按钮app:title主标题栏文本app:titleCentered主标题栏文本是否居中app:titleTextColor主标题栏文本颜色app:subtitle子标题栏文本app:s…

OpenSergo ShardingSphere 社区共建微服务视角的数据库治理标准

作者:赵奕豪(宿何) 为什么需要微服务治理与 OpenSergo? 在经典微服务架构中,我们通常将服务调用中各角色划分为三部分:服务提供者、服务消费者、注册中心。经典的微服务架构可以解决微服务能调通、可以运…

我的家乡潍坊HTML静态网页 学生个人网页设计作品 学生家乡网页模板 简单个人主页成品

家乡旅游景点网页作业制作 网页代码运用了DIV盒子的使用方法,如盒子的嵌套、浮动、margin、border、background等属性的使用,外部大盒子设定居中,内部左中右布局,下方横向浮动排列,大学学习的前端知识点和布局方式都有…

ESP8266 如何使用 GPIO13 GPIO15 进行 UART0 通信?

1. 修改默认的日志输出串口 UART0 为 UART1 使用 ESP8266 UART1(GPIO2)作为程序日志输出串口,可进行如下配置: menuconfig -> Component Config -> Common ESP-related Channel for console output -> Custom UARTUART…

蓝桥杯第十四届第二期题目【Java解析】

目录 ✏️写在前面 ✨历史回顾 🎈第一题(二进制API) 代码: 思路: 🎈第二题(闰年问题/时间API) 代码1: 思路1: 代码2: 思路2&#xff1a…

【软件测试】出现频率最高,软件测试问题,所有考虑的解答......

目录:导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜)前言 XXX岁,可…

【C++】经典二叉树面试题

二叉树前中后序遍历的实现 1.非递归实现 1 我们先回顾一下三种遍历: 前序遍历:根->左->右: F-C-A -D-B-E-H-G-M中序遍历:左->根->右: A-C-B-D-F-H-E-M-G后序遍历:左->右->根&#xf…

与“改善”形成两个轮子。落实“改善”的东西

与“改善”形成两个轮子。落实“改善”的东西 简单地说,“用心”不只是“用心”,科学地推进的思考就是“自工程完结”。这是一种彻底、科学地思考“只能做好工作”“只能做出好东西”的条件是什么。 “改善”、“QC循环”、“丰田生产方式”等&#xff…

Java常量:Java常量的定义和分类

常量是指在程序的整个运行过程中值保持不变的量。在这里要注意常量和常量值是不同的概念,常量值是常量的具体和直观的表现形式,常量是形式化的表现。通常在程序中既可以直接使用常量值,也可以使用常量。 Java入门基础视频教程,ja…

物联网智能家居总体设计与实现

物联网智能家居突出特点就在于家居都连接入网,且都可以通过一定手段进行智能控制。 图3-1 物联网智能家居框架 如图3-1所示,构建了一个现代家庭中所涉及到的所有物联网智能家居相关的框架。包括了安防、照明、互联网、影音、饮水、停车等方方面面。下面本…

深入理解MySQL索引的数据结构和事务的四大特性、隔离性的四种级别

1.索引1.2 使用索引2.索引的数据结构【重点】3. 事务3.1 使用3.2 事务的四大特性1.索引 概念 索引是一种特殊的文件,饱含着对数据表里所有记录的引用指针。可以对表中的一列或者多列创建索引,并指定索引的类型,各类索引有各自的数据结构实现。 作用 …

Linux学习-46-LVM逻辑卷管理机制

11.9 LVM逻辑卷管理机制(硬盘分区管理) 我们在实际使用 Linux 服务器的时候,随着业务的增加,文件系统负载会越来越大,当到了空间不足的情况时,如果我们还在使用传统的分区方式管理硬盘,就不得不…

项目管理的核心是什么?

管理的核心是目标管理 目标管理通俗来讲是对做什么的思考,作为管理者在面向业务的开展过程中,根据业务的动态调整目标,大目标不变的情况下,去不断思考做什么更好地完成目标。 目标发展的几个阶段 1、相关的概念 项目启动&…