假设你已经阅读完 本站的 《源码分析》专栏。具备编译,调试 ffmpeg 源代码的能力。本文主要介绍如何 一步一步成为 ffmpeg 开发者。
提前了解:
- ffmpeg 的 git 仓库:https://git.ffmpeg.org/gitweb/ffmpeg.git
- git 使用手册:《廖雪峰 git 》
- 刘歧分享:《FFmpeg开源社区项目与文化》,百度网盘,提取码:37r9
先介绍一下简单操作。
克隆最新的 ffmpeg 代码,把代码拉到本地
git clone https://git.ffmpeg.org/ffmpeg.git
查看有多少分支。
git branch -a
查看有多少tag
git tag
问题一:如何往 ffmpeg 提 bug?
解答:FFmpeg 是用 trac 开源项目做了一个网站来管理 bug,网站 地址 :https://trac.ffmpeg.org/
在这个网站 提 bug 需要先注册,如下:
注册完成之后,新建任务单即可提bug,如下图:
相关阅读:
问题二:如何在 ffmpeg 项目中使用 git ?
解答:阅读 此文章即可,https://ffmpeg.org/git-howto.html
问题三:如何参与 ffmpeg 的开发沟通讨论?
解答:FFmpeg 的沟通工具主要是邮件 https://ffmpeg.org/contact.html#MailingLists 。
不经常用邮件沟通的朋友可能不太了解什么是 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 社区 里面有 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 有哪些?
解答:https://github.com/FFmpeg/FFmpeg/blob/master/MAINTAINERS ,直接在源码目录 看 MAINTAINERS。这里讲个学习的小技巧,可以找这些 MAINTAINERS 的个人博客,通常会有意外收获,而且有些个人博客是没被搜索引擎收录的。
例如 Gyan Doshi 的博客,https://www.gyan.dev/ffmpeg/builds/ ,在上面可以找到 4.4 ,5.0 已经编译好的 ffmpeg dll 动态库。
问题五:如何应用一个patch 补丁到自己本地?
解答:git am
,推荐阅读 https://trac.ffmpeg.org/wiki/FetchingPatchworkPatches
问题六:如何修复 别人 在 ffmpeg 仓库提的bug?
解答:直接在 ffmpeg trac 看别人提交的bug,觉得自己能改,就通过邮件发 patch ,patch发送成功了的话,会出现在https://patchwork.fmpeg.org
问题七:如何提交 patch ?
解答:下面介绍一下我是如何提交 patch 的。这是我提的 4.4.1 版本的一个小问题:https://trac.ffmpeg.org/ticket/9634 。
先执行以下命令,拉取 ffmpeg 代码,切换到 4.4 版本分支。
git clone https://git.ffmpeg.org/ffmpeg.git
cd ffmpeg
git 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,可以在 https://trac.ffmpeg.org/ 上面提交一个 bug 反馈,然后把 相关的 修复 patch,上传到附件里面,如下,是一个修复 cuda 的pathc。
©版权所属:知识星球:弦外之音,QQ:2338195090。
由于笔者的水平有限, 加之编写的同时还要参与开发工作,文中难免会出现一些错误或者不准确的地方,恳请读者批评指正。如果读者有任何宝贵意见,可以加我微信 Loken1。