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

相关文章

怎样通过分析GC日志来定位Java进程的内存问题

《怎样通过分析GC日志来定位Java进程的内存问题》:本文主要介绍怎样通过分析GC日志来定位Java进程的内存问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、GC 日志基础配置1. 启用详细 GC 日志2. 不同收集器的日志格式二、关键指标与分析维度1.

MySQL中的表连接原理分析

《MySQL中的表连接原理分析》:本文主要介绍MySQL中的表连接原理分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、环境3、表连接原理【1】驱动表和被驱动表【2】内连接【3】外连接【4编程】嵌套循环连接【5】join buffer4、总结1、背景

SQLite3 在嵌入式C环境中存储音频/视频文件的最优方案

《SQLite3在嵌入式C环境中存储音频/视频文件的最优方案》本文探讨了SQLite3在嵌入式C环境中存储音视频文件的优化方案,推荐采用文件路径存储结合元数据管理,兼顾效率与资源限制,小文件可使用B... 目录SQLite3 在嵌入式C环境中存储音频/视频文件的专业方案一、存储策略选择1. 直接存储 vs

python中Hash使用场景分析

《python中Hash使用场景分析》Python的hash()函数用于获取对象哈希值,常用于字典和集合,不可变类型可哈希,可变类型不可,常见算法包括除法、乘法、平方取中和随机数哈希,各有优缺点,需根... 目录python中的 Hash除法哈希算法乘法哈希算法平方取中法随机数哈希算法小结在Python中,

Java Stream的distinct去重原理分析

《JavaStream的distinct去重原理分析》Javastream中的distinct方法用于去除流中的重复元素,它返回一个包含过滤后唯一元素的新流,该方法会根据元素的hashcode和eq... 目录一、distinct 的基础用法与核心特性二、distinct 的底层实现原理1. 顺序流中的去重

如何使用Haporxy搭建Web群集

《如何使用Haporxy搭建Web群集》Haproxy是目前比较流行的一种群集调度工具,同类群集调度工具有很多如LVS和Nginx,本案例介绍使用Haproxy及Nginx搭建一套Web群集,感兴趣的... 目录一、案例分析1.案例概述2.案例前置知识点2.1 HTTP请求2.2 负载均衡常用调度算法 2.

关于MyISAM和InnoDB对比分析

《关于MyISAM和InnoDB对比分析》:本文主要介绍关于MyISAM和InnoDB对比分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录开篇:从交通规则看存储引擎选择理解存储引擎的基本概念技术原理对比1. 事务支持:ACID的守护者2. 锁机制:并发控制的艺

一文详解如何在idea中快速搭建一个Spring Boot项目

《一文详解如何在idea中快速搭建一个SpringBoot项目》IntelliJIDEA作为Java开发者的‌首选IDE‌,深度集成SpringBoot支持,可一键生成项目骨架、智能配置依赖,这篇文... 目录前言1、创建项目名称2、勾选需要的依赖3、在setting中检查maven4、编写数据源5、开启热

python常见环境管理工具超全解析

《python常见环境管理工具超全解析》在Python开发中,管理多个项目及其依赖项通常是一个挑战,下面:本文主要介绍python常见环境管理工具的相关资料,文中通过代码介绍的非常详细,需要的朋友... 目录1. conda2. pip3. uvuv 工具自动创建和管理环境的特点4. setup.py5.

Python中使用uv创建环境及原理举例详解

《Python中使用uv创建环境及原理举例详解》uv是Astral团队开发的高性能Python工具,整合包管理、虚拟环境、Python版本控制等功能,:本文主要介绍Python中使用uv创建环境及... 目录一、uv工具简介核心特点:二、安装uv1. 通过pip安装2. 通过脚本安装验证安装:配置镜像源(可