使用vs2019编译ffmpeg

近期遇到问题需要研究一下ffmpeg某部分实现的源码,跟踪调试ffmpeg会比较直观。

编译环境:vs2019

操作系统:win10

代码工程:ShiftMediaProject

一、准备工作

下载git客户端工具,网址:Git - Downloading Package

二、下载ffmpeg源码及相关库文件

1、ShiftMediaProject工程地址:GitHub - ShiftMediaProject/FFmpeg: Unofficial FFmpeg with added custom native Visual Studio project build tools. FFmpeg: A complete, cross-platform solution to record, convert and stream audio and video.

2、克隆到本地的目标项目目录 至少需要有2层,因为期望的项目的结构是这样子的:

- msvc (OutputDir)                (该项目默认的 VS 编译输出的目录)
- source                      (这个是需要的上一级目录,待会下载的依赖项目有很多,十几二十来个依赖项目都会下载到这里)
  - FFmpeg                    (这个是 clone 到本地的项目目录)
  - ..Any other libraries source code..    (其他的十几二十个依赖的项目)

准备好文件夹后,比如这里上面的 "source" 文件夹,在这个文件夹下,克隆代码下来

git clone https://github.com/ShiftMediaProject/FFmpeg.git

3、下载相关依赖库

直接运行FFmpeg/SMP下的脚本project_get_dependencies.bat,但按照国内的网络环境,通过这种方式是很难成功的,所以要一个个下依赖库。在git客户端依次执行以下命令

git clone https://github.com/ShiftMediaProject/bzip2.git

git clone https://github.com/ShiftMediaProject/fontconfig.git

git clone https://github.com/ShiftMediaProject/freetype2.git

git clone https://github.com/ShiftMediaProject/fribidi.git

git clone https://github.com/ShiftMediaProject/game-music-emu.git


git clone https://github.com/ShiftMediaProject/gmp.git


git clone https://github.com/ShiftMediaProject/gnutls.git

git clone https://github.com/ShiftMediaProject/harfbuzz.git

git clone https://github.com/ShiftMediaProject/lame.git

git clone https://github.com/ShiftMediaProject/libass.git

git clone https://github.com/ShiftMediaProject/libbluray.git

git clone https://github.com/ShiftMediaProject/libcdio.git

git clone https://github.com/ShiftMediaProject/libcdio-paranoia.git

git clone https://github.com/ShiftMediaProject/libgcrypt.git

git clone https://github.com/ShiftMediaProject/libgpg-error.git

git clone https://github.com/ShiftMediaProject/libiconv.git

git clone https://github.com/ShiftMediaProject/libilbc.git

git clone https://github.com/ShiftMediaProject/liblzma.git

git clone https://github.com/ShiftMediaProject/libssh.git

git clone https://github.com/ShiftMediaProject/libvpx.git

git clone https://github.com/ShiftMediaProject/libxml2.git

git clone https://github.com/ShiftMediaProject/mfx_dispatch.git


git clone https://github.com/ShiftMediaProject/modplug.git


git clone https://github.com/ShiftMediaProject/nettle.git


git clone https://github.com/ShiftMediaProject/ogg.git


git clone https://github.com/ShiftMediaProject/opus.git


git clone https://github.com/ShiftMediaProject/sdl.git


git clone https://github.com/ShiftMediaProject/soxr.git


git clone https://github.com/ShiftMediaProject/speex.git


git clone https://github.com/ShiftMediaProject/theora.git


git clone https://github.com/ShiftMediaProject/vorbis.git


git clone https://github.com/ShiftMediaProject/x264.git


git clone https://github.com/ShiftMediaProject/x265.git


git clone https://github.com/ShiftMediaProject/xvid.git


git clone https://github.com/ShiftMediaProject/zlib.git

下载过程中可能会报错,我们可以参考博文:

OpenSSL SSL_read: Connection was reset, errno 10054》和

Failed to connect to github.com port 443: Timed out》解决。

4、然后,可以运行脚本project_get_dependencies.bat,去下载其它依赖文件,但鉴于网络环境,建议手动下载依赖。需要下载依赖的只有gnutls工程,进入到gnults工程目录下,使用git  submodule init gnulib 与git submodule update命令进行下载。

如果没有成功下载,可以尝试手动下载,下载地址为 https://gitlab.com/libidn/gnulib-mirror.git

或者 git://git.sv.gnu.org/gnulib.git

可使用 git clone 下载代码,然后放置到 gnutls/gnulib 文件夹下即可。

三、下载安装VSNASM和VSYASM为vs项目添加nasm也yasm构建

