工具和源码筹备
- ffmpeg https://ffmpeg.org/download.h...
- libx264 https://www.videolan.org/deve...
- libx265 https://www.videolan.org/deve...
- MSYS2 官网地址:https://www.msys2.org/
(MSYS 2.0 提供了 pacman 软件管理器,通过它来装置依赖的软件。msys2不能够装置再FAT*分区。msys2不能够装置再winXP零碎上 - VS2015
- CMAKE
(a)对于VS版本:VS2010不反对C99,当初很多开源代码(比方x264,ffmpeg)中的C代码都采纳c99标准,前vs2010,vs2012都不反对c99标准,从vs2013开始才局部反对c99标准。如果是VS2010编译,须要先采纳C99 to C89 转换工具进行预处理)
(b)VS须要应用英文语言包。否则前面编译ffmpeg会大量报错,命令行 error D8000:cl
编译形式
很多教程用 MinGW 来编译,最初编译进去的动态库是个 .a 的模式。
然而Windows 下的动态库是 .lib,间接用 CMake 去链接 .a 库必定不行。
须要先把 .a 库转成 .def 文件,而后再把 .def 文件转成 .lib 文件,甚至再把 .lib 文件转成 .dll 的动静库。windows平台下倡议用MSVC编译器编译。
启动环境
开始菜单中找到并关上Visual Studio 2015 Command line。
Visual Studio Command line分为32位版本和64位版本。
用32位版本编译的程序就是32位的。用64位版本编译的程序就是64位的。编译进去的exe或者dll能够用dumpbin判断是32位还是64位。
查看32位还是64位:
dumpbin /headers libx264.dll
查看符号清单(导出函数):
dumpbin /exports libx264.dll > libx264-exports.txt
在Visual Studio 2015 Command line命令行终端中,进入到 MSYS 装置目录,关上 msys2_shell.cmd ,如下命令
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC>c:/msys64/msys2_shell.cmd -use-full-path
留神-use-full-path的应用。因为在调用msys时如果不增加-use-full-path ,前面在msys2的shell中就会不认cc=cl。即无奈在msys中应用MSVC。一下办法是等价的。倡议第二种。
- msys2_shell.cmd 中勾销一行的正文:set MSYS2_PATH_TYPE=inherit
- 调用msys2_shell.cmd时应用-use-full-path参数
- 在windows零碎的环境变量中增加 MSYS2_PATH_TYPE=inherit
MSYS2窗口关上后,先把根本的环境装置好
pacman -Syupacman -S makepacman -S diffutilspacman -S yasmpacman -S nasm
x264
在该窗口中进入到 LibX264 的源码目录下,把如下代码保留成 .sh 文件并执行:
OPTIONS="--enable-shared --enable-static "BUILD_DIR="./../build32"CC=cl ./configure $OPTIONS --prefix=$BUILD_DIR/make -j 16make installmake clean
留神 configure 命令前缀有个 CC=cl ,代表应用 MSVC 来编译了。
将编译后的 libx264.dll.lib 改成 libx264.lib,这就是动态库了。如果不批改名字,后续FFMPEG编译的时候会提醒找不到libx264。
编译实现之后,关上生成门路下/lib/pkgconfig/x264.pc文件。检查一下prefix的门路。倡议间接改成绝对路径。pc文件前面编译ffmpeg要用到。
如果要编译
x265
x265采纳cmake编译。相比x264而言,其build目录下曾经把各个平台的sh文件提供了:
在msys2窗口中cd进入msys-cl目录,关上make-Makefiles.sh稍作批改如下:
#!/bin/sh# This is to generate visual studio builds with required environment variables set in this shell, useful for ffmpeg integration# Run this from within an MSYS bash shellINSTALL_DIR="./../../../build32/"if cl; then echo else echo "please launch msys from 'visual studio command prompt'" exit 1ficmake -G "NMake Makefiles" -DCMAKE_INSTALL_PREFIX=$INSTALL_DIR -DCMAKE_CXX_FLAGS="-DWIN32 -D_WINDOWS -W4 -GR -EHsc" -DCMAKE_C_FLAGS="-DWIN32 -D_WINDOWS -W4" ../../sourceif [ -e Makefile ]then nmakefinmake install
相比默认的sh, 增加如下三行:
INSTALL_DIR="./../../../build32/"-DCMAKE_INSTALL_PREFIX=$INSTALL_DIRnmake install
而后在MSYS2下执行sh make-Makefiles.sh。一键期待即可。
如果要编译64位的x265,把make-Makefiles-64bit.sh作相似批改,从visual studio command line 64位进入,关上msys2, 再执行sh make-Makefiles-64bit.sh即可。
ffmpeg
持续在 MSYS 2.0 窗口中进入到下载好 FFmpeg 的源码目录,将如下代码保留成 .sh 文件并执行:
X264_INSTALL="/d/zsc/VSCODE_CPP_DIR/FFMPEG-H264-TEST/x264-master/build32"X265_INSTALL="/d/zsc/VSCODE_CPP_DIR/FFMPEG-H264-TEST/x265-master/build32"X264_INCLUDE=$X264_INSTALL/includeX264_LIB=$X264_INSTALL/libX264_BIN=$X264_INSTALL/binX265_INCLUDE=$X265_INSTALL/includeX265_LIB=$X265_INSTALL/libX265_BIN=$X265_INSTALL/binexport PATH=$X264_BIN:$PATHexport PATH=$X265_BIN:$PATHexport PKG_CONFIG_PATH=$X264_LIB/pkgconfig:$PKG_CONFIG_PATHexport PKG_CONFIG_PATH=$X265_LIB/pkgconfig:$PKG_CONFIG_PATHecho $PKG_CONFIG_PATHBUILD_DIR="../build32"OPTIONS="--toolchain=msvc --arch=x86 --enable-yasm --enable-asm --enable-shared --enable-static --disable-programs --enable-swresample --enable-swscale --enable-gpl --enable-libx264 --enable-libx265 --enable-ffmpeg --enable-ffplay "CC=cl ./configure $OPTIONS --prefix=$BUILD_DIR/make -j 16make installmake clean
通过十几分钟的期待,编译出ffmpeg库:
--arch=x86 示意编译32位的ffmpeg库。也能够从visual studio command line 64位进入,关上msys2,改sh,编译64位的ffmpeg库(x264 x265也得用64位的dll)。