向ffmpeg官方源码仓库提交patch

1.前置条件

本文是写给有使用git进行开发基础的读者,即需要读者对git的安装和使用都了解并掌握的。如果没这方面的基础,建议学习下。

注意,最好不要用国内邮箱,注册一个gmail,outlook等国际邮箱。

  1. 邮件列表服务器在国外,国内 SMTP 常被反垃圾策略拦截,导致补丁迟迟收不到、甚至直接进 Spam。
  2. 163 邮箱默认会把正文里的 -- 签名分隔符吃掉或转 HTML,容易破坏补丁格式,FFmpeg 机器人会拒收。
  3. 国内邮箱不支持 internationalized SMTPUTF8,若补丁标题里出现非 ASCII 字符(如中文括号、全角符号)会 550 退信。

1.1 订阅ffmpeg-devel邮件列表

由于ffmpeg现在不支持从github进行pull requests,只能通过ffmpeg-devel提交patch,所以需要先订阅。

https://lists.ffmpeg.org/mailman/listinfo/ffmpeg-devel

进入后需要先注册:

注意,注册的邮箱是跟到时使用git提交patch时使用的邮箱(sendemail.smtpuser)是一致的。

点击订阅按钮,订阅成功后,会显示:

1.2 配置git

下面以gmail邮箱为例:

  1. 配置user.name和user.email(必选)

    如果不需要使用git send-email方法进行邮件发送patch,则只需要配置username和email就可以了,email也可以随便使用一个邮箱,这种对于github的pull requests方式就比较简单

    shell 复制代码
    git config --global user.name  "Your Name"
    git config --global user.email "yourname@gmail.com"
  2. 配置sendemail(可选)

    ffmpeg提交代码需要使用git send-email方式提交,所以需要配置sendmail参数,当然此步骤不是必须的,可以在git send-email时输入这些参数,但这样每次都添加就很麻烦了:

shell 复制代码
   git config --global sendemail.smtpencryption tls
   git config --global sendemail.smtpserver smtp.gmail.com
   git config --global sendemail.smtpserverport 587
   git config --global sendemail.smtpuser yourname@gmail.com
   git config --global sendemail.smtppass 这里填16位授权码

注意,使用gmail邮箱,不能用邮箱密码进行发送邮箱,google现在规定应用使用邮箱时,需要用授权码,而不是登录密码。

gmail的smtp专用授权码:

Google 账号 → 安全性 → 2-步验证 → 应用专用密码 → 选「邮件」生成 16 位空格分隔串。

如果没有,就通过搜索框进行搜索应用专用密码:

  1. 全局配置:

可以使用vim进行统一配置,而不用一条一条命令输入:

shell 复制代码
git config --global --edit

这里多了一个

复制代码
smtphello = smtp.gmail.com

原因是我在send patch时失败后添加的。

2.本地修改代码

2.1 下载ffmpeg仓库

ffmpeg源码下载方式有很多,最好下载git仓库的:

shell 复制代码
git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg
shell 复制代码
git clone https://github.com/FFmpeg/FFmpeg.git

其他如码云,其他镜像地址,但注意要确保是最新的,不然你期望修改的问题可能已经修复了。

2.2 修改代码

基于最新的code,master分支进行调试代码。开发规范:

  • 许可证:新增文件须用 LGPL-2.1+(首选)或 MIT/ISC/GPL-2+,并带上标准文件头;勿从随机位置复制粘贴。
  • 代码必须能通过 FATE 回归测试 (make fate),且不能破坏编译。
  • 功能修改与纯格式/缩进修改必须拆成独立提交;一次邮件只发一个逻辑补丁。

2.3 添加commit信息

shell 复制代码
git add .
git commit -s
## -s 会生成签名

输入修改的内容信息,注意内容清晰明了,格式如:

复制代码
area/component: 简短一句话(≤ 60 字符)

详细说明"做了什么"以及"为什么这样做",可引用 CVE、Bug ID 或邮件列表线程。
如果补丁修复了外部研究人员报告的问题,在末尾致谢。

例如:

复制代码
avcodec/h264dec: fix out-of-bounds access on invalid slice header

When the slice header contains a reference index greater than
the number of actually allocated frames, an array overrun
could happen. Add an explicit bounds check.

Fixes Ticket #1234.

2.4 FATE回归测试

正规操作,都要进行这步骤

3. 发送patch

第2步中已经在本地仓库commit好了patch,下面是提交patch:

3.1 生成patch文件

shell 复制代码
git format-patch -s --subject-prefix=PATCH -o patches/ origin/master

在ffmpeg仓库中生成patches目录以及patch文件

3.2 发送patch

shell 复制代码
git send-email --to=ffmpeg-devel@ffmpeg.org patches/0001-xxx.patch

推送过程中,可能会遇到fail的情况,可以自行查询原因解决。

推送成功,会返回OK,且自己的邮箱会有邮件收到,另外订阅的网页上会有自己的提交list:
https://lists.ffmpeg.org/archives/list/ffmpeg-devel@ffmpeg.org/

4.评审与迭代

  • 小补丁默认等待 ≥3 天,大补丁 ≥1 周;维护者可要求更多时间
  • 收到 Review 意见后,在原主题上发送 PATCH v2v3...,并用 git format-patch -v2 ... 生成带版本号的系列。
  • 若一周内无人反对且评审通过,任何有提交权限的开发者都可把补丁推送到官方仓库;未订阅推送通知的邮件列表会看到自动回执

如果反馈需要修改,则需要重新提交:

4.1 重新修改patch

根据评审意见,重新修改patch,修改后,重新commit

4.2 生成v2版本patch

shell 复制代码
git format-patch -v2 -s -o patches/v2/ origin/master

4.3 找到评审邮件的 Message-ID

两种方法查找:

  1. 打开网页找到自己提交的list:
    https://lists.ffmpeg.org/lore/ffmpeg-devel/
  2. 打开邮箱找到第一次提交时的邮件,使用查看邮件源的方式找到

4.4 重新提交

shell 复制代码
git send-email \
     --in-reply-to='20250128120018.12345@example.com' \
     --to=ffmpeg-devel@ffmpeg.org \
     patches/v2/****.patch

提交后,在https://lists.ffmpeg.org/archives/list/ffmpeg-devel@ffmpeg.org/可以看到自己的提交,邮箱也会收到邮件。

等待审核。

相关推荐
草明1 小时前
ffmpeg 把 ts 转换成 mp3
ffmpeg
越努力越幸运5082 小时前
git工具的学习
大数据·elasticsearch·搜索引擎
不会写程序的未来程序员2 小时前
详细的 Git 操作分步指南
大数据·git·elasticsearch
Kiri霧2 小时前
Scala 循环控制:掌握 while 和 for 循环
大数据·开发语言·scala
pale_moonlight2 小时前
九、Spark基础环境实战((上)虚拟机安装Scala与windows端安装Scala)
大数据·分布式·spark
武子康3 小时前
大数据-167 ELK Elastic Stack(ELK) 实战:架构要点、索引与排错清单
大数据·后端·elasticsearch
aqi003 小时前
FFmpeg开发笔记(九十二)基于Kotlin的开源Android推流器StreamPack
android·ffmpeg·kotlin·音视频·直播·流媒体
艾莉丝努力练剑4 小时前
【Python基础:语法第一课】Python 基础语法详解:变量、类型、动态特性与运算符实战,构建完整的编程基础认知体系
大数据·人工智能·爬虫·python·pycharm·编辑器
智能相对论4 小时前
10万人共同选择的背后,Rokid乐奇有自己的“破圈秘籍”
大数据·智能眼镜