写点什么

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

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

评论

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

吃透Laravel的Ioc容器

书旅

laravel 容器 ioc

为什么一旦自己创业了,很难再回到公司去坐班?

北柯

创业 互联网 创业心态 上班 上班族

Spring 为啥默认把bean设计成单例的?这篇讲的明明白白的

程序员生活志

错误的存储方案正吞噬你的成本

jinjin

"工科生"的浪漫 百度大脑语言与知识技术峰会在七夕向你发出参会邀请

百度大脑

56张图入门操作系统——内功心法,适合所有程序员

执鸢者

大前端 操作系统

云原生架构的基石

soolaugust

Docker 架构 Kubernetes 容器 云原生

搭载十代酷睿i7处理器,这台ROG冰刃4新锐拥有媲美台式游戏电脑的性能

最新动态

写代码爬取了某 Hub 资源,只为撸这个鉴黄平台!

程序员生活志

教程 Hub 资源

丐帮,少林,明教,武当!看看你数据分析的技能属于哪一派?

程序员生活志

学习的深度 & 深度的学习

北风

学习

大数据技术发展(二):Hadoop 技术生态圈的发展

cristal

Java 大数据 hadoop hadoop3

2w字 + 40张图带你参透并发编程!

苹果看辽宁体育

Java 后端 并发

系统不可用总结

不在调上

《精益创业》摘要

孙苏勇

书摘 精益创业

浅谈技术管理之团队管理

Geek_37rwst

团队管理 技术管理

一文吃透PHP进程信号处理

书旅

php Linux 信号

Python3 for ... else ...陷阱

王坤祥

Python Python PEP

大厂面试必读,JAVA进阶神书《深入理解Java虚拟机》第三版更新内容全曝光!

华章IT

JVM 虚拟机 周志明 Java虚拟机 jvm调优

有一种自我欺骗,叫只为孩子

zhoo299

随笔杂谈 家庭

“庆俞年”大战,真正受损的不是李国庆

北柯

创业 合伙人 创业者 互联网人 当当网

高效程序员的45个习惯:敏捷开发修炼之道(3)

石云升

读书笔记 敏捷开发 无限游戏

跟我一起基于Karma搭建一个测试环境(下)

Jack Q

大前端 测试框架 Karma

四种主要的 IO 模型

一盐难进

Netty

Flink所需组件-1

小知识点

scala 大数据 flink 流计算

ST在keil下开发时候文件options配置的一些小技巧

良知犹存

嵌入式

SpreadJS 纯前端表格控件应用案例:集成 Odoo提升企业ERP表格功能

葡萄城技术团队

开源 SpreadJS Odoo

nginx报错worker_connections are not enough

Java联盟

nginx

nginx 报错 accept4 () failed (24:Too many open files)

Java联盟

nginx

草脸识别,AI泡沫还是皇冠明珠?

郭华

人工智能 AI 商业 解决方案

一个虚拟世界里栽树的公司及其启示

郭华

技术 商业模式 电影

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