FFplay源码分析-调试环境搭建

2024-06-24 01:58

本文主要是介绍FFplay源码分析-调试环境搭建,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《FFmpeg原理》的社群来了,想加入社群的朋友请购买 VIP 版,VIP 版有更高级的内容与答疑服务。


第一篇文章先讲解如何搭建 window 10 qt creator 环境,用来断点调试 ffplay.c 的代码。

请先阅读之前的文章,搭建好预备环境,因为 ffplay.c 的移植跟 ffmpeg.c 类似,所以直接在 《ffmpeg.c 工程移植》基础上讲解。

  • Qt 安装教程
  • FFmpeg MSYS2环境编译教程
  • ffmpeg.c 工程移植

假设你已经看完以上3篇文章了。

移植开始:

1,打开Qt creator,点击New File Or Project,选择 Non-Qt Project ,选择 Plain C Application。创建一个 ffplay-qt-yizhi 工程。

在这里插入图片描述

2,选择 MinGW 32 bit 编译环境。

在这里插入图片描述

3,把 第二篇文章编译的C:\msys64\home\loken\ffmpeg\build32 整个目录拷贝到 ffplay-qt-yizhi 项目目录下。

4,下载SDL 的编译文件,我已经编译好了,下载链接:百度网盘,提取码:60fw 。下载完后把文件解压到 ffmpeg-qt-yizhi 项目目录下。

在这里插入图片描述

5,回到之前我们在MSYS2编译的ffmpeg源码路径,C:\msys64\home\loken\ffmpeg\ffmpeg-4.2,把 FFmpeg-4.2 目录下的 4个 文件都拷贝到 ffplay-qt-yizhi 项目目录下。ffplay 比较简单,只有4个文件。

在这里插入图片描述

6,因为MSYS2环境里面的 config.h 是程序自动生成的,config.h 有些配置是根据 MSYS2环境定制生成的,所以现在拷贝到window10 qt creator的编译环境,config.h 里面有些配置选项需要手动改下。

#define HAVE_GETPROCESSMEMORYINFO 1 改成 #define HAVE_GETPROCESSMEMORYINFO 0
#define HAVE_PTHREAD_CANCEL 0 改成 #define HAVE_GETPROCESSMEMORYINFO 1
#define HAVE_PTHREADS 0 改成 #define HAVE_PTHREADS 1
#define HAVE_W32THREADS 1 改成 #define HAVE_PTHREADS 0

7,修改 ffplay-qt-yizhi.pro 文件:

TEMPLATE = app
CONFIG += console c++11
CONFIG -= app_bundle
CONFIG -= qtHEADERS += \cmdutils.h \config.hSOURCES += cmdutils.c \ffplay.ccontains(QT_ARCH, i386) {message("32-bit")INCLUDEPATH += $$PWD/build32/ffmepg-4.2/includeINCLUDEPATH += $$PWD/SDL2/includeLIBS += $$PWD/build32/ffmepg-4.2/bin/avformat.lib \$$PWD/build32/ffmepg-4.2/bin/avcodec.lib \$$PWD/build32/ffmepg-4.2/bin/avdevice.lib \$$PWD/build32/ffmepg-4.2/bin/avfilter.lib \$$PWD/build32/ffmepg-4.2/bin/avutil.lib \$$PWD/build32/ffmepg-4.2/bin/postproc.lib \$$PWD/build32/ffmepg-4.2/bin/swresample.lib \$$PWD/build32/ffmepg-4.2/bin/swscale.lib    \$$PWD/SDL2/lib/x86/SDL2.lib
} else {message("64-bit")}

8,运行项目。
在这里插入图片描述

9,会提示缺少 DLL,按照之前的教程,把缺的dll都拷贝到 build_xxx/debug 目录。dll都在 ffplay-qt-yizhi 项目里,之前已经拷贝过去了的。

在这里插入图片描述

10,拷贝完缺少的DLL后,再次运行项目。

在这里插入图片描述


ffplay 源码分析,断点调试环境搭建完毕。


©版权所属:弦外之音。

由于笔者的水平有限, 加之编写的同时还要参与开发工作,文中难免会出现一些错误或者不准确的地方,恳请读者批评指正。

这篇关于FFplay源码分析-调试环境搭建的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Python中的Walrus运算符分析示例详解

《Python中的Walrus运算符分析示例详解》Python中的Walrus运算符(:=)是Python3.8引入的一个新特性,允许在表达式中同时赋值和返回值,它的核心作用是减少重复计算,提升代码简... 目录1. 在循环中避免重复计算2. 在条件判断中同时赋值变量3. 在列表推导式或字典推导式中简化逻辑

IntelliJ IDEA 中配置 Spring MVC 环境的详细步骤及问题解决

《IntelliJIDEA中配置SpringMVC环境的详细步骤及问题解决》:本文主要介绍IntelliJIDEA中配置SpringMVC环境的详细步骤及问题解决,本文分步骤结合实例给大... 目录步骤 1:创建 Maven Web 项目步骤 2:添加 Spring MVC 依赖1、保存后执行2、将新的依赖

利用Python调试串口的示例代码

《利用Python调试串口的示例代码》在嵌入式开发、物联网设备调试过程中,串口通信是最基础的调试手段本文将带你用Python+ttkbootstrap打造一款高颜值、多功能的串口调试助手,需要的可以了... 目录概述:为什么需要专业的串口调试工具项目架构设计1.1 技术栈选型1.2 关键类说明1.3 线程模

Java程序进程起来了但是不打印日志的原因分析

《Java程序进程起来了但是不打印日志的原因分析》:本文主要介绍Java程序进程起来了但是不打印日志的原因分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java程序进程起来了但是不打印日志的原因1、日志配置问题2、日志文件权限问题3、日志文件路径问题4、程序

Java 正则表达式URL 匹配与源码全解析

《Java正则表达式URL匹配与源码全解析》在Web应用开发中,我们经常需要对URL进行格式验证,今天我们结合Java的Pattern和Matcher类,深入理解正则表达式在实际应用中... 目录1.正则表达式分解:2. 添加域名匹配 (2)3. 添加路径和查询参数匹配 (3) 4. 最终优化版本5.设计思

Java字符串操作技巧之语法、示例与应用场景分析

《Java字符串操作技巧之语法、示例与应用场景分析》在Java算法题和日常开发中,字符串处理是必备的核心技能,本文全面梳理Java中字符串的常用操作语法,结合代码示例、应用场景和避坑指南,可快速掌握字... 目录引言1. 基础操作1.1 创建字符串1.2 获取长度1.3 访问字符2. 字符串处理2.1 子字

Python如何自动生成环境依赖包requirements

《Python如何自动生成环境依赖包requirements》:本文主要介绍Python如何自动生成环境依赖包requirements问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录生成当前 python 环境 安装的所有依赖包1、命令2、常见问题只生成当前 项目 的所有依赖包1、

Python 迭代器和生成器概念及场景分析

《Python迭代器和生成器概念及场景分析》yield是Python中实现惰性计算和协程的核心工具,结合send()、throw()、close()等方法,能够构建高效、灵活的数据流和控制流模型,这... 目录迭代器的介绍自定义迭代器省略的迭代器生产器的介绍yield的普通用法yield的高级用法yidle

Redis在windows环境下如何启动

《Redis在windows环境下如何启动》:本文主要介绍Redis在windows环境下如何启动的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Redis在Windows环境下启动1.在redis的安装目录下2.输入·redis-server.exe

Pytest多环境切换的常见方法介绍

《Pytest多环境切换的常见方法介绍》Pytest作为自动化测试的主力框架,如何实现本地、测试、预发、生产环境的灵活切换,本文总结了通过pytest框架实现自由环境切换的几种方法,大家可以根据需要进... 目录1.pytest-base-url2.hooks函数3.yml和fixture结论你是否也遇到过