Windows10系统Qt调试ffmpeg.c

前言

最近在学习一些视频编解码相关的知识,发现大家都推荐FFmpeg库。FFmpeg库有个牛逼的ffmpeg命令,这个命令是通过ffmpeg.c文件编译出来的。正好最近代码没思路,必须要通过单步调试ffmpeg.c,借鉴一下优秀思想。

学习新的代码库都是从编译开始的,但是很多博客都说编译ffmpeg是一个比较复杂的过程,尤其是在windows上那就更加麻烦。本文为了更直接的达到调试ffmpeg.c的目的,采用开源社区的FFmpeg发布版本。

下载FFmpeg

登录到FFmpeg官网,进入到下载页面下载ffmpeg-4.4.1.tar.bz2

解压ffmpeg-4.4.1.tar.bz2源代码得到目录:
ffmpeg-4.4.1.tar.bz2源代码目录
本文我们主要关注ffmpeg.c文件的调试,ffmpeg.c文件在fftools目录:
fftools目录

下载FFmpeg-Builds-Win32

首先在github上面找到一个FFmpeg-Builds-Win32的项目
FFmpeg-Builds-Win32,进入到下载页面下载ffmpeg-n4.4.1-2-gcc33e73618-win32-gpl-shared-4.4.zip

为什么要找FFmpeg-Builds-Win32这个项目,直接去FFmpeg官网下载编译好的程序的不香么。

原因是FFmpeg官网给的都是64位编译器编译出来的代码,而为了减少麻烦,直接用Qt自带的32编译器来调试FFmpeg才是最简单实用的办法。

下载完毕解压得到ffmpeg-n4.4.1-2-gcc33e73618-win32-gpl-shared-4.4目录:
ffmpeg-n4.4.1-2-gcc33e73618-win32-gpl-shared-4.4目录

下载并安装Qt

本文使用开源Qt版本,由于个人使用的是5.10.1版本,但是该没有在官网找到该版本。

如果有需求,可以在Qt官网下载新版本的离线安装包:5.12.x Offline Installers

点击下载完成的Qt离线安装包,开始安装。

欢迎页面
Qt 5.10.1设置
设置Qt账户
此处如果没有Qt账户,需要注册一个Qt账户,然后才能继续安装。
Qt Account
设置安装路径
设置安装路径
选择安装组件
选择安装组件
接受许可协议
接受许可协议
开始菜单快捷方式
开始菜单快捷方式
执行安装
执行安装
安装完成
安装完成

创建Qt工程

打开Qt,在文件菜单中,选择新建文件或项目,弹出New File or Project对话框,操作过程如下图:
新建文件或项目
右下角选择Choose继续下一步。

弹出新的Project Location对话框,填写名称创建路径,右下角选择下一步继续:
填写名称和创建路径
Define Build System默认选择qmake,继续下一步
Define Build System
Kit Selection选择Desktop Qt 5.10.1 MinGW 32Bit,继续下一步
Kit Selection
Project Management啥都不用选择,直接点击完成
Project Management

添加代码

在新创建出来的工程中,找到main.c文件,彻底删除:
彻底删除main.c
从FFmpeg源代码的fftools目录拷贝如下文件到ffpmeg-debuger工程目录:
fftools目录拷贝文件
Qt工程添加现有文件到工程:
在这里插入图片描述
添加现有文件对话框中选中必要的文件:
添加现有文件
添加文件之后,Qt工程如下:
添加文件之后
拷贝FFmpeg-Builds-Win32解压目录下的includelib目录到ffmpeg-debugger工程目录:
FFmpeg-Builds-Win32的include和lib目录
修改ffmpeg-debugger.pro为如下内容:

TEMPLATE = app
CONFIG += console
CONFIG -= app_bundle
CONFIG -= qt

SOURCES += \
    cmdutils.c \
    ffmpeg.c \
    ffmpeg_filter.c \
    ffmpeg_hw.c \
    ffmpeg_opt.c

INCLUDEPATH += $$PWD/include

LIBS += $$PWD/lib/avcodec.lib    \
        $$PWD/lib/avdevice.lib   \
        $$PWD/lib/avfilter.lib   \
        $$PWD/lib/avformat.lib   \
        $$PWD/lib/avutil.lib     \
        $$PWD/lib/postproc.lib   \
        $$PWD/lib/swresample.lib \
        $$PWD/lib/swscale.lib

编译ffmpeg.c

点击左下角的构建项目按钮,开始执行ffmpeg.c的构建:
执行ffmpeg.c的构建

解决编译ffmpeg.c的问题

尝试编译ffmpeg.c的过程中,不断发现有缺失的文件,最终汇总缺失的文件列表如下:

//ffmpeg-debugger的include目录缺失的文件
include\libavcodec\mathops.h
include\libavformat\os_support.h
include\libavutil\internal.h
include\libavutil\libm.h
include\libavutil\reverse.h
‪include\libavutil\thread.h
include\libavutil\timer.h
include\libavutil\wchar_filename.h
//ffmpeg-debugger的根目录缺失的文件
compat/va_copy.h

这些文件为什么缺失,目前还没研究那么深,暂且不清楚。

个人的解决办法是之前在windows10的WSL子系统编译过一次FFmpeg库,直接从WSL子系统中把缺失的头文件拷贝到ffmpeg-debugger工程的对应目录。

如果有需要,也可以直接在此下载:Qt调试ffmpeg.c时缺失的一些头文件汇总

将缺失的头文件拷贝到指定目录,继续尝试编译ffmpeg.c,发现有若干处需要注释代码的地方。

cmdutils.c第37行注释掉
cmdutils.c第37行注释掉
cmdutils.c第60行注释掉
cmdutils.c第60行注释掉
cmdutils.c第1074到1077行注释掉
cmdutils.c第1074到1077行注释掉
cmdutils.c第1101到1128行注释掉
cmdutils.c第1101到1128行注释掉
ffmpeg.c第76行注释掉
ffmpeg.c第76行注释掉
ffmpeg.c第90行注释掉
ffmpeg.c第90行注释掉
ffmpeg.c第95行注释掉
ffmpeg.c第95行注释掉
ffmpeg.c第97行注释掉
ffmpeg.c第97行注释掉
ffmpeg.c第422到440行注释掉
ffmpeg.c第422到440行注释掉
ffmpeg.c第3791到3796行注释掉
ffmpeg.c第3791到3796行注释掉
ffmpeg.c第4915到4921行注释掉
ffmpeg.c第4915到4921行注释掉
ffmpeg.c第332到333行注释掉
ffmpeg.c第332到333行注释掉
ffmpeg.c第4940到4942行注释掉
ffmpeg.c第4940到4942行注释掉
ffmpeg.c第164行注释掉
ffmpeg.c第164行注释掉
ffmpeg_filter.c第29行注释掉
ffmpeg_filter.c第29行注释掉
ffmpeg.c第461到476行注释掉
ffmpeg.c第461到476行注释掉
修改完成后,再次编译,没有错误信息:
没有错误信息

调试ffmpeg.c

ffmpeg.c编译完成得到ffmpeg-debuger.exe,这是一个命令行程序,必须设置命令行参数才可以正确启动。
ffmpeg.c编译完成得到ffmpeg-debuger.exe
设置ffmpeg.c调试命令行参数如下:
设置启动参数
本文使用Qt调试ffmpeg.c时,命令行参数如下:

-i D:\ffmpeg\ffmpeg-debug\jindou.mp4 -c:v libx264 -c:a copy -f mpegts D:\ffmpeg\ffmpeg-debug\jindou.ts -y

其中,
D:\ffmpeg\ffmpeg-debug\jindou.mp4:输入视频文件本地路径
D:\ffmpeg\ffmpeg-debug\jindou.ts:输出视频文件本地路径

设置完成启动参数后,点击调试按钮调试ffmpeg.c,在调换环境中,可以查看当前打开文件列表、当前调用栈、当前堆栈参数、当前断点位置、所有断点列表等信息。

对于习惯使用visual studio和visual studio code的人,这个界面相信也很亲切。
调试ffmpeg.c

后记

本文给出了一种在windows10系统中使用Qt调试ffmpeg.c的一种可行的思路,可能还有很多坑没有踩到,后续如果使用过程中遇到问题再改进。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值