本文主要是介绍vs2017调试ffmpeg源码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
ffmpeg只提供了gnu的编译方式,在windows下需要安装mingw编译出动态库或者静态库,在进行音视频的相关开发时,经常会出现各种问题,网上的例子也比较少,而ffmpeg提供的工具ffmpeg.exe确屡试不爽,故在windows下能够调试ffmpeg.exe无疑是很有必要的。
首先,编译debug版本的ffmpeg。
本人用的msys2(mingw环境)是从下面路径下载的。
https://repo.msys2.org/distrib/x86_64/
然后指定编译器为vs2017,编译了64位的ffmpeg,配置命令行如下:
./configure --toolchain=msvc --arch=x86_64 --enable-shared --disable-static --enable-gpl --enable-libx264 --extra-cflags="-I/usr/local/x264/include" --extra-ldflags=-LIBPATH:/usr/local/x264/lib --prefix=/home/ffmpeg_x264_debug_dll
编译好后,进行安装,对应的bin目录下的成果物如下所示:
可以看出这里面没有pdb符号文件,而pdb符号文件跟.o文件跟源码文件在一起,如下图所示:
将这8个pdb文件集合起来,并且将lib文件放到lib目录下,如下所示:
由于ffmpeg.exe会比较复杂一些,先写个简单例子来调试,里面只需要调用一些简单的函数即可,
比如在av_opt_set_channel_layout打断点,然后可以按F11单独跟踪进去,
可以发现,能够跟踪进去,代码位于opt.c文件里面,并且opt.c文件所在路径即为编译ffmpeg时,源代码所在路径。
下面是ffmpeg.exe的编译,ffmpeg.exe的源文件ffmpeg.c位于fftools文件夹下面,如下所示:
本人最开始只将ffmpeg.c,ffmpeg.h,cmdutils.h,cmdutils.c四个文件拷贝到工程目录下,后面还依赖一些头文件,故干脆将整个ffmpeg文件夹拷贝过来,设置包含路径,如下所示:
下面是依赖的库文件
下面是需要添加的预处理器,_CRT_SECURE_NO_WARNINGS和_CRT_NONSTDC_NO_DEPRECATE,这两个宏定义的添加是我根据编译报错时,根据提示找到的,微软的编译器较gcc要严格一些。
然后编译,发现有一些链接错误,如下:
然后查找符号所在文件,需要添加下面三个文件到工程:
然后接着编译,报如下错误
这个设置SDL检查为false即可,如下所示:
然后编译就可以通过了,下面给个截图,记录下工程中的文件。
下面进行测试下,先录个系统声音,对应的ffmpeg命令如下:
ffmpeg -f dshow -i audio=“virtual-audio-capturer” audio-out.mp4
故在工程的调试参数中配置如下:
测试ok。
这篇关于vs2017调试ffmpeg源码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!