说明:
- 本文只做编译环境构建,对ffmpeg使用不作过多介绍
- 写本文的目的:
- 学会在Windows编译ffmpeg源码。尽管官方已有编好的库
- 鉴于大多数是基于Linux 构建的。同时Windows构建过程比较复杂,各种依赖。希望写一个简单的教程,以方便后续做定制话处理 。
准备环境
- windows10 64
- msys2
- ffmpeg4.2.2 源码
- Qt 5.14.2(随便一个Qt5版本就行,我用的最新版本测试,也可以在msys2安装qt)
软件安装
安装 msys2 (https://www.msys2.org/)
msys2 是Windows软件发行版和构建平台,它的核心是基于现代Cygwin(POSIX兼容层)和MinGW-w64的MSYS的独立重写,目的是更好地与本机Windows软件互操作。它提供了一个bash shell,Autotools,版本控制系统等,用于使用MinGW-w64工具链构建本机Windows应用程序。
简单来说,就是在Windows上模拟Linux运行环境,用来构建Windows应用程序以及运行库(dll)
- 安装教程见官网(https://www.msys2.org/)
- 修改软件源:默认下载很慢
# 打开 c:\msys64\etc\pacman.d\mirrorlist.mingw32
# 在前面加上如下:
Server= https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/i686/
# 打开 C:\msys64\etc\pacman.d\mirrorlist.mingw64
# 在前面加上如下:
Server=https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/x86_64/
# 打开C:\msys64\etc\pacman.d\mirrorlist.msys
# 在前面加上如下:
Server= https://mirrors.tuna.tsinghua.edu.cn/msys2/msys/$arch/
- 更新软件包数据库和核心系统软件包(打开msys2 msys终端)
#建议首次全安装,点yes
pacman -Syu
- 普通msys2软件包
pacman -S make pkg-conf diffutils
- mingw-w64软件包和工具链(这里以mingw-w64为例)
运行 msys2_shell.cmd -mingw64(或者运行MSYS2 MinGW 64-bit) 打开mingw64终端
# nasm 汇编
#gcc mingw-w64 ffmpeg工具链
#sdl2 ffmpeg依赖
pacman -S mingw-w64-x86_64-nasm mingw-w64-x86_64-gcc mingw-w64-x86_64-SDL2
#gcc 工具链也可通过一项命令安装。我是通过上面命令单独安装的
pacman -S mingw-w64-x86_64-toolchain
#mingw32 32位的依赖库也要统一
pacman -S mingw-w64-i686-gcc 或者pacman -S mingw-w64-i686-toolchain
- 其他
# 安装git(下载源码)
pacman -S git
# 安装 vim(可不装)
pacman -S vim
# 如需要
pacman -S base-devel
至此ffmpeg基本环境已构建完成:
- 工具链:mingw-w64-x86_64-gcc
- make
- SDL2:这里只添加 了sdl2的库,其他依赖暂未加入
- git:同步代码
安装qt5可以通过msys2安装,也可在qt官网自行下载。笔者之前安装过最新qt,直接用就可以。
# msys2 安装
pacman -S mingw-w64-x86_64-qt5 mingw-w64-x86_64-qt-creator
源码编译
- 打开mingw64 终端
- 切换到ffmpeg源码目录:cd /c/OpenSource/ffmpeg
- 配置
# 配置 生成共享库及安装路径
# 这里注意,在mingw64会自动检测工具链。如果有多个工具链别弄错了。
# 最好设置环境变量
./configure --enable-shared --prefix=/c/OpenSource/ffmpeg/out
错误的配置工具链
正确的配置
- 编译及安装
make;
make install
bin目录
lib 目录
include 目录
测试
- 建立Qt 工程
- 修改 .pro
- 包含头文件
- 测试
打印版本信息和配置
- 注意:运行自己编的应用程序需要将ffmpeg的dll复制到exe目录下。包括SDL2.dll
总结
- 网上大多数教程是基于visual studio。而且依赖的第三方库比较多,初学容易困惑。
- 安装msys2,构建unix编译环境(make,cmake,gcc等),一样的操作流程。无需过多的修改一些配置文件,摒弃msvc的一些东西。
- 疑问:我们windows上的dll文件是如何生成的呢?既然模拟unix运行环境,生成的应该是.so和.a才对。事实上编译过程中已经给出答案了。通过dlltool 将*.def转换为*.lib和*.dll
- 举一反三:其他开源的跨平台的库,是否都可以通过msys2来构建对应的环境生成windows所需的库?不用每次去安装msvc了。比如sqlite等
参考
1.ffmpeg 编译指南:
2.wikiCompilationGuide/MinGW:https://trac.ffmpeg.org/wiki/CompilationGuide/MinGW
3. ffmpeg 官方文档: