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

相关文章

SpringBoot多环境配置数据读取方式

《SpringBoot多环境配置数据读取方式》SpringBoot通过环境隔离机制,支持properties/yaml/yml多格式配置,结合@Value、Environment和@Configura... 目录一、多环境配置的核心思路二、3种配置文件格式详解2.1 properties格式(传统格式)1.

MySQL 内存使用率常用分析语句

《MySQL内存使用率常用分析语句》用户整理了MySQL内存占用过高的分析方法,涵盖操作系统层确认及数据库层bufferpool、内存模块差值、线程状态、performance_schema性能数据... 目录一、 OS层二、 DB层1. 全局情况2. 内存占js用详情最近连续遇到mysql内存占用过高导致

Python极速搭建局域网文件共享服务器完整指南

《Python极速搭建局域网文件共享服务器完整指南》在办公室或家庭局域网中快速共享文件时,许多人会选择第三方工具或云存储服务,但这些方案往往存在隐私泄露风险或需要复杂配置,下面我们就来看看如何使用Py... 目录一、android基础版:HTTP文件共享的魔法命令1. 一行代码启动HTTP服务器2. 关键参

深度解析Nginx日志分析与499状态码问题解决

《深度解析Nginx日志分析与499状态码问题解决》在Web服务器运维和性能优化过程中,Nginx日志是排查问题的重要依据,本文将围绕Nginx日志分析、499状态码的成因、排查方法及解决方案展开讨论... 目录前言1. Nginx日志基础1.1 Nginx日志存放位置1.2 Nginx日志格式2. 499

Go语言编译环境设置教程

《Go语言编译环境设置教程》Go语言支持高并发(goroutine)、自动垃圾回收,编译为跨平台二进制文件,云原生兼容且社区活跃,开发便捷,内置测试与vet工具辅助检测错误,依赖模块化管理,提升开发效... 目录Go语言优势下载 Go  配置编译环境配置 GOPROXYIDE 设置(VS Code)一些基本

在IntelliJ IDEA中高效运行与调试Spring Boot项目的实战步骤

《在IntelliJIDEA中高效运行与调试SpringBoot项目的实战步骤》本章详解SpringBoot项目导入IntelliJIDEA的流程,教授运行与调试技巧,包括断点设置与变量查看,奠定... 目录引言:为良驹配上好鞍一、为何选择IntelliJ IDEA?二、实战:导入并运行你的第一个项目步骤1

Olingo分析和实践之EDM 辅助序列化器详解(最佳实践)

《Olingo分析和实践之EDM辅助序列化器详解(最佳实践)》EDM辅助序列化器是ApacheOlingoOData框架中无需完整EDM模型的智能序列化工具,通过运行时类型推断实现灵活数据转换,适用... 目录概念与定义什么是 EDM 辅助序列化器?核心概念设计目标核心特点1. EDM 信息可选2. 智能类

Olingo分析和实践之OData框架核心组件初始化(关键步骤)

《Olingo分析和实践之OData框架核心组件初始化(关键步骤)》ODataSpringBootService通过初始化OData实例和服务元数据,构建框架核心能力与数据模型结构,实现序列化、URI... 目录概述第一步:OData实例创建1.1 OData.newInstance() 详细分析1.1.1

Olingo分析和实践之ODataImpl详细分析(重要方法详解)

《Olingo分析和实践之ODataImpl详细分析(重要方法详解)》ODataImpl.java是ApacheOlingoOData框架的核心工厂类,负责创建序列化器、反序列化器和处理器等组件,... 目录概述主要职责类结构与继承关系核心功能分析1. 序列化器管理2. 反序列化器管理3. 处理器管理重要方

SpringBoot中六种批量更新Mysql的方式效率对比分析

《SpringBoot中六种批量更新Mysql的方式效率对比分析》文章比较了MySQL大数据量批量更新的多种方法,指出REPLACEINTO和ONDUPLICATEKEY效率最高但存在数据风险,MyB... 目录效率比较测试结构数据库初始化测试数据批量修改方案第一种 for第二种 case when第三种