如何成为ffmpeg开发者 - C语言音视频技术

/ 0评 / 1

假设你已经阅读完 本站的 《源码分析》专栏。具备编译,调试 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,网站 地址 :https://trac.ffmpeg.org/

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

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

相关阅读:

  1. https://ffmpeg.org/bugreports.html

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

解答:阅读 此文章即可,https://ffmpeg.org/git-howto.html


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

解答:FFmpeg 的沟通工具主要是邮件 https://ffmpeg.org/contact.html#MailingLists

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

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

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。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注