出品 | OSC开源社区(ID:oschina2013)
每个人爱上开源社区都有自己特别的理由,对于刘歧来说,这里是一个技术控的天堂。
玩过音视频技术的同学对悟空这个名字一定不陌生。悟空刘歧,FFmpeg 官方顾问、Maintainer,FFmpeg 社区最活跃的贡献者之一,《FFmpeg 从入门到精通》作者。
FFmpeg—— 老牌开源项目,万能播放器的根基。刘歧 —— 喜欢技术、只想讨论技术问题的程序员。
二者之间的 “羁绊” 来自于刘歧对于一个技术 “瑕疵” 的不满,为了解决自己眼中 FFmpeg 的一个不合理功能,刘歧开始了在 FFmpeg 社区的征程。FFmpeg 社区的治理属于 Liberal Contribution(自由贡献)模式,个人影响力取决于贡献多寡,重大决策基于共识决定,一切靠代码说话。毫无疑问,对于只爱技术的刘歧来说,这是一个好地方。和社区成员们一起讨论技术,共同解决 Bug,时不时提交些新的代码成了刘歧在工作与生活之外独特且有效的放松方式。就这样,刘歧慢慢在开源社区扎根、成长……
初入开源社区
大学毕业,刘歧到一家做空中充值终端机的公司工作。在这里,他正式踏上了自己的开源之旅。
当时刘歧所在公司自研的电路板移植了 Linux 操作系统,刘歧参与了给系统写驱动的工作,自然他也遇到了所有程序员都会遇到的各种 Bug,为了解决随时可能出现的问题,刘歧开始向前辈们寻求帮助。Linux Kennel 中文邮件列表成为刘歧的求解渠道。
Linux Kennel 中文邮件列表给刘歧留下的初印象是 “热情”:“基本上你发一个问题,大伙马上就回复了。可能是因为邮件列表刚建立不久,大家看到终于有一个新人加入进来问问题,肯定特别开心,立刻就想回复。” 出于一种整体良好的社区体验和对技术的热情,刘歧开始长期在这个开源软件的邮件列表社区中潜水学习,偶尔遇到问题会向大伙请教。
如果说第一份工作给了刘歧一个进入开源社区的缘由,那么第二份工作则是为他带来了扎根在社区的契机。
刘歧在第二份工作中主要做图形图像处理。一次偶然机会,和同事在聊天过程中,刘歧发现对方在许多技术基础知识、技术视野等方面与自己非常不同,“感觉他的技术很扎实”。个中原因就是这位同事深度参与了 BSD 的代码开发与维护。
这激起了刘歧想要深度参与一个开源项目的兴趣 —— 不仅仅和自己的同事交流技术、不仅仅是局限于自家公司的业务范围,而是可以和更多的人在一起讨论更广泛的技术问题,由此来提升自己的技术视野。
对于一家商业公司来说,代码的要求往往是满足当下业务需求,很少去考虑这些代码是否能有更长的生命周期,是否足够优雅等等。但在开源社区,来自千行百业的程序员相互交流、碰撞,便给了软件一个不断成长的温床。
有了深度参与开源项目的念头之后不久,刘歧开始做云存储、云转码系统工作,用到了 FFmpeg,遇到问题时,刘歧会像在 Linux Kennel 中文社区解决 bug 的方式那样,去 FFmpeg 社区搜索是否已经有人遇到过同样的问题,该怎么解决这些问题,“遇到问题的第一个感觉就是,这个问题我肯定不是第一个遇到,那我在网上或者邮件列表里肯定能搜到相关内容或 Patch。”
展开全文
同时,刘歧也开始尝试深度参与 FFmpeg 社区,他会观察社区中的成员间是如何交流沟通的,提 Patch 的流程是怎样等等。用他自己的话来说,就是 “光是了解这个社区我就花了 2 年。” 逐渐他发现,许多问题在社区中还没有被解决或是提及。机会,在这个时候到来。
发现问题
2014 年上半年,刘歧接触了一个客户,需要用 FFmpeg 做 HLS 切片。彼时用 FFmpeg 在切片时,有个参数对 CDN 不够友好。当时 FFmpeg 的切片原理会按照顺序生成 1、2、3、4 片,第 4 片结束后会回滚到第 1 片。每片的时间长度是 2 秒,所以第 8-10 秒的视频切片就会被标记为序号 1。这就导致在 CDN 里,缓存时间长度出现问题。当用户播放完 0-2 秒的 1.ts 之后,第 1 片视频应该被刷新掉,但实际上并没有,那么用户播放到 8-10 秒的 1.ts 时,播的依旧是 0-2 秒的内容。加上时间戳精准度的影响,视频就会卡住,一段时间之后再跳转到新的画面,非常影响用户观感。
“这是一个不标准的处理方式。” 实际上,这个问题刘歧并不是第一次遇到,他会尝试和客户反馈,建议不用回滚,而是按照递增的方式去生成。但这带来新的问题 —— 占存储。回滚的方式是为了节省存储,不会无休止的往里写新文件。
不仅如此,客户还认为,既然 FFmpeg 里提供了这个操作选项,存在即合理,就可以沿用。
刘歧此前也试过向 FFmpeg 社区提改进意见,“往 flv 里提 hevc,在 2013 年年底的时候,国内很多公司就开始使用这个技术了,但是我往 FFmpeg 社区提这个 Patch 的时候,社区里的人是反对的,因为没有相应地参考标准,所以不接受这个方式。”
在一个技术控眼里,这种技术功能上的 “瑕疵” 不除不快,FFmpeg 社区拒绝改进的理由也并不能让刘歧让步。
“我那时的观念就是,FFmpeg 也是人写的,选项是人来定的,那么我就有可能是那个人。” 于是,刘歧立志要加入 FFmpeg 维护者列表,然后 “干掉那个选项”。
删掉一个小功能需要几年?
想要删掉功能,要先成为维护者。
在 FFmpeg 社区,一名维护者通常需要先频繁地提交高质量的代码,在社区 “混脸熟”,获取一定的认可度。接下来才可能会被大伙邀请成为维护者,或者自行申请成为维护者。
按照这个路径,刘歧开始刷 Patch。频繁的代码提交行为吸引了时任 FFmpeg 首席维护者 Michael 的目光。不过,Michael 的关注对此刻的刘歧来说是一种 “折磨”。
“他频繁地找我麻烦,不断地否定我,在我提 Patch 的时候经常测试不通过。” 这对刘歧的打击非常大。现在当我们提到要营造一个良好的开源社区氛围、留住新鲜血液时,往往认为需要给新加入的贡献者更多的耐心、更细致礼貌的指导、适当的鼓励等等。很显然,当时的刘歧遇到的是高难度剧本:“那种环境,基本上相当于你在故意刁难我,放到很多人身上肯定就不干了。但我当时的目标非常明确,我就是要成为维护者,就是要把这件事做成,随你怎么刁难我。”
Michael 的 “刁难” 在事后看来更像是刘歧进阶路上的测试。比如指出问题的时候,Michael 也会关注刘歧是否有解决问题的能力,在刘歧解决不了的问题上会耐心的指导。一来二去,两人的交流渐渐多了起来,刘歧对 FFmpeg 的掌握能力也在日渐精进。
有一天,Michael 问刘歧:有没有兴趣成为维护者?
“诱惑力这么大的事情,我怎么可能拒绝!” 兴奋中的刘歧还特意把这 “历史性” 的时刻截图发给朋友。
就这样,刘歧成为了维护者中的一员。他想起了曾经看过的一个小故事,当你拔萝卜发现某根特别难拔的时候,这个萝卜可能是一个非常大的萝卜,而你,把它拔出来以后也将会有很大的收获。“当时想成为维护者,可能就是在拔那个最难拔的萝卜。”
2016 年,刘歧成为维护者的第一年,他做的第一件事就是把切片功能标记为 “弃用”。到这里,已经花了他 2 年的时间。
按照 FFmpeg 社区的规定,弃用某项功能时,需要提前警告用户,并且等到下一次大版本更新的时候,提供替换解决方案,同时旧版本不会下线。刘歧提供了几个新功能:比如直播时可以删除旧的片,这样就无需用回滚的方式,这样也能节省储存空间。但是对用户来说,替换新版本、新功能需要时间,直到今天,还有 FFmpeg 用户在使用老的 API 接口。对刘歧来说,这是一场持续了 8 年并且还在继续的战斗……
成为顾问
在 “弃用” 切片功能的过程中,刘歧在 FFmpeg 社区一直没闲着。从频繁提交 Patch,到成为单一模块的维护者,慢慢随着维护的模块越来越多,刘歧逐渐成为了一个通用维护者,2017 年,被推选为 Maintainer 和顾问便成了顺理成章的事情。
相较于各个模块的维护者,Maintainer 的权限更广,会帮助不同模块的维护者一起 Review。而相较于 Maintainer,顾问的身份除了在社区内部是一个身份标,更重要的是可以代表 FFmpeg 社区去接一些顾问形式的工作,比如面向全球提供付费咨询服务等等。
2017 年意大利有一家做意甲联赛版权内容制作的公司在制作视频内容时用到了 FFmpeg,遇到一个接口上的问题,于是发邮件给刘歧寻求帮助。此类的咨询刘歧陆续还遇到了一些,费用每小时两百美金左右,当然,有时候也会免费提供帮助。
这让刘歧看到了在线音视频剪辑工具的需求,便萌生了做一个专门的剪辑工具的想法。2017 年,来自朋友的合伙邀约让这个想法开始落地,刘歧与朋友成立公司一起做剪辑工具,当时,某央媒是他们的客户之一。虽然这次创业以快手的收购收尾,但在这之后,FFmpeg 社区毫无
姓名:
年龄:
电话: