世界上每个人都在使用他写的软件,他却过得穷困潦倒……

admin 2026-06-18 05:50:37 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文回顾了FFmpeg作为开源多媒体处理工具的发展历程,重点解析了其创始人FabriceBellard设计的分离容器与编码的架构(libavformat/libavcodec)以及通过逆向工程破解商业格式的技术细节。文档揭示了核心维护者MichaelNiedermayer在社区分裂后通过代码优化赢得技术竞争,并指出开源开发者依靠兴趣、成长性和成就感驱动的现实困境。 综合评分: 85 文章分类: 安全开发,技术标准,开源社区,逆向分析,其他


cover_image

世界上每个人都在使用他写的软件,他却过得穷困潦倒……

原创

liuxin liuxin

码农翻身

2026年6月16日 08:55 河南

在小说阅读器读本章

去阅读

周六晚上,你熬完了又一个加班的周末,拖着疲惫的身体瘫倒在沙发上,百无聊赖地刷着抖音。

刷累了短视频,你又打开视频平台,追起那部收藏已久却一直没时间看的电视剧。

临睡前,你戴上耳机,和远方的朋友打了一通视频电话,聊聊最近的工作和生活。

这些平凡的生活场景看起来毫无关联,但是如果把这些产品背后的技术扒开,你就会发现,每一个笑点视频,每一帧画面,在进入你手机之前,都曾在某个服务器深处,被同一套工具悄悄地“重塑过”:

编码、压缩、裁剪、转码……

而那条最关键的指令,往往只是:

ffmpeg -i ...

这就是FFmpeg,现在互联网最庞大的“隐形巨人”。

01

诸侯割据的时代

让我们把时钟拨回到20多年前。

当时互联网正从“文字时代”迈向“音视频时代”,宽带开始普及,人们疯狂下载歌曲、MV和电影。

为了争夺未来的网络媒体入口,各大厂商纷纷推出自己的媒体格式和播放器生态:

微软推出 ASF/WMV,希望借助 Windows 的优势推广 Windows Media Player;

RealNetworks 的 RM/RMVB 一度成为网络视频事实标准,RealPlayer 几乎是装机必备软件;

苹果则主推 MOV 格式和 QuickTime 生态,在 Mac 和多媒体创作领域影响巨大。

各种“方言”导致了一个悲惨的结果:视频/编码高度碎片化,互不兼容,解码器几乎全是闭源、商业化的。

更糟糕的是,很多视频格式在压缩时,深度依赖 Windows 系统的底层组件(如 DirectShow 或 VFW DLLs),这些组件是微软操作系统的核心秘密,Linux 上根本没有,巨头公司根本不屑于为市场份额极小的 Linux 系统开发官方播放器。

不过,这难不倒聪明的 Linux 黑客。

他们想出了一个非常奇葩和极端的黑客办法:“借尸还魂”。

他们编写了一些特殊的底层补丁(著名的如早期 MPlayer 的 w32codec),在 Linux 中模拟部分 Windows 多媒体接口,强行加载 Windows 系统的 .dll 动态链接库文件。

这种做法虽然勉强能用,但是极不稳定,极不安全,在法律上也是非常危险的灰色地带。

正是在这种“天下大乱、生态真空”的时刻,天才程序员Fabrice Bellard站了出来:

是时候搞一套属于开源世界的,不依赖任何Windows技术的“多媒体底层普通话”了!

这个“普通话”就叫做FFmpeg,主要完成两个事情:

1.完成一个精妙的顶层设计,把容器和编码彻底分开。

2.用纯 C 语言,把市面上那些闭源的、复杂的商业视频和音频解码算法,全部“逆向工程”并重新纯手写一遍!

这两件事儿有多疯狂呢,我们一个一个来看。

02

精妙的顶层设计

在多媒体领域,任何一个视频文件其实都由两部分组成,它们的职责完全不同。

容器的职责是“打包”。负责把音频流、视频流、字幕、甚至封面图片以某种特定的数据结构“捆绑”在一起,我们通常通过文件的后缀来区分(video.mp4, movie.avi)。

编码的职责是“压缩”,视频用H.264或MPEG-2压缩,音频用MP3或AAC压缩。

现在我们很容易想到,在实现软件播放器的时候,应该把这两层分开,让他们独立变化。

但在当时的商业多媒体领域,性能压力和商业策略,让大量播放器与 SDK 选择了强耦合设计,把容器和编码绑死在了一起。

