FFmpeg魔改教程
我个人其实是不太想用 魔改 这个词的,纯粹是为了搜索引擎的流量。我喜欢用一些朴素易懂的词汇,二次开发。魔改其实就是 二次开发。
本章节就是讲解如何二次开发 FFmpeg ,满足自己的项目需求。
FFmpeg 这个开源项目一共 分为两块,如下:
- FFmpeg API 函数的基本使用,这个在 《FFmpeg基础API教程》一章有讲解
ffmpeg.c
的业务逻辑,在《ffmpeg.c源码分析-基础篇》一章有讲解,ffmpeg.c
就是ffmpeg.exe
命令行的实现源码。
如果你只学了 FFmpeg API 函数的基本使用,然后就去匆匆忙忙 调 API 去写功能,通常会遇到各种各样的坑。
例如时间戳 pts 不对,不知道怎么实现帧率转换,参数设置错了,漏了。而这些坑,基本都在 ffmpeg.c
里面填完了。
既然这些坑都被 ffmpeg.c
填完了,非常稳定了,那其实我们可以直接使用 ffmpeg.c
。
但是由于 ffmpeg.c
会开进程跑,退出也会直接退出进程,所以本章内容主要讲解如何把 ffmpeg.c
修改成可以线程调用,讲解如何在 ffmpeg.c
里面使用 自定义AVIO,最后把 ffmpeg.c
等相关文件 封装成 静态库,或者 动态库 来调用。
因为修改后的 ffmpeg.c
线程与当前线程处于同一个进程,所以在使用 自定义AVIO 的时候,可以使用线程间通信,传递数据非常方便。
最终的效果如下:
虽然 FFmpeg 命令行功能很强大,但是如果 ffmpeg.c
没有实现自己要的功能,你可以继续二次开发 ffmpeg.c
,例如 overlay
混流的时候,动态增减一个流,来实现视频会议里面一个人加入退出的 场景。