余晖落尽暮晚霞,黄昏迟暮远山寻
本站
当前位置:网站首页 > 编程知识 > 正文

火山引擎 BVE 视频图片硬件编码器演进之路

xiyangw 2023-09-17 16:38 13 浏览 0 评论

前言

近日,第 17 届世界编码器大赛 MSU 2022 公布硬件编码器比赛结果,在 60 fps(帧率)的超快视频编码赛道上,火山引擎多媒体实验室自主研发的 BVE 1.1 编码器表现突出,荣获最佳 FPGA 编码器(各项指标大幅领先);并在所有硬件编码器中,技术指标获得一项第一和两项第二,技术能力达到行业领先水平。

MSU 编码器比赛是由国际机构主办和测评,是视频编码业内影响力最大的国际比赛。

MSU 2022 视频硬件编码器大赛 60 fps 赛道比赛结果

背景

随着 5G、互联网等技术不断发展,以及半导体工艺的不断进步,电子产品的性能得到持续提升,基于视频内容的应用不断涌现,如抖音、爱奇艺、Bilibili、以及 Youtube 等。另一方面,相对于传统的文字图片内容,视频内容的传输需要更大的网络带宽。而随着消费者对于高清视频需求的指数级增长,如何解决用户需求和网络带宽的矛盾逐渐成为视频应用普及和进步的最大挑战。在众多视频技术中,视频压缩是解决带宽限制最为关键的技术。

视频压缩主要利用视频内容中存在的时间和空间冗余,以更小的码流进行视频内容的传输。视频压缩技术和标准也在不断进步中,如最新的 VVC 标准,编码性能相较前一代提升超过 50%,而计算复杂度则至少提升 5 倍以上。主流的视频压缩解决方案主要分为软件编码器和硬件编码器两种。其中软件编码器主要由 CPU 实现,硬件编码器包括 GPU,FPGA,以及 ASIC 三种方案。相较于软件编码器,硬件编码器具有更高的计算密度,更高的吞吐率,更低的延时和计算成本等优势。为了实现低延时、低码率、高画质、可持续的视频应用,采用硬件编码解决方案成为一种必然的选择。

团队简介

火山引擎多媒体实验室视频芯片团队从零开始建立了数据中心高密度硬件视频编码解决方案,包括算法开发及优化、硬件架构设计及验证、固件及软件开发等。团队在短时间内从零到一完成了多款硬件编码方案的设计以及部署,包括 FPGA HEIF 图片编码器、FPGA 视频编码器 BVE 1.0、及 BVE 1.1 等。其中 FPGA HEIF 图片编码器已经成功部署数千片,全面覆盖了抖音集团旗下抖音、头条、西瓜视频等的各个HEIF静图、动图业务场景。FPGA 视频编码器 BVE 1.0 和 BVE 1.1 连续两年获评 MSU 最佳 FPGA编码器,编码性能大幅领先行业平均水平。

架构设计

视频转码整体架构

BVE硬件编码方案设计充分考虑到了硬件方案的兼容性以及火山引擎转码服务流程,极大地简化了硬件方案实现替代的难度。自主设计的转码器架构不仅兼容业界标准FFMPEG API框架,同时支持火山引擎自研的业户调度系统,从而实现了对点播,直播,云游戏,图片编码等不同业务场景的无缝支持,减少了新产品从开发到业务落地的周期。

视频转码整体架构图

火山引擎转码流程主要由三个核心模块组成:

  • Host Server: 运行ffmpeg,集成图片、视频相关处理API,通过PCIe 跟编码器和解码器通讯,实现对编解码的控制, 同时对解码出来的YUV做相应的前处理,例如画质增强,锐化,降噪,插帧, ROI, CAE等, 并且通过ffmpeg API对音频部分做相关的编解码,实现对音频和视频的同步耦合等;
  • 解码器(Decoder): 对于FPGA方案,采用ffmpeg自带的软件解码器,支持了不同格式的解码, 并对解出的YUV 做格式转换,缩放等后处理后存入DDR, 提供给编码器进行编码;
  • 编码器 (Encoder): 采用自研的FPGA BVE 1.1 架构设计, 加入各种自适应算法, 实现了低延时、低码率、高画质视频压缩,达到行业硬件编码器性能的领先水平。

