借助开源项目 ShiftMediaProject,我们可以在Windows下使用Visual Studio编译和调试FFmpeg源码。
网上相关的教程很多,写的也十分详细。但由于计算机环境的不同,笔者在编译环境搭建过程中,还是出现了不少问题。本文将对其中容易出问题的部分进行深入讲解。
同时,本文将提供可成功编译调试的FFmpeg开发环境虚拟机下载。笔者认为前人踩过的坑,仅作记录即可,后来者不需要再花费同样的精力去重新踩一遍坑,后来者只有站在前人的肩膀上才能看得更远。
本文使用VS2017编译FFmpeg,VS2015版本的编译环境正在制作中。
其中,msvc目录为编译输出目录,source目录为FFmpeg及所有依赖库源码存放目录。需要注意两点:
- 所有路径中尽量不要有空格
- msvc和source文件夹不能换成其他名称,
因为VS项目中使用了这两个文件夹,所以不可修改其名称。
在source文件夹内,克隆ShiftMediaProject中的子项目FFmpeg的源码。项目地址:https://github.com/ShiftMediaProject/FFmpeg。克隆代码可能需要科学上网。
克隆完成后,进入ShiftMediaProject/source/FFmpeg/SMP/ 文件夹,在命令行中执行 project_get_dependencies.bat 批处理脚本。此批处理脚本会自动调用git,克隆FFmpeg的其他依赖项目。这个过程同样需要科学上网,并且耗时较长。需要注意的是,克隆完成后,请检查每个文件夹不为空,以保证克隆成功。如果没有成功,需要重新执行project_get_dependencies.bat 批处理脚本,直到所有项目克隆成功。
下载额外的头文件(需要科学上网)。
至此,源码下载完成。下载比较耗时且容易出错,文末提供了源码下载地址,可直接下载使用。
下一步需要安装必要的编译工具。
由于某些项目中包含汇编代码,所以需要使用YASM和NASM对汇编代码进行编译。
从开始菜单中,打开vs2017 64位命令行工具,如下图所示:
使用cd命令,进入到目录 ShiftMediaProject\source\VSYASM 文件夹中:
执行当前文件夹下的脚本 install_script.bat,安装 YASM。安装过程需要下载必要工具,速度较慢,可能需要科学上网。如果install_script.bat下载yasm程序过慢,可以手动去网络上下载对应版本的yasm,然后放到install_script.bat同级目录下,然后对install_script.bat脚本稍作改动,让其跳过下载步骤,直接使用本地程序即可。
至此YASM安装成功。
为了确认是否安装成功,可以到VS2017安装目录下查看yasm程序是否存在,如果存在,则确认安装成功。如下图所示:
NASM安装过程和YASM基本一致,这里不作过多描述。
安装完成后,在VS2017安装目录下,确认nasm程序是否存在,若存在,则安装成功。
需要安装VS2010运行库,yasm才能正常运行。运行库可自行下载,也可在文末给出的下载地址中下载。
使用VS2017打开FFmpeg工程文件 ShiftMediaProject\source\FFmpeg\SMP\ffmpeg_deps.sln,项目结构如下所示:
需要修改项目的SDK版本为 10.0.17763.0,而不是SDK 8.1。否则会出现各种错误,例如:
roapi.h:错误 C2016,结构体至少需要有一个成员。
按照以下顺序依次编译相关项目:
使用上述配置,在笔者的虚拟机中所有项目可以编译成功。
调试通常会启动失败,这是因为项目配置中,调试程序的路径配置不正确。只需要将调试配置中程序路径指向被调试的程序即可。调试成功截图如下:
关注公众号Qt未来工程师,后台回复 ShiftMediaProject工程源码,获取下载地址。
关注公众号Qt未来工程师,后台回复 vs2010运行库,获取下载地址。
虚拟机的优势是下载即用,不需要任何配置。关注公众号Qt未来工程师,后台回复 vs2017 win10 x64 FFmpeg虚拟机,获取下载地址。
虚拟机中的VS2017启动时会提示证书过期,无法进入,此时只需要注册一个微软账号并登录即可正常使用。
源码调试对学习开源项目至关重要,但是环境搭建是一个非常繁琐的过程,对初学者而言有很高的门槛。加强技术迭代,降低技术门槛,才是发展技术的正确方式,这一直以来也是本公众号的努力方向。后面的内容我们将发布更多源码调试的教程和资源,敬请关注。
本文原创发布于Qt未来工程师。