从零开始学习音视频编程技术(38) windows下编译并调试ffmpeg
时间:2017年12月08日 人气:...

    前面介绍了Linux下编译ffmpeg的方法,考虑到大部分时候测试ffmpeg功能都是使用的windows系统(至少我是这样的),因此将战场重新转移到windows上。

    前面写了那么多的代码,但都只是简单的调用了ffmpeg的API,并不知道他内部是如何实现的。如果可以在调试的时候打个断点就可以进入ffmpeg代码调试看看实现该好友多好!梦想总是要有的,万一实现了呢!百度了一下发现可以做到,下面就来讲讲实现方法。 

      首先我们需要自己重新编译ffmpeg的源代码,其次我们需要将之前使用的mingw编译换成vs的编译器,因为qtcreator调试实在是坑爹,现在开始我们将开发工具从qtcreator转到vs上。不过我编写代码用的还是qtcreaotr,毕竟qtreator上是可以直接调用vs编译器的,qtcreaotr只是调试的时候坑一点。我一般都是实在看不出来问题在哪,需要逐步调试的时候,才将工程导入vs上调试一下,因为我比较习惯qtcreator的快捷键。当然,这只是个人观点。

    下面就来介绍windows下使用vs编译并调试ffmpeg的方法。

    

一、编译环境搭建

1.VS开发工具安装

    VS版本我用的是2013的,visual studio 2013大家自行百度下载安装。这里不提供地址了。


2.安装msys

    这里编译ffmpeg不是直接将ffmpeg代码导入vs工程,因为这个太难了,不改代码估计做不到,我也没有去研究过。有过在visual studio下编程的小伙伴应该都知道vs的调试信息主要依靠于pdb文件,那么我们今天编译的目的就是使FFmpeg的动态库生成相应的pdb文件。

    这里编译ffmpeg有点类似linux下编译,先是configure  然后 make   make install。

因此我们需要安装一个msys (Minimal GNU(POSIX)system on Windows,是一个小型的GNU环境,包括基本的bash,make等等)。直接下载安装一个Mingw就可以了,里面带有msys,

下载地址:https://sourceforge.net/projects/mingw/


    下载好MinGW之后可以直接双击打开,按照默认的方式安装(建议默认安装,安装目录为C:/MinGW),此期间可能要下载一些文件,不同人因为网络的不同可能安装的时长也不相同。安装好之后返回桌面,双击快捷方式,打开界面如下: 


选择basic setup,然后将右边的每一项,右键选择mark for installation


选择完毕后,选择Installatin的Apply Change,确定安装


Apply之后就会弹出另外一个框,一直下载下载下载。一个字,等,等到完全安装完之后,MinGW的环境就建立起来了。



安装好之后,如果上一步骤中MinGW安装的目录为C:/MinGW,则找到C:/MinGW/msys/1.0/msys.bat文件,右击编辑文件,在最前面加上一句话为(如果你下载的是我提供给你的MinGW,你一定要确认一下,路径是否正确):

这个路径为你自己的vs2013安装目录,如果是默认的安装目录你就按照上边的路径去找这个文件,每个人酌情而定,自己斟酌)

加好之后的效果如下:



二、编译ffmpeg

1.下载ffmpeg

我们使用的ffmpeg版本是2.5.6,其他版本应该也是类似

ffmpeg下载地址:http://ffmpeg.org/releases/ffmpeg-2.5.6.tar.gz


    下载完成后将源码解压到E盘根目录,放在磁盘根目录是为了方便在命令行里面找到。


2.编译

    打开C:/MinGW/msys/1.0下的msys.bat,这就是我们刚刚安装的msys,打开之后会弹出一个命令行窗口,里面的命令和linux下基本一致。

    首先进入ffmpeg的源代码目录:

    cd E:

    cd ffmpeg-2.5.6

    然后执行configure

    ./configure --enable-shared --enable-gpl --enable-version3 --toolchain=msvc --disable-yasm --prefix="E:/ffmpeg"

    这一步到这里会报如下错:

    

从提示上看是编译器检测失败了,莫方,继续看看config.log文件,可以看到是在链接的时候失败了。原因是在msys的目录下有一个Link.exe文件,这一步我们使用了这个文件,而不是使用vs的链接文件,解决方法很简单;

将C:/MinGW/msys.1.0/bin/link.exe随便改个名字,编译完后ffmpeg记得该回来就好了(防止哪天用到mingw的时候找不到link.exe)


现在继续configure,依次执行以下命令:

./configure --enable-shared --enable-gpl --enable-version3 --toolchain=msvc --disable-yasm --prefix="E:ffmpeg"

make 

make install


三、调试代码

    编译完成后便可在E盘根目录看到一个ffmpeg文件夹,里面有lib和dll文件,使用vs2013建立一个工程,调用简单的ffmpeg函数,vs引用Lib文件的方法请自行百度,这里不做阐述。

调试效果如下:

(图片是偷来的,我自己用的是2013的,因为懒不想截图了。


这里需要注意的是:请勿将ffmpeg的源代码删除,因为调试的时候需要用到他们。


本文参考地址:http://blog.csdn.net/u010380485/article/details/54092264



=======2019-01-18更新 begin======

到目前为止,ffmpeg已经更新到4.1了,因此日常中难免会去编译ffmpeg3或者ffmpeg4版本,用上面的方法直接编译,会出现各种各样的错误:


不过,还是那句话,不要方,解决方法总是有的:


ffmpeg3解决方法:

修改ffmpeg源码:找到ffmpeg.c这个源文件,打开它,我们要在注释后面,第一行#include开始的前面,加上一句话,之后保存: 

#define WIN32_LEAN_AND_MEAN


ffmpeg4解决方法:

vs2017编译ffmepg4.3.1见:http://bbs.yundiantech.com:8088/bbs/thread?topicId=11



=======2019-12-11更新 begin======

安装yasm:

1.下载yasm:http://yasm.tortall.net/Download.html

2.改成yasm.exe后复制到C:/MinGW/msys/1.0/bin目录下

==============更新 end===================


学习音视频技术欢迎访问 http://blog.yundiantech.com  

音视频技术交流讨论欢迎加 QQ群 121376426