编码核心算法

编码核心算法方面,针对移动互联网应用的特性,采用定制化以及自适应算法解决方案,加入视频图像中各种统计数据,优化编码参数配置,从而达到极致的编码效率。

BVE编码算法设计中引入了多种自适应编码算法,包括自适应色度增强、运动补偿时域滤波、ROI编码、以及锐化增强等。其中,ROI的引入能极大的提升主观质量,并有效降低码率。锐化增强可以有效地提升视频清晰度,及用户画质体验。运动补偿时域滤波可以根据帧间相关性去除用户上传视频中的原有噪声,从而提升编码效率。自适应色度增强可以根据视频内容自动调整色度分量的码率大小,保持相同视频质量的同时提升编码效率。

MSU比赛结果显示,BVE FPGA编码器整体编码性能比行业标准编码器(GPU)提升30%,与行业最优的ASIC编码器相当。在60 fps 超快视频编码的客观质量评比中,火山引擎与腾讯、快手、Intel、Bluedot等参赛队伍排名前列。在同期参赛的多款不同类型的硬件编码器产品中,火山引擎 BVE 1.1 不仅荣获最佳FPGA硬件编码器,同时在主观质量(YUV-VMAF)上更是领先其他所有硬件编码器。

MSU 2022 视频硬件编码器大赛 60 fps 赛道YUV-VMAF结果

编码硬件架构

硬件架构方面,BVE编码器采用全新的编码器硬件架构设计方案,不仅内嵌多种优化的编码预分析和预处理模块,而且支持多种编码模式,如并行编码、低延时编码等,能够很好地适配多种应用场景,以较小的硬件代价实现编码性能和视频质量的最大化。

编码器架构设计方面,核心模块全面采用可配置的编码参数设计方案,支持端到端的自适应优化。首先,BVE编码器采用多层次的运动搜索方式,支持搜索范围动态调整,不仅能够实现精确的运动估计,同时优化硬件吞吐率。其次,BVE编码器支持全并行的率失真优化设计,精确的码率估计,以及优化的量化编码,能够实现最大化编码性能和吞吐率。BVE编码器硬件内部定制的DMA进一步优化内存数据存取效率,降低软硬件通信延时,提高带宽利用率和编码器吞吐率等。

BVE硬件编码器架构设计已经过大量实验以及应用验证,如HEIF以及FPGA等,不仅具有编码性能优异,吞吐率高等优点,同时具备支持自适应优化特性,可无缝衔接抖音集团主要产品。

写在最后

FPGA BVE及HEIF编码器目前已广泛应用于今日头条、抖音、西瓜视频等抖音集团旗下产品的图片和视频业务,及火山引擎图片业务toB产品veImageX中。高性能的BVE硬件编码器除了支持主流的转码、直播等应用外,由于具有低延时、高吞吐、低成本等特点,也为更多创新的视频应用提供可能性。

作者:火山引擎视频芯片

来源:微信公众号:字节跳动技术团队

出处:https://mp.weixin.qq.com/s/uOKSexbzb8MXXYcIR-4lXA

相关推荐

数控系统常见术语详解,机加工人士必备资料
数控系统常见术语详解,机加工人士必备资料

增量编码器(Incrementpulsecoder)回转式位置测量元件,装于电动机轴或滚珠丝杠上,回转时发出等间隔脉冲表示位移量。由于没有记忆元件,故不能准...

2023-09-24 17:42 xiyangw

功、功率、扭矩的关系

功=功率×时间work=power×timeW=P×T功=力×距离work=force×lengthW=F×LP×T=F×LP=F×L/T=F×V(velocity)具体到电机输出轴上,圆...

Wi-Fi协议(802.11 )常见专业术语汇总
Wi-Fi协议(802.11 )常见专业术语汇总

