写点什么

好的媒体处理框架都具备这三点特征

  • 2022-04-13
  • 本文字数:4133 字

    阅读完需:约 14 分钟

好的媒体处理框架都具备这三点特征

从 2017 年开始,音视频应用平台开始逐步关注带宽成本以及观看体验,腾讯从那个时候开始研发极速高清的技术,在研发过程中他们遇到了哪些挑战?业界在高清视频方面又有哪些技术方案?本期,我们采访了腾讯专家工程师赵军,他结合自己的实践经验给出了答案。以下是采访文章整理,期待对你有所启发~

 

InfoQ:是否可以简单介绍一下您目前在做的工作?2018 年之前在 Intel 负责视频编码/解码/转码相关硬件加速的工作,与您现在目前的这个视频云的媒体处理框架最大的区别在哪里?

 

赵军:我目前主要在腾讯云视频云负责媒体处理框架、编解码场景优化等工作,为业务方提供更好的媒体处理相关基础设施;当前的工作与 Intel 的硬件加速工作相比较,其最大的不同在于,硬件加速是媒体处理框架的一个部分,而现在的媒体处理框架、编解码场景优化等工作则和真实的问题靠得更紧密一些,所以我也建议即使是在做底层相关的优化,也务必了解一下业务应用场景,这样会对你的工作,有更为全面的理解。

 

InfoQ:腾讯明眸的发展历程大概分为几个阶段?在提升画质方面,有哪些常用的方法吗?在开发过程中您面临的较大的挑战是什么?

 

赵军:腾讯明眸从 2017 年开始开发,在那个时候,我们发现音视频应用平台开始将关注点转向带宽成本、观看体验。我们也在这个时候开始研发明眸极速高清的技术,希望将长期积累下来的音视频能力运用到音视频媒体场景,特别是直播、点播等媒体处理场景上,这是明眸的极速高清的开始;期间,最重要的部分包含:

 

A:持续的编码内核的优化:我们知道,一个新编码标准的制定,它完成是 0 到 1 的突破,但作为方案或者产品,还需要解决后面的 1 到 100 的问题,而这就是一个持续编码内核优化的过程。新的标准固然先进,但没有长期的实践优化,编码器其实很难将标准的潜力全部发挥出来。在经历了多轮优化之后,内部开源协同的 O264 编码器在各项指标上相比开源编码器获得 30% 以上的增益提升,V265 相较开源的 x265 更是可以达到 40% 的编码增益;我们也在业内率先支持了 AV1,其 AV1 编码器 TXAV1(比赛时被叫做 VAV1),在 MSU 的 AV1 赛道,首次推出就实现全部指标第一的好成绩;同时,腾讯也在积极布局 H.266 等下一代编码器技术。

 

B:完善的媒体处理 Pipeline:在明眸的媒体处理的 Pipeline 中,积极引入基于传统信号处理的传统算法以及当前趋势所向的 AI 能力,先进行场景分析、毛刺检测、噪声检测、交错检测、质检以及 JND 等预分析流程,分析视频源的画面质量,然后针对不同的场景和画面质量情况,使用对应的画质增强/修复技术。修复后,明眸还会对画面进行二次分析,用来辅助后续的视频编码流程。

 

具体而言,腾讯明眸通过深度学习的方式,能够识别游戏、体育、秀场、户外、动漫、影视等在内的十几个主流大类及几十个小类的场景,为视频流自动匹配对应的场景模型。场景识别后,明眸将结合视频源码率、帧率、分辨率、纹理和运动变化幅度等信息,进一步执行锐化、去模糊、反交错、去效应、降噪、色阶补偿、降帧/插帧、暗景增强、去抖动等前置处理;然后再对画面进行二次分析,分析视频的 ROI/JND、内容自适应编码等信息,并以为依据,调整到更符合人眼主观感受的的编码流程。客户只要开启极速高清功能,就能在同画质下降低视频码率 30%-50%,保证用户观看体验的同时,大幅节约成本。

 

C:结合传输与打包格式考虑:在这个多样化的世界,不仅仅需要面对 H.264、H.265、AV1、H.266 这些不同的视频编码格式,还需要考虑不同的分发协议、容器格式、DRM 等等,这使得我们在考虑积极提升画质的同时,也需要一直探索使用更为紧凑有效、普适性佳的容器格式,结合网络传输优化,以更低的分发带宽,解决好多端、多屏的覆盖问题;带来更好的秒开,减少播放抖动,解决不同设备、生态的兼容性等问题。

 

InfoQ:业界在高清视频方面您是否清楚大家还有什么同类型的解决方案?明眸在性能上,架构设计上采用了那些有别于常规的方法?

 

赵军:业界的方案,大多受到 Netflix 的 Per-Title Encoding/Shot-based Encoding 的影响。Netflix 在 2015 年提出了 Per-Title Encoding,从较高的视角来看,Netflix 使用了一种“暴力”编码技术,将每个源文件编码为数百种分辨率和码率的组合,以找到 "凸包",即最有效地约束所有数据点的形状;以为 VMAF 为目标以衡量人眼的主观评价。

 


