NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

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

  • 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:594688

评论

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

redis Redis缓存穿透解决方案

Sakura

4月日更

【资深猎头分享】程序员面试如何避坑?

Java架构师迁哥

OpenHarmony 1.1.0 LTS 版本正式发布

开放原子开源基金会

开源 开放原子开源基金会 OpenHarmony

某招聘平台流出一套超级全面的《Java面试题总结》被疯狂转发近百万次,已助我拿下5个大厂offer。

Java架构之路

Java 程序员 架构 面试 编程语言

架构实战营模块一作业

刁寿钧

架构实战营

Nocode 进阶 | 迎接 Amazon Honeycode,敲开 NoCode 开发大门(上)

亚马逊云科技 (Amazon Web Services)

framework源码,Android学习路线指南,已整理成文档

欢喜学安卓

android 程序员 面试 移动开发

读《非暴力沟通》

箭上有毒

读书笔记 4月日更

你看起来很美味?独家揭露视频推荐系统AI秘方

白洞计划

In-depth Java synchronized

0xABC

Java并发 并发编程 Monitor

一文搞定数据响应式原理

执鸢者

Vue 数据响应式原理

别当工具人了,手摸手教会你 Jenkins ! 码农很低调

比伯

Java 程序员 架构 计算机 技术宅

我是收藏一把好手

yes

学习

Java高手是怎样炼成的?阿里P8技术大牛这份手写笔记告诉你答案!

Java架构之路

Java 程序员 架构 面试 编程语言

潮汐交替,价值重组:2021数字化转型看什么?

脑极体

DEX领域第一个运用整合思维的DeFi协议 SumSwwap潜力巨大

币圈资讯

flutter开发环境搭建,京东面试真题解析,分享PDF高清版

欢喜学安卓

android 程序员 面试 移动开发

刚刚!字节跳动发布了 1179 个 Java 岗,平均薪资40K

钟奕礼

Java 编程 程序员 架构 面试

COBIT2019中核心模型(目标)、设计因素、治理系统和系统组件的关系

ming_hgm

cobit

华米科技与亚马逊云科技宣布战略合作,加速覆盖全球“芯端云”战略布局

亚马逊云科技 (Amazon Web Services)

Boss直聘转发超120W次Java全栈面试题!已帮我拿下5个Offer!

Java架构追梦

Java 面试 架构师 阿里巴巴面经总结

数万人跪求!阿里P8大牛手写的《Java程序性能优化实战笔记》,GitHub标星已高达十万!

Java架构之路

Java 程序员 架构 面试 编程语言

【LeetCode】丑数Java题解

Albert

算法 LeetCode 4月日更

智慧城市应该装上怎样的“大脑”,“学霸”海淀分享了一些心得

脑极体

HBase三个重要机制

五分钟学大数据

HBase 4月日更

火爆火爆!最新分享给大家:Boss直聘转发超80W次的一套超全面试题总结

比伯

Java 架构 面试 程序人生 计算机

211本科面试阿里挂了:分布式+限流+通讯+数据库被问懵了!

码农之家

Java 编程 程序员 面试 刷题笔记

C++ 虚函数表剖析

赖猫

c++ C/C++ 封装、继承、多态

领域驱动设计101 - 分层

luojiahu

领域驱动设计 DDD

计算机原理学习笔记Day1

穿过生命散发芬芳

计算机原理 4月日更

平面设计之PS(后)

空城机

PhotoShop ps 4月日更

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