Windows vs2019 ffmpeg6.0开发环境搭建

腾讯课堂 零声教育 音视频高级教程 Windows ffmpeg6.0开发环境搭建

开发环境 Win10

  • vs2019
  • Qt5.15.2
  • ffmpeg6.0

注:msys2部分组件的安装其实是没有必要的,因为这里编译实际是用的vs2019编译器,使用vs2019编译器则在项目开发时只需要引用ffmpeg相关的库即可。

1 Windows安装需要的软件和依赖

Visual Studio 2019 社区版 + QT5.15.2

  1. Visual Studio 2019 (使用community 社区版本即可)
  2. Qt5 (为VS2019版本获取MSVC包)
  3. CEF Wrapper 4638 库(目前不需要):https://cdn-fastly.obsproject.com/downloads/cef_binary_4638_windows_x64.zip
  4. Windows版本的CMake (3.16 ,或者更高版本)
  5. Windows版本的Git ,用于下载FFmpeg等

注意:

  1. 安装Visual Studio 2019,必须勾选Desktop development with C++

image.png

  1. QT的版本务必使用QT5.15.2,其他版本不保证编译成功。

VS2019安装环境变量设置

设置环境变量
image.png

其他版本,比如vs2019
设置环境变量: 系统属性 -> 高级 -> 环境变量
PATH对应:
C:\Program Files (x86)\Microsoft Visual tudio\2019\Community\VC\Tools\MSVC\14.29.30133\bin\Hostx64\x64

安装CDB调试器步骤(MSVC编译器调试用)

先关闭Qt Creator
msvc编译器使用windbg下的cdb调试器 所以需要安装windbg
官网下载链接:https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/debugger-download-tools
参考:Qt Creator 安装SDK,在MSVC编译模式下使用CDB调试器 https://www.cnblogs.com/lixuejian/p/12915174.html
image.png
一定要安装好该调试器才能 MSVC2015 32bit/64bit才能调试。

2 MSYS2开发环境搭建

2.1 MSYS2 和 MinGW64 的区别和联系?

MSYS 相当于操作系统(如Windows),这个操作系统提供的软件、接口等和Linux相似。
MinGW 相当于开发工具包(如MSVC),这个开发工具包可以运行在 MSYS 下,包里的工具也可以运行在Windows下,编译结果是Windows程序。
参考自:使用MSYS的一些经验 - 知乎 (zhihu.com)

参考:windows下mingw和msys https://www.jianshu.com/p/3cb5819d04b6

我们后续Windows平台编译器版本统一使用VS2019,所以在使用MSYS2编译FFmpeg的时使用vs2019的环境变量。

2.2 MSYS2安装

MSYS2 (Minimal SYStem 2)是一个MSYS的独立改写版本,主要用于 shell 命令行开发环境。同时它也是一个在Cygwin(POSIX 兼容性层) 和 MinGW-w64(从"MinGW-生成")基础上产生的,追求更好的互操作性的 Windows 软件。
MSYS2 是MSYS的一个升级版,准确的说是集成了panman和Mingw-64的Cygwin升级版, 提供了bash shell等linux环境、版本控制软件(git/hg)和MinGW-w64 工具链。与MSYS最大的区别是移植了Arch linux的软件包管理系统Pacman(其实是与Cygwin的区别)。

下载地址:https://www.msys2.org/
image.png
建议通过阿里云的链接更快速下载:https://mirrors.aliyun.com/msys2/distrib/x86_64/msys2-x86_64-20230318.exe

下载后直接按步骤安装就行,本人安装于D:/msys64,后续也以该目录进行讲解。
image.png

2.3 MSYS2配置

修改msys2_shell.cmd

  1. 安装完成之后,先把安装目录下msys2_shell.cmd中注释掉的rem set MSYS2_PATH_TYPE=inherit改成set MSYS2_PATH_TYPE=inherit,这是为了将vs的环境继承给MSYS2。

image.png

修改pacman的源

pacman是一个软件包管理器,用来在MSYS2中安装软件,但是默认的国外的源下载安装包时非常缓慢,大概只有十几二十KB的速度,而且还容易下载中断出错,所以需要修改为国内源,国内源可以选择中科大的源。
按照MSYS2镜像提示修改。具体如下:
image.png
注意:是在文件夹打开文件进行编辑,不是在shell窗口编辑。

编辑 /etc/pacman.d/mirrorlist.mingw32 ,在文件开头添加:

Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/i686/
Server = http://mirrors.ustc.edu.cn/msys2/mingw/i686/

