说明:


  1. 本文只做编译环境构建,对ffmpeg使用不作过多介绍
  2. 写本文的目的:


  • 学会在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 在windows上构建ffmpeg开发环境_工具链

  • 普通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


使用msys2 在windows上构建ffmpeg开发环境_ide_02

  • 其他
# 安装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 终端使用msys2 在windows上构建ffmpeg开发环境_工具链_03
  • 切换到ffmpeg源码目录:cd /c/OpenSource/ffmpeg
  • 配置

# 配置 生成共享库及安装路径
# 这里注意,在mingw64会自动检测工具链。如果有多个工具链别弄错了。
# 最好设置环境变量
./configure --enable-shared --prefix=/c/OpenSource/ffmpeg/out

错误的配置工具链

使用msys2 在windows上构建ffmpeg开发环境_ide_04

正确的配置

使用msys2 在windows上构建ffmpeg开发环境_ide_05

使用msys2 在windows上构建ffmpeg开发环境_工具链_06

  • 编译及安装
make; 
make install

bin目录

使用msys2 在windows上构建ffmpeg开发环境_git_07

lib 目录

使用msys2 在windows上构建ffmpeg开发环境_ide_08

include 目录

使用msys2 在windows上构建ffmpeg开发环境_git_09

测试


  • 建立Qt 工程
  • 修改 .pro 使用msys2 在windows上构建ffmpeg开发环境_git_10
  • 包含头文件 使用msys2 在windows上构建ffmpeg开发环境_ide_11
  • 测试 使用msys2 在windows上构建ffmpeg开发环境_工具链_12

打印版本信息和配置

使用msys2 在windows上构建ffmpeg开发环境_git_13

  • 注意:运行自己编的应用程序需要将ffmpeg的dll复制到exe目录下。包括SDL2.dll

    使用msys2 在windows上构建ffmpeg开发环境_工具链_14

总结


  • 网上大多数教程是基于visual studio。而且依赖的第三方库比较多,初学容易困惑。
  • 安装msys2,构建unix编译环境(make,cmake,gcc等),一样的操作流程。无需过多的修改一些配置文件,摒弃msvc的一些东西。
  • 疑问​:我们windows上的dll文件是如何生成的呢?既然模拟unix运行环境,生成的应该是.so和.a才对。事实上编译过程中已经给出答案了。通过​dlltool​ 将*​.def转换为*​.lib和*.dll

使用msys2 在windows上构建ffmpeg开发环境_工具链_15

  • 举一反三​:其他开源的跨平台的库,是否都可以通过msys2来构建对应的环境生成windows所需的库?不用每次去安装msvc了。比如sqlite等

参考

1.ffmpeg 编译指南:

​​

2.wikiCompilationGuide/MinGW:https://trac.ffmpeg.org/wiki/CompilationGuide/MinGW

3. ffmpeg 官方文档:

​​