快手 · 音视频技术入门课
刘歧
快手音视频首席架构师
4513 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 18 讲
快手 · 音视频技术入门课
15
15
1.0x
00:00/00:00
登录|注册

14|如何在FFmpeg中定制一个自己专属的模块?

你好,我是刘歧。
通过前面 13 节课的学习,我们对 FFmpeg 整体的使用和架构已经有了一定的了解。接下来,我们一起来探索一下 FFmpeg 社区的“玩法”,了解一下 FFmpeg 常用的交流工具、反馈 bug 和贡献代码的渠道,以及定制专属板块的方法。这个部分,我会分成两讲给你介绍。这节课我们先来学习一下如何在 FFmpeg 中定制一个专属于自己的模块。定制模块的作用有很多,比如可以通过定制自己的私有格式,防止别人播放自己的视频。
在 FFmpeg 中添加模块,需要深入了解源代码架构。但 FFmpeg 源代码太多,我们需要找到一个突破口深入进去。下面,我们一步一步来解决这些问题。
首先,我们下载官方的源代码库,基于 5.0 分支做一个新分支 kwai,作为我们源码的基础。
$ git clone git://source.ffmpeg.org/ffmpeg.git # 下载源代码
$ cd ffmpeg # 进入源代码主目录
$ git checkout remotes/origin/release/5.0 # 切换到5.0分支
Note: switching to 'remotes/origin/release/5.0'.
$ git checkout -b kwai # 开一个新分支,起名叫kwai
Switched to a new branch 'kwai'
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入介绍了在FFmpeg中定制自己的模块的具体步骤,重点讲解了添加自定义AVFormat模块和文件封装格式的操作。作者首先介绍了下载官方源代码库并创建新分支的步骤,然后通过示例展示了如何定义文件格式结构体、准备参数、定义一个类以及向FFmpeg注册文件格式等操作。文章还介绍了编译可用版本以及添加自定义模块的方法。通过本文,读者可以了解到在FFmpeg中定制自己的模块需要深入了解源代码架构,以及具体的操作步骤和注意事项。文章中的示例代码和详细讲解有助于读者快速了解并掌握定制FFmpeg模块的技术要点。此外,文章还提供了完整的命令行参考,帮助读者更好地应用所学知识。文章还提出了思考题,引发读者思考和讨论。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《快手 · 音视频技术入门课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(5)

  • 最新
  • 精选
  • 大土豆
    这种私有文件格式的玩法,确实很多😄,微信的语音文件是silkv3格式,和标准格式有点差别是文件最前面加了一个字节的点号“.” ,导致其他播放器都打不开,也不知道是图个啥。

    作者回复: 这种场景内容保护的可能性大一些。还有一种场景是为了防止盗链,当拿到内容播不了的时候,自然也就没那么大的毕业去盗链了

    2022-08-26归属地:北京
    3
  • peter
    请教老师两个问题: Q1:查看FFmpeg源码,linux下一般用什么软件? Win10下一般用什么软件?(win10下用sourceInsight吗?) Q2:添加文件封装格式之后,编译失败 “添加文件封装格式”之前的操作都是成功的。 从“添加文件封装格式”开始,我的操作是: 1 打开kwaienc.c: vi kwaienc.c 2 将“添加文件封装格式”下面五个小步骤中每一个小步骤的代码都 拷贝到kwaienc.c中(原样拷贝,没有修改), 3 打开kwaidec.c,加入下面两句: #include "avformat.h" const AVInputFormat ff_kwai_demuxer; 然后编译: make -j4 报错:/usr/bin/ld: libavformat/libavformat.a(allformats.o):(.data.rel.ro+0xa40): undefined reference to `ff_kwai_demuxer' 请问错误原因是什么? 怎么修改?

    作者回复: 1. 我以前是vim,现在是VSCode和code-server在服务器上弄了 2. 应该是你需要自己加一个kwaidec.c 按照kwaienc那么添加一下空实现就可以了

    2022-08-24归属地:北京
  • 青晨昊天
    请问老师,关于自定义filter的编写,有哪些教程
    2022-11-04归属地:四川
    1
  • ifelse
    学习打卡
    2024-01-01归属地:浙江
  • jcy
    写音视频数据 部分里的函数开头部分: static int kwai_write_packet(AVFormatContext *s, AVPacket *pkt) { // kwaiMuxContext *mov = s->priv_data; uint32_t size = pkt->size; // 获取数据大小 if (!pkt) { return 1; } ... 这里应该在函数开头先判断指针是否为空 if (!pkt) 然后再取 pkt->size
    2022-09-20归属地:北京
    1
收起评论
显示
设置
留言
5
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部