1 set-Up
1.1.下载ffmpeg源码ffmpeg-4.0.2.tar.bz2,http://ffmpeg.org/download.html 解压到 D:\04_project\ffmpeg\ffmpeg-4.0.2
1.2下载mingw 安装程序
mingw-get-setup.exe https://osdn.net/projects/mingw/releases/,
默认安装到C:\MinGW
mingw安装管理器可用于安装和管理mingw和msys,但是这个版本的mingw不是我们编译ffmpeg所需要的。mingw安装管理器仅仅用来安装msys。
把msys1.0的所有bin文件都安装一遍,如grep,iconv等。
1.3 解决pr和yasm命令没有找到以及pkg-confg没有找到
1.3.1 pr
pr command not found
下载地址 https://sourceforge.net/projects/gnuwin32/
安装后从bin目录复制pr.exe,libiconv2.dll,libintl3.dll到C:\MinGW\msys\1.0\bin
1.3.2 yasm
Yasm command not found http://yasm.tortall.net/Download.html,
将下载到的exe程序重命名为yasm.exe,复制到C:\MinGW\msys\1.0\bin
1.3.3 pkg-config
pkg-config依赖glib和gettext-runtime
下载如下三个包glib, pkg-config, pkg-config-dev 解压后将其中的exe和.dll全部拷贝到 to C:\MinGW\msys\1.0\bin
http://win32builder.gnome.org/packages/3.6/glib_2.34.3-1_win32.zip
http://win32builder.gnome.org/packages/3.6/pkg-config_0.28-1_win32.zip
http://win32builder.gnome.org/packages/3.6/pkg-config-dev_0.28-1_win32.zip
1.4下载MinGW-w64
下载文件:i686-8.1.0-release-posix-dwarf-rt_v6-rev0,下载地址: https://sourceforge.net/projects/mingw-w64/files/
1.5.将MinGW-w64与msys关联起来,MinGW-w64安装目录是:D:\01_tools\mingw-w64\i686-8.1.0-release-posix-dwarf-rt_v6-rev0\mingw32
在C:\MinGW\msys\1.0\etc中使用notepad++打开fstab文件,在其中添加唯一一条映射:
D:\/01_tools\/mingw-w64\/i686-8.1.0-release-posix-dwarf-rt_v6-rev0\/mingw32 /mingw
注意:windows中要加上反斜杠。
2 使用msys和MinGW-w64编译ffmpeg,生成.a的静态库,头文件以及bin文件
从C:\MinGW\msys\1.0\中打开msys.bat进入msys终端;
cd d:
cd 04_project/ffmpeg/ffmpeg-4.0.2/ffmpeg-4.0.2
./configure --prefix=/d/01_tools/mingw-w64/i686-8.1.0-release-posix-dwarf-rt_v6-rev0/mingw32/i686-w64-mingw32
其中prefix的值是MinGW-64安装目录中的i686-w64-mingw32。在1.1中下载解压出来的ffmpeg-4.0.2源码目录中执行configure
make
make install
lib中得到静态库和pkgconfig:
include中得到头文件
3 在dev-c++中使用ffmpeg的静态库
我们编译ffmpeg提供的example中的muxing.c
3.1 创建工程
a. 新建一个控制台c程序工程
b. 在工具->编译器选项中新建一个编译器new1
编译example用到的编译器是我们编译ffmpeg所使用的编译器 D:\01_tools\mingw-w64\i686-8.1.0-release-posix-dwarf-rt_v6-rev0\mingw32
如下是编译器的配置:
c 配置项目属性
打开项目->项目属性,在参数->链接中填入一下静态库:
-lavformat
-lavcodec
-lswresample
-lavutil
-lswscale
-pthread
-lm
-lz
-lsecur32
-lws2_32
-liconv
-lole32
-luser32
-lbcrypt
到目前为止,我们缺少两个库
libconv.a和libz.a
d 编译 libconv.a
下载libconv的源码
https://ftp.gnu.org/pub/gnu/libiconv/
下载libiconv-1.15
将下载的源码目录复制到mysy的home目录中,例如C:\MinGW\msys\1.0\home\cheny,“cheny”是当前用户。
在msys终端中执行如下命令:
./configure --prefix=/c/MinGW/msys/1.0/lib/libconv
make
make install
将编译好的库和头文件目录添加到项目属性的文件/目录中。
e 编译libz.a
下载源码地址:http://gnuwin32.sourceforge.net/packages/zlib.htm
复制zlib-1.2.3目录到C:\MinGW\msys\1.0\home\cheny
cd到zlib-1.2.3,执行如下命令:
cp win32/Makefile.gcc .
make -f Makefile.gcc
export "INCLUDE_PATH=/c/MinGW/msys/1.0/lib/zlib/include"
export "LIBRARY_PATH=/c/MinGW/msys/1.0/lib/zlib/lib"
export "BINARY_PATH=/c/MinGW/msys/1.0/lib/zlib/bin"
make install -f makefile.gcc
将编译好的库和头文件目录添加到项目属性的文件/目录中。
f 编译工程
成功得到exe程序,在不需要avcodec-58.dll/avfilter-7.dll/avdevice-58.dll/avformat-58.dll/avutil-56.dll等动态链接库的情况下也可以运行程序。