设为首页
收藏本站
用户名
Email
自动登录
找回密码
密码
登录
立即注册
快捷导航
论坛
BBS
资讯
在线课程
电子图书
积分充值
邀请码
Edward's Blog
搜索
搜索
热搜:
软件逆向
破解
攻防
本版
文章
帖子
用户
McSafe软件安全论坛
»
论坛
›
【学习资源】
›
茶余饭后
›
世界上每个人都在使用他写的软件,他却过得穷困潦倒 ...
返回列表
发新帖
查看:
891
|
回复:
4
[
行业轶事
]
世界上每个人都在使用他写的软件,他却过得穷困潦倒
[复制链接]
McSafe
McSafe
当前离线
积分
3908
413
主题
2
回帖
3908
积分
管理员
积分
3908
发消息
发表于 2026-6-17 10:18:48
|
显示全部楼层
|
阅读模式
来自 湖北武汉
周六晚上,你熬完了又一个加班的周末,拖着疲惫的身体瘫倒在沙发上,百无聊赖地刷着抖音。
刷累了短视频,你又打开视频平台,追起那部收藏已久却一直没时间看的电视剧。
临睡前,你戴上耳机,和远方的朋友打了一通视频电话,聊聊最近的工作和生活。
这些平凡的生活场景看起来毫无关联,但是如果把这些产品背后的技术扒开,你就会发现,每一个笑点视频,每一帧画面,在进入你手机之前,都曾在某个服务器深处,被同一套工具悄悄地“重塑过”:
编码、压缩、裁剪、转码……
而那条最关键的指令,往往只是:
ffmpeg -i ...
复制代码
这就是FFmpeg,现在互联网最庞大的“隐形巨人”。
1.诸侯割据的时代
让我们把时钟拨回到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 语言,把市面上那些闭源的、复杂的商业视频和音频解码算法,全部“逆向工程”并重新纯手写一遍!
这两件事儿有多疯狂呢,我们一个一个来看。
2.精妙的顶层设计
在多媒体领域,任何一个视频文件其实都由两部分组成,它们的职责完全不同。
容器的职责是“打包”。负责把音频流、视频流、字幕、甚至封面图片以某种特定的数据结构“捆绑”在一起,我们通常通过文件的后缀来区分(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深厚的架构功力。
3.疯狂的逆向工程
前面说过,黑客们拿不到源代码。他们只能通过反汇编工具,将机器码翻译成人能勉强看懂的汇编代码:
然后用动态调试等技术来进行分析,例如让 Windows 官方播放器慢动作播放一个视频,黑客在后台死死盯着 CPU 的寄存器和内存变化。
视频压缩本质上是高等数学
,通过观察汇编指令中的常数和循环结构,黑客们能够反向推导:“哦!原来 RealMedia 的音频格式用的是改进的离散余弦变换(MDCT),这里的参数是这样设置的。”
他们还会制作一些极其特殊的测试视频文件:
一个纯黑、只有 1 像素、长达 1 秒的视频
一个纯白、有 2 像素、长达 2 秒的视频
然后用十六进制编辑器对比这两个文件的二进制数据。
“看,第一秒和第二秒的文件里,第 0x40 字节的数据从 01 变成了 02。这意味着这个位置存放的是视频时长!”
“这里有一串固定的字符 mdat,后面跟着一串数据。这说明 mdat 后面就是真正的音视频原始数据(Media Data)了!”
当然,很多所谓的“闭源商业格式”,其实是基于行业公开标准魔改出来的。
对于 Fabrice Bellard 这样的顶级专家,他不需要从零去猜,他只需要把公开标准作为模版去比对:“让我看看微软在这里到底改了哪几个参数?” 一旦找出这些变动,逆向工程就容易多了。
正是用这种办法,Fabrice Bellard 和无数逆向工程师一点点拆开了巨头们筑起的技术围墙。
那些原本被锁在闭源播放器里的格式规范、编码算法和数据结构,被重新理解、重新实现,最终变成了干净、免费、向全世界公开的 C 语言代码。
4.贫穷的维护者
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的高强度全职工作状态。
5.技术政变:一个人对抗全世界
但是,技术天才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 是你们的,它是属于每一个人的。
6.结语
20多年过去了,FFmpeg早已成为互联网隐形的基础设施。
YouTube、Netflix、Chrome、抖音,快手,视频号,甚至你手机上的任何视频应用,每天都在使用FFmpeg,它是数字世界的空气,你意识不到它,但是它无处不在。
但讽刺的是,开发FFmpeg的那帮极客们,长期缺钱,几乎没有名气,“近乎燃烧生命”,Michael Niedermayer 就是其中最典型的代表。
很多人不理解,他们能一直坚持下来,图的是啥呢?
我想主要有三层驱动力:
1.兴趣
这些极客们在做自己喜欢的事情,热爱是无与伦比的驱动力。
2.成长
FFmpeg需要非常硬核的开发者,在这里,有最厉害的两类人,
1.写汇编的 2.做逆向工程的
。
想在这里做贡献,你得理解CPU架构、内存层级、IO机制这些底层的东西,你的代码会被最资深的程序员逐行审查,在这种环境下成长起来的开发者,往往会变得极其强悍。
3.成就感
你的代码在几十亿的设备上运行,被几十亿用户使用,这种成就感是无与伦比的。
回复
举报
君杰
君杰
当前离线
积分
600
0
主题
279
回帖
600
积分
高级会员
高级会员, 积分 600, 距离下一级还需 400 积分
高级会员, 积分 600, 距离下一级还需 400 积分
积分
600
发消息
发表于 2026-6-17 23:47:07
|
显示全部楼层
来自
世界上每个人都在使用他写的软件
回复
举报
君杰
君杰
当前离线
积分
600
0
主题
279
回帖
600
积分
高级会员
高级会员, 积分 600, 距离下一级还需 400 积分
高级会员, 积分 600, 距离下一级还需 400 积分
积分
600
发消息
发表于 2026-6-17 23:49:02
|
显示全部楼层
来自
热爱是无与伦比的驱动力
回复
举报
君杰
君杰
当前离线
积分
600
0
主题
279
回帖
600
积分
高级会员
高级会员, 积分 600, 距离下一级还需 400 积分
高级会员, 积分 600, 距离下一级还需 400 积分
积分
600
发消息
发表于 2026-6-18 20:40:19
|
显示全部楼层
来自
精妙的顶层设计
回复
举报
君杰
君杰
当前离线
积分
600
0
主题
279
回帖
600
积分
高级会员
高级会员, 积分 600, 距离下一级还需 400 积分
高级会员, 积分 600, 距离下一级还需 400 积分
积分
600
发消息
发表于 2026-6-18 20:40:41
|
显示全部楼层
来自
这种成就感是无与伦比的
回复
举报
返回列表
发新帖
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
本版积分规则
发表回复
回帖后跳转到最后一页
快速回复
返回顶部
返回列表