作为一个纯粹的学院派加硬核极客,Fabrice Bellard可不管你这那的,这两者一定得分开:

1.libavformat

专注于容器的解包和打包,当它读取一个 video.mkv 时,唯一的任务就是拆开它,把一小段一小段的、依然处于压缩状态的二进制原始数据( AVPacket)源源不断地吐出来。

2.libavcodec

专注于解压和压缩,它是一个纯粹的数学计算黑盒子,它只接受 libavformat 丢给它的压缩数据(AVPacket),通过各种算法,把它们还原成一帧一帧没有经过压缩的数据( AVFrame)。

不但如此,Fabrice Bellard用天才的手法,用最接近硬件的手段(手写 SIMD 汇编、查表法、缓存对齐)把计算性能压榨到物理极限,甚至很多时候,FFmpeg 比官方 SDK 还快。

但FFmpeg更伟大的地方,不仅仅是“支持很多格式”,它把整个音视频世界抽象成了一套统一的数据流管道(就像Unix的数据流管道一样)

以我们最常见的“视频转码”(比如把一个高码率的 AVI 视频转成手机能播放的 MP4 视频)为例,在 FFmpeg 的管道里,数据是这样像水流一样流淌的:

无论任何格式,解码,滤镜,转码,都能在流水线任意组合,非常优雅和漂亮,展示了Fabrice Bellard深厚的架构功力。

03

疯狂的逆向工程

前面说过,黑客们拿不到源代码。他们只能通过反汇编工具,将机器码翻译成人能勉强看懂的汇编代码:

然后用动态调试等技术来进行分析,例如让 Windows 官方播放器慢动作播放一个视频,黑客在后台死死盯着 CPU 的寄存器和内存变化。

视频压缩本质上是高等数学通过观察汇编指令中的常数和循环结构,黑客们能够反向推导:“哦!原来 RealMedia 的音频格式用的是改进的离散余弦变换(MDCT),这里的参数是这样设置的。”

他们还会制作一些极其特殊的测试视频文件:

一个纯黑、只有 1 像素、长达 1 秒的视频

一个纯白、有 2 像素、长达 2 秒的视频

然后用十六进制编辑器对比这两个文件的二进制数据。

“看,第一秒和第二秒的文件里,第 0x40 字节的数据从 01 变成了 02。这意味着这个位置存放的是视频时长!”

“这里有一串固定的字符 mdat,后面跟着一串数据。这说明 mdat 后面就是真正的音视频原始数据(Media Data)了!”

当然,很多所谓的“闭源商业格式”,其实是基于行业公开标准魔改出来的。

对于 Fabrice Bellard 这样的顶级专家,他不需要从零去猜,他只需要把公开标准作为模版去比对:“让我看看微软在这里到底改了哪几个参数?”  一旦找出这些变动,逆向工程就容易多了。

正是用这种办法,Fabrice Bellard 和无数逆向工程师一点点拆开了巨头们筑起的技术围墙。

那些原本被锁在闭源播放器里的格式规范、编码算法和数据结构,被重新理解、重新实现,最终变成了干净、免费、向全世界公开的 C 语言代码。

04

贫穷的维护者

Fabrice Bellard是一个极度内敛、低调,甚至有些社恐的程序员。

但有人的地方就有江湖。只要开源软件社区规模扩大,势必出现各种纷争。

所以我们经常看到这样一个模式:Bellard把一个大厦的基座和主体完成后,就立刻放手,去挑战另一个领域。

挥一挥衣袖,不带走一片云彩。

这次也不例外。

FFmpeg走上正轨后,他把维护权交给了 Michael Niedermayer,自己转身投入了另一个改变世界的基础设施项目:QEMU(虚拟机模拟器)。

Michael这个人,比Bellard还要低调,甚至可以说神秘。

他几乎不参加技术会议或线下聚会,所有交流都通过邮件列表。我在网上甚至找不到他的照片。

他本来是MPlayer播放器的开发者,但MPlayer底层高度依赖FFmpeg的解码能力,他的核心代码开始大量并入FFmpeg。

接管FFmpeg之后,他做出了一个让世俗社会无法理解的决定:全职守护FFmpeg。

要知道,当时视频网站已经兴起,他但凡接受任何一家硅谷大厂的offer,或者开一家顾问公司,就能轻松获得巨额年薪,但他都拒绝了。

