向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/可以看到自己的提交,邮箱也会收到邮件。

等待审核。

相关推荐
写代码的【黑咖啡】10 小时前
在大数据环境中如何设计数据集市
大数据
老徐电商数据笔记10 小时前
技术复盘第三篇:百果园新零售核心业务流程主题域划分详解
大数据·数据仓库·零售·技术面试
liliangcsdn10 小时前
elasticsearch多字段组合查询示例
大数据·elasticsearch·搜索引擎
TDengine (老段)10 小时前
TDengine IDMP 1.0.9.0 上线:数据建模、分析运行与可视化能力更新一览
大数据·数据库·物联网·ai·时序数据库·tdengine·涛思数据
云老大TG:@yunlaoda36010 小时前
如何使用华为云国际站代理商的BRS进行数据安全保障?
大数据·数据库·华为云·云计算
AI营销实验室10 小时前
原圈科技AI CRM系统创新模式深度解析,助力工业B2B企业转型
大数据·人工智能·科技
武子康10 小时前
大数据-189 Nginx JSON 日志接入 ELK:ZK+Kafka+Elasticsearch 7.3.0+Kibana 实战搭建
大数据·后端·elasticsearch
Fabarta技术团队10 小时前
枫清科技受邀参加CMIS 2025第六届中国医药华北数智峰会
大数据·人工智能·科技
扶尔魔ocy10 小时前
【QT window】ffmpeg实现录音功能之AAC格式--mp4
qt·ffmpeg·视频处理
数字化顾问10 小时前
(97页PPT)驱动水务智慧(附下载方式)
大数据