ShiftMediaProject 提供了自动下载和安装 NASM 的安装脚本,下载地址为: Release 0.9 · ShiftMediaProject/VSNASM · GitHub

Releases · ShiftMediaProject/VSYASM · GitHub

尤其是下载NSNASM时要注意,需要与下载的ShiftMediaProject的版本保持一致。此处所有都下载最新即可。

注意:我曾经参考https://www.cnblogs.com/BensonLaur/p/10989115.html​​​​​​使用vs2015编译此工程,因为下载的nasm版本与

​​​​​​使用vs2015编译此工程,因为下载的nasm版本与 ShiftMediaProject版本不一致导致编译使用nasm的工程如libx264,libx265过程中出现如下错误:

error MSB4186: 静态方法调用语法“[MSBuild]::NormalizePath('$(MSBuildProjectDirectory)', '、..\source\FFmpeg\SMP\obj\Debug\x64\libavutil\cpuid.obj')”无效。未找到方法“[MSBuild]::NormalizePath”。 静态方法调用应采用以下形式:$([FullTypeName]::Method()),例如 $([System.IO.Path]::Combine(ab))。

下载后解压,分别以管理员权限运行vs2019开发者命令行中执行相应文件夹中install_script.bat即可。

执行完成后,VSYASM 和VSNASM中的.props,.targets 和.xml会复制到C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VC\v160\BuildCustomization目录下;yasm.exe会复制到C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC目录下;

其中nasm.exe需要手动下载Index of /pub/nasm/releasebuilds/2.16.02rc1/win64解压后,拷贝到C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC目录下即可。

四、下载其它依赖 

此处可以参考vs2019编译ShiftMediaProject_vs 2019 gmp_cuijiecheng2018的博客-CSDN博客

中第4部分内容。

五、编译

用vs2019打开ffmpeg_deps.sln,编译。如果我们上面的步骤都做对,那编译应该是不会出现问题的。如果编译出现问题那大概率是我们上面下载的依赖库没有下全。  

六、调试运行

在vs中 “调试” -> “开始执行(不调试)” 运行程序后,可能会报错:“系统找不到指定的文件”。这是因为调试工作目录和程序输出目录没有设置一致。

可以参考https://www.cnblogs.com/BensonLaur/p/10989115.html

vs2019编译ShiftMediaProject_vs 2019 gmp_cuijiecheng2018的博客-CSDN博客

进行设置。 

以下是使用VS2019编译FFmpeg的步骤: 1. 下载FFmpeg源代码: - 访问FFmpeg官方网站(https://ffmpeg.org/)并下载最新的源代码压缩包。 - 解压缩下载的压缩包到你选择的目录。 2. 安装MSYS2: - 访问MSYS2官方网站(https://www.msys2.org/)并下载最新的安装程序。 - 运行安装程序并按照提示进行安装。 - 安装完成后,打开MSYS2的终端。 3. 更新MSYS2: - 在MSYS2终端中运行以下命令来更新MSYS2的软件包: ```shell pacman -Syu ``` 4. 安装所需的依赖库: - 在MSYS2终端中运行以下命令来安装所需的依赖库: ```shell pacman -S mingw-w64-x86_64-toolchain mingw-w64-x86_64-cmake mingw-w64-x86_64-nasm ``` 5. 配置环境变量: - 打开VS2019并创建一个新的空白解决方案。 - 在解决方案资源管理器中,右键单击解决方案并选择“属性”。 - 在属性窗口中,选择“配置属性” > “VC++目录”。 - 在“包含目录”字段中,添加FFmpeg源代码的路径。 - 在“库目录”字段中,添加FFmpeg源代码的路径。 6. 配置FFmpeg编译选项: - 在解决方案资源管理器中,右键单击解决方案并选择“属性”。 - 在属性窗口中,选择“配置属性” > “C/C++” > “常规”。 - 在“附加包含目录”字段中,添加FFmpeg源代码的路径。 - 在属性窗口中,选择“配置属性” > “链接器” > “常规”。 - 在“附加库目录”字段中,添加FFmpeg源代码的路径。 - 在属性窗口中,选择“配置属性” > “链接器” > “输入”。 - 在“附加依赖项”字段中,添加以下库文件: ``` avcodec.lib avformat.lib avutil.lib swscale.lib ``` 7. 编译和运行: - 在VS2019中,选择“生成” > “生成解决方案”来编译FFmpeg。 - 如果编译成功,你可以在输出目录中找到生成的可执行文件。 请注意,编译FFmpeg可能需要一些时间和计算资源,并且可能会遇到一些依赖库的问题。确保按照上述步骤正确配置环境和依赖项。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值