共事多年的核心开发者Kostya(Konstantin Shishkov)曾回忆证实:Michael长期住在奥地利的乡下,过着维持“最低收入”的生活。

他几乎没有任何商业赞助,全靠微薄的零星捐款和极低的个人开销度日。

Michael甚至认为,出去接私活或者为了生计去上班,是对优化编解码器的时间浪费。

他每天工作十几个小时,一个人完成了FFmpeg中极其庞大且晦涩的汇编级优化。

他是个疯狂的Bug修复机——安全团队提交的上千个Bug中,有超过650个是他一个人修复的。

他长期保持着日均1次核心Commit的高强度全职工作状态。

05

技术政变:一个人对抗全世界

但是,技术天才Michael的管理风格也有问题。

他过于强硬且保守,极其注重向下兼容和极致性能,经常在核心代码中加入各种特例。很多年轻开发者认为,他的代码风格太“不现代”、太难维护。

社区开始积怨。

终于在2011年,一批核心开发者对 Michael 忍无可忍,他们发动了一场技术“政变”,反对派在未经Michael同意的情况下,带走了原项目的服务器、缺陷追踪系统等基础设施,另立门户创建了一个叫做 Libav 的新分支项目。

幸运的是,Fabrice Bellard 依然控制着ffmpeg.org 的 DNS,并且拒绝交给“叛军”,FFmpeg的品牌可以保全,这一点非常关键。

重量级的Linux发行版(Debian、Ubuntu 等)站在了反对派一边,将系统默认的多媒体库换成了 Libav,FFmpeg 在 Linux 生态中的主导地位受到巨大冲击。

面对“背叛”,Michael没有去打口水仗,他的反击非常纯粹:疯狂写代码。

他不仅疯狂地优化FFmpeg的代码,更是紧盯libav,只要一出新功能,他几天内就能合并进FFmpeg,并且利用恐怖的优化能力写得更好!而libav那边处于政治原因,绝不合并FFmpeg的代码。

Libav 阵营为了追求所谓的“现代化重构和干净的 API”,导致开发速度极其缓慢;而FFmpeg 在 Michael 的死守下,“把事情做完”的效率高得惊人。

几年下来,程序员们震惊地发现,FFmpeg 不仅完全兼容 Libav 的特性,而且由于 Michael 的疯狂输出,FFmpeg 的性能更强、支持的格式更多、Bug 修复得更快。

2015年,Debian决定将系统默认的多媒体库 从Libav重新切换回FFmpeg。随后,Ubuntu等所有主流发行版也纷纷跟进。这成为了压垮Libav的最后一根稻草。

2015 年 8 月,在带领 FFmpeg 彻底赢回主流生态、并将 Libav 的分裂风波平息之后,身心俱疲的Michael决定辞职,他说:

我加入 FFmpeg 已经 14 年了,担任 Leader 也已经 11 年。我感觉我并不是最适合继续担任 Leader 职位的人…..

我希望我的辞职能够让两个团队重新找回彼此、走到一起,从而避免更彻底的分裂……

合并工作(Merges)所带来的巨大工作量和精神压力,是我辞职的核心原因……

FFmpeg 是你们的,它是属于每一个人的。

06

结语

20多年过去了,FFmpeg早已成为互联网隐形的基础设施。

YouTube、Netflix、Chrome、抖音,快手,视频号,甚至你手机上的任何视频应用,每天都在使用FFmpeg,它是数字世界的空气,你意识不到它,但是它无处不在。

但讽刺的是,开发FFmpeg的那帮极客们,长期缺钱,几乎没有名气,“近乎燃烧生命”,Michael Niedermayer 就是其中最典型的代表。

很多人不理解,他们能一直坚持下来,图的是啥呢?

我想主要有三层驱动力:

1.兴趣

这些极客们在做自己喜欢的事情,热爱是无与伦比的驱动力。

2.成长

FFmpeg需要非常硬核的开发者,在这里,有最厉害的两类人,1.写汇编的 2.做逆向工程的。

想在这里做贡献,你得理解CPU架构、内存层级、IO机制这些底层的东西,你的代码会被最资深的程序员逐行审查,在这种环境下成长起来的开发者,往往会变得极其强悍。

3.成就感

你的代码在几十亿的设备上运行,被几十亿用户使用,这种成就感是无与伦比的。


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:码农翻身 liuxin liuxin《世界上每个人都在使用他写的软件,他却过得穷困潦倒……》

评论:0   参与:  0