编辑 /etc/pacman.d/mirrorlist.mingw64 ,在文件开头添加:

Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/x86_64/
Server = http://mirrors.ustc.edu.cn/msys2/mingw/x86_64/

编辑 /etc/pacman.d/mirrorlist.msys ,在文件开头添加:

Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/msys/$arch/
Server = http://mirrors.ustc.edu.cn/msys2/msys/$arch/

修改验证方式

要先修改 msys64\etc*pacman.conf(大概40行),修改后:*
SigLevel = Never
#SigLevel = Required
#LocalFileSigLevel = Optional
image.png

通过vs2019命令行启动msys2

D:\msys64\msys2_shell.cmd 文件修改完毕,通过x64 Native Tools Command Prompt for VS 2019 这个命令工具打开命令行窗口:
image.png

点击 x64 Native Tools Command Prompt for VS 2019 打开命令行,目的是让 msys2 来继承vs2019 的环境变量,即是set MSYS2_PATH_TYPE=inherit 的意义。
启动后的界面:
image.png

**启动命令行窗口,**在窗口中输入:

#进入msys2安装目录
D:
cd  D:\msys64
#如果要打开msys2的mingw64窗口
msys2_shell.cmd -mingw64
#如果要打开msys2的msys窗口
#msys2_shell.cmd

效果如下所示:
image.png

然后在msys2的shell中执行:

pacman -Sy

image.png
刷新软件包数据。

2.4 安装编译环境

2.4.1安装mingw-w64

在前面的基础上在shell窗口中输入:

pacman -S mingw-w64-x86_64-toolchain

然后默认全部安装即可(直接回车)。
image.png

2.4.2 安装git

安装git:任一方式打开shell窗口输入:

pacman -S git

2.4.3 安装make等工具

pacman -S make
pacman -S automake
pacman -S autoconf
pacman -S perl
pacman -S libtool

pacman -S mingw-w64-i686-cmake 
# 这里应该是安装的 x86_64的cmake,课上安装mingw-w64-i686-cmake 虽然也没影响编译
pacman -S mingw-w64-x86_64-cmake  


pacman -S  pkg-config
如果需要编译出ffplayer的话,还需要安装SDL
pacman -S mingw-w64-x86_64-SDL2

image.png

2.4.4 安装YASM

pacman -S yasm

2.4.5 安装nasm

编译当前最新x264时需要用到nasm。

pacman -S nasm

2.4.6 修改支持中文显示

窗口右键->Options->Text,然后locale选择:zh_CN,Character set 选择 UTF-8。

3 源码编译第三方库和FFmpeg

3.1 创建ffmpeg目录

在home目录下创建
ffmpeg6.0_sources:用于下载源文件

cd ~
mkdir ffmpeg6.0_sources 

这里增加6.0的标识是为了和其他ffmpeg版本做区分。

3.2 源码编译第三方库

3.2.1 libx264

H.264视频编码器。更多信息和使用范例参考H.264 Encoding Guide
要求编译ffmpeg时配置:–enable-gpl --enable-libx264.
使用源码进行编译:

cd ~/ffmpeg6.0_sources 
git clone --depth 1 https://github.com/mirror/x264.git 
cd x264 
CC=cl ./configure  --enable-shared  
make 
make install
cp  /usr/local/lib/libx264.dll.lib /usr/local/lib/libx264.lib 

默认安装到: /usr/local/lib,需要注意到是被安装的文件名为libx264.dll.lib,需要自己手动改名为libx264.lib

3.2.2 libx265

H.265/HEVC 视频编码器, 更多信息和使用范例参考H.265 Encoding Guide
要求编译ffmpeg时配置:–enable-gpl --enable-libx265.

x265的安装和x264有区别,x265不要使用 msys2 当中的cmake, 因为msys-cl 目录下生成的make-Makefiles.sh 文件是VS调用的Makefile文件,而不是make的,并且稍候要使用nmake来进行编译。

修改文件:如果发现 msys的 usr/bin目录下已经包含cmake, 则将其改名:ccmake.exe

mv  /mingw64/bin/cmake.exe /mingw64/bin/ccmake.exe

编译项目:

cd ~/ffmpeg6.0_sources 
git clone https://gitee.com/mirrors_videolan/x265.git
cd x265/build/msys-cl
./make-Makefiles.sh

# 将编译好的文件拷贝到需要的目录,这里如果直接使用nmake install安装则实际是安装到vs2019对应的安装路径,所以手动拷贝
cp x265.exe libx265.dll /usr/local/bin
# 这里改下名字,265是打开x265.lib
cp libx265.lib /usr/local/lib/x265.lib
cp x265-static.lib /usr/local/lib/
cp x265_config.h /usr/local/include/
cp ../../source/x265.h /usr/local/include/
cp x265.pc /usr/local/lib/pkgconfig/

