本节介绍如何在Windows系统下搭建FFmpeg开发环境,包括FFmpeg开发对于Windows系统的软硬件要求,如何在Windows上安装FFmpeg依赖的软件,以及如何在Windows上安装已编译的FFmpeg套件等。
工欲善其事,必先利其器。要想保证FFmpeg的编译和运行速度,开发用的计算机配置就要跟上。使用Windows系统开发FFmpeg的话,对计算机硬件的基本要求如下。
(1)内存要求至少8GB,越大越好。
(2)CPU要求1.5GHz以上,越快越好。
(3)硬盘要求安装盘剩余空间10GB以上,越大越好。
下面是对操作系统的基本要求。
(1)必须是64位系统,不能是32位系统。
(2)Windows系统最低为Windows 10版本,本书配套的C代码在Windows 10上调试通过。
下面是对网络的基本要求。
(1)最好连公众网,因为校园网可能无法访问GitHub等网站。
(2)下载速度至少每秒1MB,越快越好。因为Visual Studio 2022与MSYS2的安装包大小都有几百MB,所以网络带宽一定要够大,否则连下载文件都要等很久。
虽然各大云厂商都提供了基于Linux的云服务,但毕竟是收费的,还有时间限制。由于Linux系统比较专业,个人计算机很少安装Linux,反而大都安装Windows系统,因此提高了FFmpeg的学习门槛,毕竟在Windows系统搭建FFmpeg的开发环境还是比较麻烦的。
不过如果有已经编译好的Windows版本FFmpeg开发包,就免去了烦琐的Windows编译过程。如果改成直接安装已编译的FFmpeg开发包,还是相对容易的。无论是否自己编译FFmpeg源码,Windows系统均需事先安装Visual Studio和MSYS2,下面介绍在Windows系统安装已编译的FFmpeg的详细步骤。
Visual Studio是Windows系统的微软官方开发环境,可用来开发C++编码的桌面程序,一些第三方工具也要依靠Visual Studio才能编译出.dll动态库,所以在Windows系统进行C++开发离不开Visual Studio。以下是在Windows系统安装Visual Studio 2022的详细步骤。
01 到https://visualstudio.microsoft.com/zh-hans/vs/community/下载Visual Studio 2022的社区版,打开该页面后,在左边找到“下载”按钮并单击,或者打开网页后下拉到底部,单击左边的“免费下载”按钮,浏览器就开始下载社区版的安装文件。
02 双击下载好的VisualStudioSetup.exe,弹出如图1-1所示的安装向导窗口。单击窗口右下角的“继续”按钮,等待安装程序下载安装资源,如图1-2所示。
图1-1 Visual Studio的安装向导窗口
图1-2 Visual Studio的下载资源窗口
下载完毕会弹出完整的安装界面,如图1-3所示。
图1-3 Visual Studio的完整安装界面
在默认的“工作负荷”选项卡找到“使用C++的桌面开发”,勾选该复选框以便安装C++编程需要的各种插件。注意右侧的“可选”组件列表中,Windows 11 SDK(10.0.*****.0)这里要勾选不低于当前Windows版本号的SDK选项。在Windows命令行运行winver会弹出Windows版本窗口,版本窗口第二行括号中的“内部版本****”就是Windows的版本号。例如,Windows版本号为18363的话,图1-3右侧列表勾选SDK版本号大于或等于18363的任一选项均可;但是如果Windows版本号为22621,就要勾选SDK版本号大于或等于22621的选项。
单击“安装位置”选项卡,或者单击左下方的“更改”链接,可以修改Visual Studio的安装目录。然后单击安装界面右下角的“安装”按钮,转到正在安装的等待界面,如图1-4所示。
图1-4 Visual Studio的正在安装界面
等待安装程序的下载和安装操作,安装完毕的界面如图1-5所示。
图1-5 Visual Studio的安装完毕界面
接着双击Windows桌面上的Visual Studio 2022图标,弹出如图1-6所示的登录界面。
图1-6 Visual Studio的登录界面
单击界面右下方的“暂时跳过此项。”,跳转到如图1-7所示的设置界面。
图1-7 Visual Studio的设置界面
在设置界面选择合适的颜色主题,比如浅色主题,再单击右下角的“启动Visual Studio”按钮,如图1-8所示。
图1-8 Visual Studio的启动界面
Visual Studio设置完成之后,弹出如图1-9所示的开始界面。
图1-9 Visual Studio的开始界面
至此,Visual Studio的安装过程就完成了。由于接下来的FFmpeg环境属于命令行操作,因此无须通过Visual Studio创建新项目。
MSYS2允许在Windows系统模拟Linux环境,它的命令行界面可以很好地仿真Linux终端,所以在Windows系统上编译和执行FFmpeg程序需要通过MSYS2的控制台操作。以下是在Windows系统安装MSYS2的详细步骤。
01 到https://github.com/msys2/msys2-installer/releases/下载MSYS2的安装包,打开该页面后,单击Assets文字以便展开安装包列表,接着单击MSYS2的Windows安装包链接,比如msys2-x86_64-20230318.exe,浏览器就开始下载Windows版本的安装文件。
02 双击下载好的msys2-x86_64-20230318.exe,弹出如图1-10所示的安装向导窗口。
单击窗口下方的“下一步”按钮,转到安装目录窗口,如图1-11所示。
图1-10 MSYS2的安装向导窗口
图1-11 MSYS2的安装文件夹窗口
修改MSYS2的安装目录,单击窗口下方的下一步按钮,转到如图1-12所示的快捷方式窗口。
继续单击“下一步”按钮,转到如图1-13所示的正在安装窗口。
图1-12 MSYS2的快捷方式窗口
图1-13 MSYS2的正在安装窗口
等待安装结束,转到如图1-14所示的安装完成窗口。至此,成功在Windows上安装了MSYS2。
图1-14 MSYS2的安装完成窗口
03 MSYS2安装完毕后,打开安装目录下的msys2_shell.cmd,去掉该文件第17行代码的注释,也就是删除关键字rem,修改之后的代码如下:
set MSYS2_PATH_TYPE=inherit
之所以去掉该行代码的注释,是为了让MSYS2继承Windows系统的PATH环境变量,否则后面编译会报错“Microsoft Visual Studio support requires Visual Studio 2013 Update 2 or newer”。
Visual Studio 2022和MSYS2都安装之后,才能在MSYS2的命令行安装FFmpeg,详细的安装过程说明如下。
依次选择Windows开始菜单的Visual Studio 2022→x64 Native Tools Command Prompt for VS 2022,打开Visual Studio 2022的命令行界面。
然后进入msys64目录,打开MSYS2的命令行窗口,也就是依次执行以下命令(注意msys64目录要改成自己计算机上的路径):
cd E:\msys64 msys2_shell.cmd -mingw64
之所以要在msys2_shell.cmd后面添加“-mingw64”,是为了让MinGW运行于64位模式,而非默认的32位模式。MinGW的全称是Minimalist GNU for Windows,意思是专用于Windows系统的极简版GNU工具集,它允许在Windows系统执行Linux的编译命令。如果说MSYS2相当于Windows环境的Linux模拟器,那么MinGW给MSYS2准备了32位和64位两套编译器,而我们的目标是在Windows系统模拟64位的Linux开发环境。
虽然安装了MSYS2,但是一开始里面只支持cd和ls等基本命令,竟然连gcc和make这些编译命令都没有,因此要先给它安装常用的编译工具。在MSYS2的命令行输入以下命令安装几个编译工具:
pacman -S gcc make nasm pkg-config diffutils zlib vim unzip
以上的pacman –S命令后面跟着待安装的工具名称,这些工具的详细介绍见表1-2。
表1-2 待安装的工具说明
Pacman在安装过程中会提示[Y/n]确认是否继续安装,此时输入Y确定安装即可。等待Pacman将编译工具安装完毕,可以在/usr/bin下找到相应的可执行程序。
另外,还要执行以下命令安装交叉编译工具链:
pacman -S mingw-w64-x86_64-toolchain
执行以上命令提示“Enter a selection (default=all):”的时候,按回车键表示安装列表上的所有组件。接着提示Proceed with installation? [Y/n]的时候,输入Y表示确认安装操作。安装好工具链可以在/mingw64/bin下找到相应的可执行程序,注意把该目录下的x86_64-w64-mingw32-gcc-ar.exe改名为x86_64-w64-mingw32-ar.exe,把x86_64-w64-mingw32-gcc-nm.exe改名为x86_64-w64-mingw32-nm.exe,也就是去掉这两个文件名中的-gcc,另外要把strip.exe改名为x86_64-w64-mingw32-strip.exe。
虽然在第8章才会用到交叉编译工具链,但该工具链应当尽早安装。因为MSYS安装之后的密钥环有效期只有150天左右,而工具链中的个别组件会检查密钥环是否有效。如果密钥环过了150天之后才安装工具链,MSYS2就会报错signature from "David Macek <david.macek.0@gmail.com>" is unknown trust,意思是签名不被信任,这便是密钥环过期导致的。一旦发现密钥环过期,此时要么更新密钥环,要么重新安装MSYS,这两种方式都比较麻烦,所以最好在安装完MSYS后立即安装交叉编译工具链。
(1)到https://github.com/BtbN/FFmpeg-Builds/releases下载Windows环境编译好的FFmpeg安装包,比如ffmpeg-master-latest-win64-gpl-shared.zip。
要下载带Win64且带Shared的压缩包,因为带Shared的包提供了头文件和DLL动态库,而不带Shared的包只有可执行程序,没法用来编程开发。
(2)把ffmpeg-master-latest-win64-gpl-shared.zip解压到指定目录,并将解压后的目录改名为ffmpeg,比如E:\msys64\usr\local\ffmpeg\。
(3)右击Windows桌面上的“此电脑”图标,在弹出的快捷菜单中选择“属性”,接着单击新页面左侧的“高级系统设置”链接,在弹出的“系统属性”窗口中单击下方的“环境变量”按钮,然后编辑系统变量列表中的PATH变量,给它添加三个目录:
· 第一个是FFmpeg的可执行程序及其动态库目录,比如E:\msys64\usr\local\ffmpeg\bin,该目录中主要有ffmpeg、ffplay、ffprobe等程序,以及若干DLL动态库。
· 第二个是MSYS2的可执行程序目录,比如E:\msys64\usr\bin,该目录主要有cp、env、ls、mv、ps、rm、tar等基本命令程序,还包括后面安装的gcc、g++、gdb、make、pkg-config等编译调试程序。
· 第三个是MinGW64位模式的可执行程序及其动态库目录,比如E:\msys64\mingw64\bin,虽然该目录中的.exe文件基本都能在usr\bin目录中找到,但是该目录的众多DLL文件在其他目录找不到,所以也要把它加进PATH变量。
之所以给PATH变量添加这三个目录,是为了在命令行输入相关命令时,Windows能够自动找到对应的可执行程序,并链接需要的DLL动态库。
在MSYS2的控制台执行以下命令查看FFmpeg的版本信息:
ffmpeg -version
发现控制台回显如下的FFmpeg版本与编译器版本信息,这说明FFmpeg程序已成功运行。
ffmpeg version N-109444-geef763c705-20221222 Copyright (c) 2000-2022 the FFmpeg developers built with gcc 12.2.0 (crosstool-NG 1.25.0.90_cf9beb1)