vs2017调试ffmpeg源码

2024-04-27 16:48
文章标签 源码 ffmpeg 调试 vs2017

本文主要是介绍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源码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/941022

相关文章

C++中实现调试日志输出

《C++中实现调试日志输出》在C++编程中,调试日志对于定位问题和优化代码至关重要,本文将介绍几种常用的调试日志输出方法,并教你如何在日志中添加时间戳,希望对大家有所帮助... 目录1. 使用 #ifdef _DEBUG 宏2. 加入时间戳:精确到毫秒3.Windows 和 MFC 中的调试日志方法MFC

Java汇编源码如何查看环境搭建

《Java汇编源码如何查看环境搭建》:本文主要介绍如何在IntelliJIDEA开发环境中搭建字节码和汇编环境,以便更好地进行代码调优和JVM学习,首先,介绍了如何配置IntelliJIDEA以方... 目录一、简介二、在IDEA开发环境中搭建汇编环境2.1 在IDEA中搭建字节码查看环境2.1.1 搭建步

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟 开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚 第一站:海量资源,应有尽有 走进“智听

ASIO网络调试助手之一:简介

多年前,写过几篇《Boost.Asio C++网络编程》的学习文章,一直没机会实践。最近项目中用到了Asio,于是抽空写了个网络调试助手。 开发环境: Win10 Qt5.12.6 + Asio(standalone) + spdlog 支持协议: UDP + TCP Client + TCP Server 独立的Asio(http://www.think-async.com)只包含了头文件,不依

Java ArrayList扩容机制 (源码解读)

结论:初始长度为10,若所需长度小于1.5倍原长度,则按照1.5倍扩容。若不够用则按照所需长度扩容。 一. 明确类内部重要变量含义         1:数组默认长度         2:这是一个共享的空数组实例,用于明确创建长度为0时的ArrayList ,比如通过 new ArrayList<>(0),ArrayList 内部的数组 elementData 会指向这个 EMPTY_EL

如何在Visual Studio中调试.NET源码

今天偶然在看别人代码时,发现在他的代码里使用了Any判断List<T>是否为空。 我一般的做法是先判断是否为null,再判断Count。 看了一下Count的源码如下: 1 [__DynamicallyInvokable]2 public int Count3 {4 [__DynamicallyInvokable]5 get

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

工厂ERP管理系统实现源码(JAVA)

工厂进销存管理系统是一个集采购管理、仓库管理、生产管理和销售管理于一体的综合解决方案。该系统旨在帮助企业优化流程、提高效率、降低成本,并实时掌握各环节的运营状况。 在采购管理方面,系统能够处理采购订单、供应商管理和采购入库等流程,确保采购过程的透明和高效。仓库管理方面,实现库存的精准管理,包括入库、出库、盘点等操作,确保库存数据的准确性和实时性。 生产管理模块则涵盖了生产计划制定、物料需求计划、

vscode中文乱码问题,注释,终端,调试乱码一劳永逸版

忘记咋回事突然出现了乱码问题,很多方法都试了,注释乱码解决了,终端又乱码,调试窗口也乱码,最后经过本人不懈努力,终于全部解决了,现在分享给大家我的方法。 乱码的原因是各个地方用的编码格式不统一,所以把他们设成统一的utf8. 1.电脑的编码格式 开始-设置-时间和语言-语言和区域 管理语言设置-更改系统区域设置-勾选Bata版:使用utf8-确定-然后按指示重启 2.vscode