使用VS2017在win10 x64上编译调试FFmpeg(附源码和虚拟机下载)

1. 前言

借助开源项目 ShiftMediaProject,我们可以在Windows下使用Visual Studio编译和调试FFmpeg源码。

网上相关的教程很多,写的也十分详细。但由于计算机环境的不同,笔者在编译环境搭建过程中,还是出现了不少问题。本文将对其中容易出问题的部分进行深入讲解。

同时,本文将提供可成功编译调试的FFmpeg开发环境虚拟机下载。笔者认为前人踩过的坑,仅作记录即可,后来者不需要再花费同样的精力去重新踩一遍坑,后来者只有站在前人的肩膀上才能看得更远。

本文使用VS2017编译FFmpeg,VS2015版本的编译环境正在制作中。

2. 基本环境要求

  • 系统中已安装git
  • 系统中已安装VS2017

3. 使用ShiftMediaProject搭建环境的主要步骤

3.1 下载源码

  1. 首先新建名为 ShiftMediaProject 的文件夹,然后创建两个子文件夹,即 msvc 和 source 文件夹。创建完成后的目录结构如下所示:

ShiftMediaProject目录

其中,msvc目录为编译输出目录,source目录为FFmpeg及所有依赖库源码存放目录。需要注意两点:
- 所有路径中尽量不要有空格
- msvc和source文件夹不能换成其他名称,

因为VS项目中使用了这两个文件夹,所以不可修改其名称。

  1. 在source文件夹内,克隆ShiftMediaProject中的子项目FFmpeg的源码。项目地址:https://github.com/ShiftMediaProject/FFmpeg。克隆代码可能需要科学上网。

  2. 克隆完成后,进入ShiftMediaProject/source/FFmpeg/SMP/ 文件夹,在命令行中执行 project_get_dependencies.bat 批处理脚本。此批处理脚本会自动调用git,克隆FFmpeg的其他依赖项目。这个过程同样需要科学上网,并且耗时较长。需要注意的是,克隆完成后,请检查每个文件夹不为空,以保证克隆成功。如果没有成功,需要重新执行project_get_dependencies.bat 批处理脚本,直到所有项目克隆成功。

  3. 下载额外的头文件(需要科学上网)。

    • 从 这里 下载 opengl 的 glext.h 和 wglext.h 放到 ShiftMediaProject/msvc/include/gl/ 下。
    • 从 这里 下载 opengl 的 khrplatform.h 到 ShiftMediaProject/msvc/include/KHR/ 下。
    • 从 这里 下载 nv-codec-headers 项目的 include 文件夹下的所有内容到 ShiftMediaProject/msvc/include/ 下。
    • 从 这里 下载 AMF 项目的 amf/public/include/ 文件夹下的所有内容到 ShiftMediaProject/msvc/include/AMF/ 下。

至此,源码下载完成。下载比较耗时且容易出错,文末提供了源码下载地址,可直接下载使用。

下一步需要安装必要的编译工具。

3.2 安装编译工具

3.2.1 安装YASM汇编工具

由于某些项目中包含汇编代码,所以需要使用YASM和NASM对汇编代码进行编译。

从开始菜单中,打开vs2017 64位命令行工具,如下图所示:

使用VS2017在win10 x64上编译调试FFmpeg(附源码和虚拟机下载)_第1张图片

使用cd命令,进入到目录 ShiftMediaProject\source\VSYASM 文件夹中:

使用VS2017在win10 x64上编译调试FFmpeg(附源码和虚拟机下载)_第2张图片

执行当前文件夹下的脚本 install_script.bat,安装 YASM。安装过程需要下载必要工具,速度较慢,可能需要科学上网。如果install_script.bat下载yasm程序过慢,可以手动去网络上下载对应版本的yasm,然后放到install_script.bat同级目录下,然后对install_script.bat脚本稍作改动,让其跳过下载步骤,直接使用本地程序即可。

使用VS2017在win10 x64上编译调试FFmpeg(附源码和虚拟机下载)_第3张图片

至此YASM安装成功。

为了确认是否安装成功,可以到VS2017安装目录下查看yasm程序是否存在,如果存在,则确认安装成功。如下图所示:

使用VS2017在win10 x64上编译调试FFmpeg(附源码和虚拟机下载)_第4张图片

3.2.2 安装NASM汇编工具

NASM安装过程和YASM基本一致,这里不作过多描述。

安装完成后,在VS2017安装目录下,确认nasm程序是否存在,若存在,则安装成功。

使用VS2017在win10 x64上编译调试FFmpeg(附源码和虚拟机下载)_第5张图片

3.2.3 安装VS2010运行库

需要安装VS2010运行库,yasm才能正常运行。运行库可自行下载,也可在文末给出的下载地址中下载。

4. 编译调试

4.1 项目结构

使用VS2017打开FFmpeg工程文件 ShiftMediaProject\source\FFmpeg\SMP\ffmpeg_deps.sln,项目结构如下所示:

使用VS2017在win10 x64上编译调试FFmpeg(附源码和虚拟机下载)_第6张图片

4.2 项目配置

需要修改项目的SDK版本为 10.0.17763.0,而不是SDK 8.1。否则会出现各种错误,例如:

roapi.h:错误 C2016,结构体至少需要有一个成员。

4.3 编译

按照以下顺序依次编译相关项目:

  • 第三方依赖库
  • FFmpeg开发库
  • FFmpeg实用程序

使用上述配置,在笔者的虚拟机中所有项目可以编译成功。

4.4 调试

调试通常会启动失败,这是因为项目配置中,调试程序的路径配置不正确。只需要将调试配置中程序路径指向被调试的程序即可。调试成功截图如下:

使用VS2017在win10 x64上编译调试FFmpeg(附源码和虚拟机下载)_第7张图片

5. 资源下载

5.1 源码包下载

关注公众号Qt未来工程师,后台回复 ShiftMediaProject工程源码,获取下载地址。

5.2 VS2010运行库下载

关注公众号Qt未来工程师,后台回复 vs2010运行库,获取下载地址。

5.3 VS2017 win10 x64 FFmpeg编译调试虚拟机下载

虚拟机的优势是下载即用,不需要任何配置。关注公众号Qt未来工程师,后台回复 vs2017 win10 x64 FFmpeg虚拟机,获取下载地址。

虚拟机中的VS2017启动时会提示证书过期,无法进入,此时只需要注册一个微软账号并登录即可正常使用。

6. 结语

源码调试对学习开源项目至关重要,但是环境搭建是一个非常繁琐的过程,对初学者而言有很高的门槛。加强技术迭代,降低技术门槛,才是发展技术的正确方式,这一直以来也是本公众号的努力方向。后面的内容我们将发布更多源码调试的教程和资源,敬请关注。


本文原创发布于Qt未来工程师。

你可能感兴趣的:(音视频开发,ffmpeg)