推荐序一

缘起

随着移动互联网的发展和网络基础设施的逐步升级,我们经历了从UGC到PGC,从PC端到移动端,从音频到视频,从点播到直播的巨大变迁,现在各种音视频应用逐渐成为主流。这些应用构建的基础是什么呢?都离不开FFmpeg,以至于大家都说,FFmpeg就是音视频界的瑞士军刀。它的出现,让以前只为封闭的广播电视系统开发的,高级而又神秘的技术,飞入平常百姓家,大大促进了互联网的繁荣。从另一方面来看,这把军刀的功能也越来越丰富,既可以解决各种实际问题,又是一本多媒体百科全书,工作之余,每次翻一下文档代码都会得到惊喜。

本人自从07年接触FFmpeg开始,不知不觉已经十年了,FFmpeg版本也由0.x升级到3.x,中间经历了巨大的架构变化,功能也越来越强大。最早大家只是用它作为mplayer的解码库之一,后来它逐渐支持的codec、format、protocol逐步就超越了mplayer,甚至把mplayer的filter也都支持了,因此从播放端到服务端,到制作端和推流端,几乎一切需求都可以搞定。回顾这些年在社区里面的经验,感觉国内做相关应用开发的人还是比较多的,真正贡献核心代码的并不多,与我们国家的程序员人口规模严重不符。因此虽然出现了“雷神”这样的技术科普大神,各种视频网站app各领风骚,却仍总觉得有缺憾。

初识

2016年,惊奇地发现maintainer页面上突然出现了一个中国人的名字,Steven Liu,还是一位在北京的工程师,顿觉十分厉害,遍寻朋友圈而不得,十分沮丧。直到听说onVideo这个创业项目,才了解到了他本尊就跟我二度相连,不禁感慨世界好小。赶紧约聊,一见如故,交集颇多,这让我更加相信这个世界上有缘人终会相会的。这位起着洋名的Steven老师就是人称大师兄(悟空)的刘歧,他有着东北人与生俱来的乐观、风趣,对于技术有着由衷的执著热爱,虽然工作很忙,还是对于开发社区倾注大量心血,无论是答疑解惑,还是推进开发,一直是无私奉献,一丝不苟。支撑他的是一种无问西东的信念,在如今的时代,相比于砌墙,修建大教堂逐渐变成了一种奢侈的追求。我辈与之相比,高下立判,只能盼望能否有机会为他,为社区做点什么。当得知大师兄在撰写关于FFmpeg应用开发的书籍,即自告奋勇写推荐,望尽微薄之力,以弥补内心缺憾。

榜样

在我看来,作为程序员,应该把亲身参与知名开源项目,作为个人技能发展的高级追求。为什么呢?成功的开源项目其实并不多,往往都是比较好的解决了某个基础性需求,是凝聚了大量优秀程序员智慧的结晶,其架构思想、开发协作流程、远程协同解决问题的方法,对于有技术追求的同学,都会是十分受益的。在公司写代码,往往只有一两个人review,而在社区里面,很可能是几十人几百人review,其中还会有世界级的专家。而成为这种项目的maintainer,则需要你本人付出大量努力,真正为项目贡献重要的功能,赢得社区的信任,自己也就成为了那个世界级的专家。大师兄在过去几年中,克服了自己的语言障碍,“大闹天宫”而赢得尊重,成为了千里挑一的maintainer,确实是我辈学习的榜样。

本书应该如何读

有大师兄对于FFmpeg的深入理解作为基础,本书在内容的全面性、理论和实践的结合方面,都是值得期待的。

很多同学热爱多媒体应用开发,但是实践起来会遇到很多问题,在社区中活跃参与,自身却很难获得提高,虽然偶尔通过牛人指点解决了部分一次性问题,但还是会经常遇到各种新坑;为什么呢?往往是因为缺乏系统化的知识体系,因此无法真正入门,更难以深入。因此对于这些希望入门、入行的同学,本书系统性地梳理了从基本命令行到高级应用的方方面面,能够带你进入多媒体技术的殿堂。

其次,国内的教育重理论而轻实践,对于有一定多媒体专业背景知识,而不知如何实践落地的读者,认真读完此书可以对理论如何结合实践有一个全面的认识,音视频算法再也不是抽象枯燥的公式、标准,而是鲜活的应用场景,你从此可以利用手中的知识技能做一些有用的事情,解决实际需求,比如,帮朋友压个片。

另外,对于已经熟悉多媒体开发的同学,本书也是一本全面的手册,便于你对自己的知识体系查缺补漏,看完一定会有惊喜。

而对于希望更深入学习多媒体架构知识,甚至以大师兄为榜样希望贡献社区,成为committer的程序员们,本书也是一本好的指南。以Linux操作系统为例,从基本使用开始,到搭建互联网服务器,到深入调优,做内核开发,大型系统构建,是一个逐步深入的过程。FFmpeg也是一样,从各种命令行处理,阅读代码了解背后的原理,解决实际问题,到模块级别开发,架构改进,再到融会贯通贡献社区,亦是必由之路。FFmpeg的分层模块化架构思想,与Linux内核一样,是十分简洁优美的,其中还有大量的图像视频基础库,网络协议实现,底层汇编优化,是营养丰富的宝库。建议大家能够站在前辈巨人的肩膀上,学习其架构精髓,主干贯穿,从实践角度构建你的程序员世界观,从而完成从小工到大师的成长过程。本书对于FFmpeg的基本概念做了初步解读,帮助大家由浅入深,开始探索FFmpeg这个宝库。

最后希望每个热爱技术的同学都能如大师兄一般,经历艰难险阻,取得真经。

于冰

流媒体行业先烈

2018年1月于北京