然后进到/usr/local/lib/pkgconfig/目录修改x265.pc的配置,将其
prefix=C:/Program Files (x86)/x265
改成
prefix=/usr/local

3.2.3 libfdk-aac

AAC音频编码器. 更多信息和使用范例参考AAC Audio Encoding Guide
要求编译ffmpeg时配置:–enable-libfdk-aac ( 如果你已经配置了 --enable-gpl则需要加上–enable-nonfree).

cd ~/ffmpeg6.0_sources 
git clone   https://github.com/mstorsjo/fdk-aac.git fdk-aac-2.0.1
cd fdk-aac-2.0.1
git checkout v2.0.1
# 先把msys2的link改名,因为这里需要使用vs2019的link
mv /usr/bin/link.exe /usr/bin/link-bk.exe
# 编译
nmake -f Makefile.vc all
# 安装,安装后fdk相关的头文件、库文件就和x264 x265同样的目录了
nmake -f Makefile.vc prefix=/usr/local install
# 恢复link.exe
mv  /usr/bin/link-bk.exe /usr/bin/link.exe

然后在/usr/local/lib/pkgconfig目录 创建fdk-aac.pc并添加以下内容:

prefix=/usr/local
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include

Name: Fraunhofer FDK AAC Codec Library
Description: AAC codec library
Version: 2.0.1
Libs: -L${libdir} -lfdk-aac
Libs.private:
Cflags: -I${includedir}

3.2.4 配置SDL2

image.png

记得ffmpeg配置支持 --enable-sdl2

sdl2下载 下载VC版本,解压并放到D:\msys64\usr\local对应的目录。

image.png
image.png

1 配置sdl2对msvc可见

显然,sdl2头文件和库文件必须让编译器可以找到, 可以把头文件目录添加到INCLUDE环境变量,将库文件目录添加到LIB环境变量 在MSYS2控制台执行

比如:

export INCLUDE=$INCLUDE";D:\msys64\usr\local\include\SDL2"
export LIB=$LIB";D:\msys64\usr\local\lib"

将对应的文件路径替换成自己的文件路径。
image.png
image.png
然后可以通过echo $LIB 查看情况。

2 配置sdl2对pkg-config可见

在D:\msys64\usr\local\lib\pkgconfig目录新建sdl2.pc 文件,编辑如下

prefix==/usr/local
exec_prefix=${prefix}
libdir=${prefix}/lib
includedir=${prefix}/include

Name: sdl2
Description: Simple DirectMedia Layer is a cross-platform multimedia library designed to provide low level access to audio, keyboard, mouse, joystick, 3D hardware via OpenGL, and 2D video framebuffer.
Version: 2.26.5
Requires:
Conflicts:
Libs: -L${libdir} -lSDL2main -lSDL2
Cflags: -I${includedir} 

3.3 源码编译FFmpeg

3.3.1 下载和编译源码

下载代码

cd ~/ffmpeg6.0_sources 
git clone https://github.com/FFmpeg/FFmpeg.git
cd FFmpeg
git checkout  remotes/origin/release/6.0
# 返回上一级别
cd ..
# 拷贝一份ffmpeg源码,因为原始的ffmpeg编译代码在msvc编译器有些地方报错,需要做修改
cp -arf FFmpeg ffmpeg6.0

github不稳定,有时候连不上,有时候速度又还挺快的。
image.png

修改ffmpeg6.0目录的源码
fftools\ffprobe.c注释
image.png
fftools\opt_common.c注释image.png

进入ffmpeg6.0代码编译

cd ffmpeg6.0

CC=cl.exe  PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/ ./configure   --toolchain=msvc --enable-shared  --enable-ffplay  --enable-libx264 --enable-libx265 --enable-libfdk-aac --enable-sdl2  --enable-gpl  --enable-nonfree  --disable-optimizations  --disable-stripping  

这里没有做编译优化,目的是学习过程中方便debug ffmpeg api源码。

报错分析:image.png

3.3.2 测试ffmpeg命令

(ffmpeg命令都会正常,不需要测试)
测试ffplay是否正常(有一个能正常播放就行),链接不保证都有效(网上的链接经常失效, 也可以播放本地文件测试)

ffplay.exe http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4
ffplay.exe http://mirror.aarnet.edu.au/pub/TED-talks/911Mothers_2010W-480p.mp4

如果需要更多的视频测试文件,可以到https://sample-videos.com/index.php#sample-mp4-video下载。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

流媒体程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值