一、安装编译环境
window10 环境下 ffmpeg 的编译方式主要有以下2种:
1,MSYS2 + MinGW
2,MSYS2 + MSVC
ffmpeg 的源码是跨平台的,通过 configure(shell脚本) 实现不同平台的编译规则。在 configure 的时候指定 --toolchain=msvc 就可以 使用 msvc 来编译 ffmpeg。
由于 window 的原生 CMD 命令行无法执行shell脚本,也没有 make 之类的命令,所以需要装 MSYS2 软件。
MSYS2 是什么?MSYS2 实际上就是一个linux 仿真环境,装了 MSYS2 就可以运行 ffmpeg 的configure 编译脚本了。
这应该是所需要的最少的软件和配置:
MSYS2(重要!):https://www.msys2.org/, 傻瓜式安装,但是要自己配置环境变量,下载后在开始菜单能看到如下4个程序,我们使用的是MSYS2 MinGW 64-bit,建议安装目录是D:\msys64
路径不能有中文,不能有空格。
给 MSYS2 添加了中科大的源。
简单的说 msys64\etc\pacman.d 目录下有三个文件。
mirrorlist.msys
##
## MSYS2 repository mirrorlist
##
## Primary
## msys2.org
Server = http://mirrors.ustc.edu.cn/msys2/msys/$arch/
Server = http://repo.msys2.org/msys/$arch
Server = http://downloads.sourceforge.net/project/msys2/REPOS/MSYS2/$arch
Server = http://www2.futureware.at/~nickoe/msys2-mirror/msys/$arch/
mirrorlist.mingw64
##
## 64-bit Mingw-w64 repository mirrorlist
##
## Primary
## msys2.org
Server = http://mirrors.ustc.edu.cn/msys2/mingw/x86_64/
Server = http://repo.msys2.org/mingw/x86_64
Server = http://downloads.sourceforge.net/project/msys2/REPOS/MINGW/x86_64
Server = http://www2.futureware.at/~nickoe/msys2-mirror/x86_64/
Server = http://mirror.bit.edu.cn/msys2/REPOS/
mirrorlist.mingw32
##
## 32-bit Mingw-w64 repository mirrorlist
##
## Primary
## msys2.org
Server = http://mirrors.ustc.edu.cn/msys2/mingw/i686/
Server = http://repo.msys2.org/mingw/i686
Server = http://downloads.sourceforge.net/project/msys2/REPOS/MINGW/i686
Server = http://www2.futureware.at/~nickoe/msys2-mirror/i686/
启动软件,依次在 msys2 命令框运行以下 3 行命令
pacman -S mingw-w64-x86_64-toolchain
pacman -S base-devel
pacman -S yasm nasm gcc
二、下载源码
下载 ffmpeg 和 x264 的代码,并放到 msys2 的安装目录下。如图
ffmpeg 到 gitee 上下载,x264 到 videolan 上下载。
早期ffmpeg版本,例如4.2版本是没有 264 编码器的,只是自带了一个264的解码器。因为 x264 , fdk-aac ,这些库的版权不是ffmpeg的,所以没有直接集成进ffmpeg。ffmpeg也在开发自己的编解码器,4.4版的时候终于开发出了 h264_mf 跟 aac_mf 。
编解码器都是按照标准实现的,例如用 h264_mf 编码的mp4文件,同样能用 x264 的库去解码,反之亦然。除非项目需要,一定要用 x264 , fdk-aac 来进行编解码,否则用 ffmpeg 4.4.1 版本自带的 h264 ,acc 编解码器即可。
mp3 的编解码器,ffmpeg 4.4 也自带了,叫 mp3_mf ,所以也不需要下载编译 lame 库。
【参考文档】
Windows下编译ffmpeg的几种方式_windows编译ffmpeg_程序员~彭国庆的博客-CSDN博客
说明:msvc 需要手动选择 Win32 还是 x64 工具。
三、MinGW 编译 ffmpeg
说明:目录必须全部英文字母,不能有中文。
创建脚本文件,并执行。
build_ffmpeg.sh
basepath=$(cd `dirname $0`;pwd)
echo ${basepath}
cd ${basepath}/ffmpeg
pwd
./configure --prefix=${basepath}/ffmpeg_install --enable-shared --enable-gpl
make clean
make
make install
四、MSVC 编译 ffmpeg
说明:目录必须全部英文字母,不能有中文。
创建脚本文件,并执行。
build_ffmpeg_msvc.sh
basepath=$(cd `dirname $0`;pwd)
echo ${basepath}
cd ${basepath}/ffmpeg-6.0
pwd
./configure --prefix=${basepath}/ffmpeg_msvc_install --enable-shared --enable-gpl --toolchain=msvc
make clean
make
make install
五、ffmpeg 支持 265 的 RTMP 协议
参考git:GitHub - CDN-Union/H265: H265/HEVC Specification
例子:ffmpeg 6.0 需要修改的 3 个文件:
/libavformat/flv.h
/libavformat/flvdec.c
/libavformat/flvenc.c