> 文档中心 > 如何成为ffmpeg开发者

如何成为ffmpeg开发者

假设你已经阅读完 本站的 《源码分析》专栏。具备编译,调试 ffmpeg 源代码的能力。本文主要介绍如何 一步一步成为 ffmpeg 开发者。

提前了解:

  1. ffmpeg 的 git 仓库:https://git.ffmpeg.org/gitweb/ffmpeg.git
  2. git 使用手册:《廖雪峰 git 》
  3. 刘歧分享:《FFmpeg开源社区项目与文化》,百度网盘,提取码:37r9

先介绍一下简单操作。

克隆最新的 ffmpeg 代码,把代码拉到本地

git clone https://git.ffmpeg.org/ffmpeg.git

查看有多少分支。

git branch -a

查看有多少tag

git tag

问题一:如何往 ffmpeg 提 bug?

解答:FFmpeg 是用 trac 开源项目做了一个网站来管理 bug,网站 地址 :FFmpeg

在这个网站 提 bug 需要先注册,如下:

注册完成之后,新建任务单即可提bug,如下图:

相关阅读:

  1. Bug Reports

问题二:如何在 ffmpeg 项目中使用 git ?

解答:阅读 此文章即可,Using Git to develop FFmpeg


问题三:如何参与 ffmpeg 的开发沟通讨论?

解答:FFmpeg 的沟通工具主要是邮件 Contact Us 。

不经常用邮件沟通的朋友可能不太了解什么是 MailingLists。MailingLists 其实跟你直接发邮件给别人,或者别人直接发邮件给你没什么太大区别。

email 里面有两个功能,收件人 与 抄送。

  • 收件人:直接接收邮件的人,代表这封邮件面向的读者。可以是零个到多个。
  • 抄送:可以理解为微博的 at 功能,即告知。可以是零个到多个。

MailingLists 的用处是,你可以订阅某个邮件地址,也可以理解为订阅某个channel,例如 ffmpeg-trac@avcodec.org,别人发往 ffmpeg-trac@avcodec.org 地址的邮件,就会往你的邮箱抄送一份,你发往 ffmpeg-trac@avcodec.org 的邮件,也会往别人的订阅邮箱抄送一份。

发往 ffmpeg-trac@avcodec.org 的"第一封"邮件,称为 top-posting,相当于开启一个知乎问答,后续的讨论基于这个 top-posting 不断的做回复,如图:

推荐阅读:

  • FFmpeg Mailing List FAQ

ffmpeg 社区 里面有 5 个 channel 邮件可以订阅,如下:

1,ffmpeg-devel :这个 channel 是讨论 ffmpeg 的源码开发的,新功能,新特性,新的编解码器的开发,都会在这个 channel 讨论。订阅这个 channel 就能看到别人在讨论什么。没错,ffmpeg 是任何人都能参与开发,讨论的。

2,ffmpeg-user:ffmpeg.exe,ffplay.exe 这些命令行工具的使用讨论。

3,libav-user : 讨论 ffmpeg dll 库的 api 函数的使用。

4,ffmpeg-cvslog : ffmpeg 源码的更新修改通知,订阅这个channel,发布了新特性功能就会通知你。

5,ffmpeg-trac : 提 bug 的channel。

如果你使用ffmpeg 遇到一些 bug,可以在 ffmpeg-trac 上搜索,可能别人也遇到了。这样会比用搜索引擎更快,因为有些 bug 还没被搜索引擎收录。

下面介绍一下如何定阅 channel。打开 ffmpeg-trac 订阅 ,在 上面填上自己的邮箱即可,如下图:

新加入的订阅,想要看到之前的问答讨论怎么办?可以 在 Archives 里面找到之前的问答讨论。

讲个小技巧:如何用 google 搜索引擎指定网站搜索。

site:lists.ffmpeg.org/pipermail/ffmpeg-devel/ "search term"

FFmpeg 还有一个实时聊天室,可以在上面提问题。比较实时能得到解答。

聊天室里 ffmpeg channel 是讨论命令行使用的,ffmpeg-devel channel 是讨论开发问题的。


问题四:如何查看 FFmpeg 的 maintainer 有哪些?

解答:FFmpeg/MAINTAINERS at master · FFmpeg/FFmpeg · GitHub ,直接在源码目录 看 MAINTAINERS。这里讲个学习的小技巧,可以找这些 MAINTAINERS 的个人博客,通常会有意外收获,而且有些个人博客是没被搜索引擎收录的。

例如 Gyan Doshi 的博客,Builds - CODEX FFMPEG @ gyan.dev ,在上面可以找到 4.4 ,5.0 已经编译好的 ffmpeg dll 动态库。


问题五:如何应用一个patch 补丁到自己本地?

解答:git am,推荐阅读 FetchingPatchworkPatches – FFmpeg


问题六:如何修复 别人 在 ffmpeg 仓库提的bug?

解答:直接在 ffmpeg trac 看别人提交的bug,觉得自己能改,就通过邮件发 patch ,patch发送成功了的话,会出现在https://patchwork.fmpeg.org


问题七:如何提交 patch ?

解答:下面介绍一下我是如何提交 patch 的。这是我提的 4.4.1 版本的一个小问题:#9634 (print_all_libs_info() fixed) – FFmpeg 。

先执行以下命令,拉取 ffmpeg 代码,切换到 4.4 版本分支。

git clone https://git.ffmpeg.org/ffmpeg.gitcd ffmpeggit checkout remotes/origin/release/4.4

我加了以下代码,加了一个判断 #if CONFIG_AVRESAMPLE

//我加的代码。#if CONFIG_AVRESAMPLE    PRINT_LIB_INFO(avresample, AVRESAMPLE, flags, level);#endif

然后执行 git add fftools/cmdutils.c 添加文件。

再执行 git commit -m 'fftools/cmdutils.c: add if CONFIG_AVRESAMPLE (ffmpeg version 4.4)'提交到本地仓库

再执行 git format-patch HEAD^ 把上一次的提交打一个patch,可以看到生成了个 patch文件。

然后用 邮件 发送 patch 到 ffmpeg-devel email ,git 如何发送邮件可以看这篇文章《如何使用git send-email》

我的git 邮箱配置如下:

[sendemail] smtpserver = smtp.qq.com smtpuser = 2338195090@qq.com smtppass = 你的QQ邮箱授权码 from = 2338195090@qq.com to = ffmpeg-devel@ffmpeg.org confirm = always

配置好发送邮件环境,执行以下命令:

git send-email -1

发送邮件成功之后,在 https://patchwork.ffmpeg.org 就能看到提交了。

由于 ffmpeg 提交 patch 只能在最新的 commit 提交,今天是 2022年 2月,最新的 commit 是5.0 的,我提交的 patch 是基于 4.4 的,5.0之后已经没有这个bug了。所以 我提的这个 patch 基本不会有人理我。

因为版本大改之后,某些 api 会改变,或者舍弃。对于旧版本的bug,应该如何提交反馈。

旧版本的bug,可以在 FFmpeg 上面提交一个 bug 反馈,然后把 相关的 修复 patch,上传到附件里面,如下,是一个修复 cuda 的pathc。


由于笔者的水平有限, 加之编写的同时还要参与开发工作,文中难免会出现一些错误或者不准确的地方,恳请读者批评指正。如果读者有任何宝贵意见,可以加我微信 Loken1。


推荐一个零声学院免费公开课程,个人觉得老师讲得不错,分享给大家:

Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK等技术内容,立即学习