Wi-Fi协议(802.11)常见专业术语汇总AP(Accesspoint的简称,即访问点,接入点):是一个无线网络中的特殊节点,通过这个节点,无线网络中的...

2023-09-24 17:41 xiyangw

不需要策略模式也能避免满屏if/else
不需要策略模式也能避免满屏if/else

满屏if/elsejava复制代码publicstaticvoidmain(String[]args){inta=1;if...

2023-09-24 17:41 xiyangw

喜极而泣,我终于干掉了该死的 if-else
喜极而泣,我终于干掉了该死的 if-else

推荐阅读:面试淘宝被Tomcat面到“自闭”,学习这份文档之后“吊打”面试官刷完spring+redis+负载均衡+netty+kafka面试题,再去面试BAT...

2023-09-24 17:40 xiyangw

Python中使用三元运算符简化if-else语句
Python中使用三元运算符简化if-else语句

Python是一种极简主义的编程语言,相比其他编程语言,在多个地方简化了代码的写法,可以让我们用更少的时间更简洁地完成工作。以赋值运算符为例:a=a+b简化...

2023-09-24 17:40 xiyangw

雅思课堂 | 雅思口语写作句型第二讲
雅思课堂 | 雅思口语写作句型第二讲

纯干货,无废话用最少的时间学最制胜的内容!泡图书馆泡不过学霸?碎片时间也能弯道超车!向着雅思8分行动起来吧!雅思口语写作句型1.Ipreferseeing...

2023-09-24 17:39 xiyangw

设计模式(三)——简单的状态模式代替if-else
设计模式(三)——简单的状态模式代替if-else

博主将会针对Java面试题写一组文章,包括J2ee,SQL,主流Web框架,中间件等面试过程中面试官经常问的问题,欢迎大家关注。一起学习,一起成长。前言大多数开...

2023-09-24 17:38 xiyangw

如何优化代码中大量的if/else,switch/case?

前言随着项目的迭代,代码中存在的分支判断可能会越来越多,当里面涉及到的逻辑比较复杂或者分支数量实在是多的难以维护的时候,我们就要考虑下,有办法能让这些代码变得更优雅吗?正文使用枚举这里我们简单的定义一...

优秀程序员早就学会用“状态模式”代替if-else了
优秀程序员早就学会用“状态模式”代替if-else了

2020年已经进入倒计时了,大家立好的flag完成了吗?2020实“鼠”不易,希望2021可以“牛”转乾坤。简介状态模式是行为型设计模式的一种。其设计理念是当对...

2023-09-24 17:37 xiyangw

用Select Case语句对执行多条件进行控制
用Select Case语句对执行多条件进行控制

今日的内容是"VBA之EXCEL应用"的第六章"条件判断语句(If...Then...Else)在VBA中的利用"。这讲是第三节...

2023-09-24 17:37 xiyangw

c#入门教程(四)条件判断if else

条件判断,是编程里常用的判断语句,比如某个代码如果满足条件就执行a代码块否则就执行b代码块。案例1:inti=2*5;if(a>0){执行a代码块}elseif(a<0){执行b代码块...

每日学编程之JAVA(十一)—条件语句(if……else)

一个if语句包含一个布尔表达式和一条或多条语句。如果布尔表达式的值为true,则执行if语句中的代码块,否则执行if语句块后面的代码。if语句后面可以跟else语句,当if语句...

不需要策略模式也能避免满屏if/else

除了使用策略模式以外,还可以使用其他设计模式来避免满屏if/else的问题。以下是一些可能的解决方案:工厂模式:将if/else语句移到工厂类中,由工厂类负责创建对象。这样可以将if/else语句从客...

围绕ifelse与业务逻辑的那些梗
围绕ifelse与业务逻辑的那些梗

ifelse很重要,几乎是程序员编程核心,业务逻辑与规则也通过ifelse体现出来,语句简单但是背后文章很大,先看几则幽默图:1.也许默认使用returnf...

2023-09-24 17:36 xiyangw

取消回复欢迎 发表评论: