Linux 之父出席、干货分享、圆桌讨论,精彩尽在 OpenCloudOS 社区开放日,报名戳 了解详情
写点什么

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

  • 2022 年 4 月 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 年 4 月 13 日 16:592119

评论

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

职业发展的迷茫与困境:你真的了解职级体系吗?

伴鱼技术团队

程序员 技术管理 人才培养 职业成长 技术人生

计算机网络基础(三)---网络层-IP协议的转发流程

书旅

php laravel 网络协议 计算机基础 网络层

[架构师训练营]Week03 - 作业

谭方敏

负载均衡

满山李子

架构师训练营(6周)

Hanson

架构师训练营第六周

大丁💸💵💴💶🚀🐟

架构感悟 6- 平衡之美

旭东(Frank)

CAP的原理

满山李子

为了保存VuePress构建的网站为PDF,我竟然。。。

Leetao

Python python 爬虫 PDF vuepress pdfkit

Java这么优秀,我当然要深入啦

程序员小跃

Java Lambda

上亿数据怎么玩深度分页?兼容MySQL + ES + MongoDB

Kerwin

Java MySQL ES 深度分页

图解:有向环、拓扑排序与Kosaraju算法

淡蓝色

Java 数据结构 算法

架构师训练营第 06 周—— 练习

李伟

极客大学架构师训练营

黑鹰坠落

escray

rdd序列化

InfoQ_6cf02607664f

并发业务中,线程安全与否很重要,来看看你懂多少?

Java小咖秀

Java 多线程与高并发

Apache Flink 是什么?

Apache Flink

flink

架构师训练营第六章作业

叮叮董董

朱嘉明:区块链对深入改革的意义何在?

CECBC

区块链技术 政策扶持 块链与经济 区块链功能 产业数字化

Redis进阶篇二——持久化

多选参数

redis redis6.0.0 redis集群 redis持久化

【week06】总结

chengjing

C、C++、Java到Python,编程入门学习什么语言好?

华为云开发者联盟

c c++ Python 编程语言 Java 分布式

架构师训练营第 06 周——总结

李伟

极客大学架构师训练营

By Experience的三个层次 -- 领域驱动设计的经验之谈

Winfield

架构 领域驱动设计 DDD 架构设计

JVM详解之:java class文件的密码本

程序那些事

Java JVM class GC 密码

【week06】作业

chengjing

架构师训练营作业(6周)

Hanson

天猫小店、京东小店的问题分析

石云升

价值网络 新零售 天猫小店

week6 学习总结 Nosql

Z冰红茶

架构师训练营第六周学习总结

fenix

极客大学架构师训练营

架构师训练营第六章总结

叮叮董董

面向体验的视频云-火山引擎增长沙龙

面向体验的视频云-火山引擎增长沙龙

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