2018 年之后,Per-Title Encoding 编码技术演化成基于场景的动态优化器(Dynamic Optimizer)技术。动态优化不是将视频划分为任意的 2 秒或 3 秒的 GOP 或片段,而是将视频以场景划分,并对每个场景进行单独编码。虽然这种动态优化使用了动态的 GOP 和片段长度,但自适应比特率(ABR)流切换继续有效地工作,因为所有的梯级使用了相同的 GOP 和片段长度。

 

需要特别指出的是,基于 Per-Title Encoding 和 Shot-based Encoding 的技术,因为其复杂度的原因,只能在点播场景使用,而腾讯明眸则同时支持了直播场景。

 

另外,明眸也更为积极的拥抱了新技术,提供画质修复和增强的能力,有效消除片源中的噪点和压缩效应,增强细节,去除模糊,提升色彩质量,并解决由于分辨率和帧率低而导致的卡顿等问题。另外,也使用云端结合,并充分优化传输协议以及打包容器格式,使得整个方案更为完备。

 


基于 AI 的算法带来了算力上的挑战,为了解决 AI 算法所带来的算力压力,明眸设计了全新的算力池方案,使用异步方式解决性能问题。

 

InfoQ:您认为好的媒体处理框架具备那些特点和要求?腾讯云媒体处理框架距离您的目标还有多远?

 

赵军:在我看来,一个好的媒体处理框架,需要具备以下三个方面:


a). 简洁性:我们知道,把一个事情做简单比复杂更为不易,简洁性会把事情变得更为清晰且统一,这是我们在设计媒体处理框架时候的第一要务;具体说来,设计上我们使用了基于有向无环图的 Pipeline 设计,结合低耦合的分层应对不同场景的需求,另外,使用异步处理算力池,把 CPU 和 GPU 加速统一到了一体。

b). 可扩展:一个好的媒体处理框架必须可扩展,原因是 2B 业务需求多变,其实现上底层依赖多变,算力依赖多变,这需要媒体处理框架具备量好的扩展性,不断满足业务的变换。这里需要提及一下的,我们的扩展性设计,参考了 FFmpeg 的 AVCodec、AVForamt 等的扩展方式,使得底层扩展功能的时候,上层业务方在 API 的使用上并无变化上的感知。

c). 完备性:媒体的世界其实有些分裂,分裂的原因不仅仅是技术方向上的差异,也因为背后各个公司、组织甚至其他层面的因素,而作为 2B 厂商,怎么提供一个简洁易用的被集成的媒体处理方案,是一个挑战。明眸把各个底层基础原子能力分门别类,有序融入到媒体处理框架,涵盖了媒体诊断、媒体预分析、媒体前处理、编码前处理、打包优化、传输优化等,完整的覆盖了媒体处理的各个方面,使得可以应对这个多样化的媒体世界,更好地被集成到不同场景。

开源与成长


InfoQ:您什么时候接触的开源?看您之前分享过一个《FFmpeg 关键组件与硬件加速》,现在是否还在这方面下功夫?现在开源方面除了 FFmpeg,您还关注哪些方面的项目?

 

赵军:我接触开源的时间非常的早,应该已经有十多年了,基本上大部分知识,都是从开源社区或者项目中获取的,之前主要关注 Linux 内核的网络协议栈部分,后来转到媒体处理方向。目前我还保持着对 FFmpeg 项目的关注,每天都会抽时间去看社区的 Patch、讨论等。从项目定位而言,我不大知道有能和 FFmpeg 完全类似的项目,但有些我个人关注的项目可以关注下,有 Gstreamer、GPAC、SRS 等。我除了关注 FFmpeg,也关注编码项目的开源的项目和 Linux 内核,特别是 Linux 内核的网络部分。

 

InfoQ:您参与的开源项目对您个人的改变是什么?开源商业化大家目前都在做,您如何看待商业化?

 

赵军:开源项目的参加,一方面需要长期积累信任,这是一个持续投入的过程,另外一方面,深入参与开源项目也需要在沟通上面有更多的思考,大部分我参与的开源项目使用 Maillist 交流,其需要克服不同文化、语言等方面的障碍,才能更好的融入到这个项目。对于开源商业化,我思考得不多,当前还处于一个朴素的开源理念状态,“既取之,必予之”——既然从开源社区获取到知识,也应该积极地回馈开源社区这样一个朴素的道理。

 

InfoQ:如果有新的开发者想要接触开源,您有什么建议?


赵军:对于新的开发者,个人经验是先把能找到的相关资料,如邮件礼仪、编码风格、代码提交流程、代码 Review 流程、Github 与 Maillist 等先熟悉起来;大部分的开源项目,都有一些比较小的 task,可以从这些 task 出发,尝试进入这个项目;需要提及一下是,要严格遵守开源社区礼仪,因为开发习惯和个人工程素养的原因,很多国内的新开发者在尝试融入开源社区的时候,容易忽视这个问题导致受挫。

 

InfoQ:在新技术快速迭代的环境下,如何不断学习新技术,是否有一些学习习惯可以借鉴给读者?似乎程序员 35 岁都有焦虑,您如何看待这个问题?


赵军:对于学习的问题,我觉得要回归最简单的一个需求,就是人的好奇心,碰到一个问题或者新技术,你是否有足够的好奇心,找到问题背后的挑战,然后尝试找出令自己满意的答案;而学习新技术的开始,我习惯从类比已有知识开始,尝试按照自己的方式去理解;在初期阶段,找到所有相关知识的材料,不做区分的通读,这个过程可以快速了解这个技术或者行业的一些行话(jargon),了解所面临的基本问题;第二遍开始精读经典或者重要文献、代码等,以获取更多的细节,毕竟,The devil is in details 。


关于 35 岁的焦虑问题,腾讯内部有个论坛叫 KM,里面有同事回答过类似的问题,说的是“读书破万卷”,虽然有些戏谑,不过其实有一定的道理,一方面,要保持持续的学习,目前社会已经发生一些变化,需要保持终身学习的习惯,我所见的大部分优秀的同事、朋友都具备这个特点;另外,要考虑自身的核心竞争力,在两到三个领域有自己的竞争优势;多与外部优秀的同事、朋友交流。第三个则是我做得比较差,目前在尝试改进的地方,锻炼身体,保持旺盛的精力,不做太多无谓的身体的消耗。


活动推荐:

在 6 月 19-20 日,ArchSummit 全球架构师峰会即将落地上海,赵军老师也会到现场分享,在赵军的分享中,你可以了解到腾讯明眸媒体处理架构,详细专题内容可通过下方 Banner 扫码了解,期待和你一起现场交流。



2022-04-13 16:595038

评论

发布
暂无评论
发现更多内容

系统首页 DIY,你的个性化需求 Pro 系统来满足!

CRMEB

【Docker 那些事儿】关于容器底层技术的奥秘

Albert Edison

7月月更

http请求redirect的问题

飞翔

golang

全国首创!洞见科技联合山东数据制定的「数据产品登记」两项标准正式发布

洞见科技

数据 联邦学习 隐私计算

跟着官方文档学 Python 之:函数

甜甜的白桃

Python 递归 函数 参数 7月月更

太奇葩了!Keepalived突发高可用事故

Java全栈架构师

Java 程序员 面试 程序人生 Keepalived

【Java 基础你一定要掌握的知识点】Java异常处理和设计

猫的树

Java 异常处理

《看完就懂系列》答应我,看完就开始用Symbol好吗?

南极一块修炼千年的大冰块

7月月更

NFT数字藏品交易平台APP开发搭建

开发微hkkf5566

大数据培训Hive的数据存储与压缩

@零度

hive 大数据开发

Ceph Swift Api 配置与使用(三)

Lansonli

云原生 Ceph 云存储 7月月更

答应我忘掉Postman吧,Apifox才是yyds!

程序员小毕

Java 程序员 程序人生 后端 开发工具

Go 原生插件使用问题全解析

SOFAStack

Go 语言 开源软件 MOSN 问题解析 开源学习

Windows下Tomcat内存占用过高问题跟踪(jmap 的使用)

源字节1号

软件开发 小程序开发

nacos注册中心之客户端服务注册

急需上岸的小谢

7月月更

TCP/IP协议常见漏洞类型

郑州埃文科技

TCP/IP 漏洞 IP地址

Taro2/3做小程序开发的使用心得和方法

9527

小程序 taro

web前端培训nodejs异步IO

@零度

node.js 前端开发

亚信科技发布“电信级”核心交易数据库AntDB7.0,助力政企“信”创未来!

亚信AntDB数据库

AntDB 国产数据库 产品发布会

Ceph集群详细部署配置图文讲解(二)

Lansonli

云原生 私有云 Ceph 云存储 7月月更

开源仓库贡献 —— 提交 PR

攻城狮杰森

git GitHub PR 开源贡献 7月月更

LP单双币质押流动性挖矿系统开发

开发微hkkf5566

Github发布6天,Star55K+,这套笔记足够你拿下90%的Java面试

冉然学Java

java面试 #Github

【都 Java17 了,还不了解 Java 8 ? 】一文带你深入了解 Java 8 新特性

猫的树

java8

数据分析引擎百花齐放,为什么要大力投入ClickHouse?

字节跳动数据平台

龙蜥下游发行版 Alinux 和 UOS 成为 OpenSCAP 官方首批支持的国内 OS

OpenAnolis小助手

国产 龙蜥操作系统 UOS v20 OpenSCAP Alinux 2/3

无声的AI:昇腾AI如何用大模型破解手语学习的难题?

脑极体

一道2016年nice的笔试题引发的思考

芒果酱

7月月更

【Java 实战】实现大转盘抽奖

猫的树

Java 大转盘抽奖

leetcode 135. Candy 分发糖果(困难)

okokabcd

LeetCode 贪心算法 算法与数据结构

【C语言】进阶指针six

謓泽

7月月更

好的媒体处理框架都具备这三点特征_ArchSummit_赵军_InfoQ精选文章