音视频使用qt测试ffmpeg接口时无法运行

news2025/1/11 16:58:34

仅仅时把自己过程中遇到的稍微阻塞疑惑问题做出整理,疑惑的是拿到的ffmpeg包中没有dll文件,导致自己研究了一系列。

使用qt加载音视频ffmpeg对应的相关lib库,进行接口,源码的研究。

1:使用源码安装的方式获取相关的动态库。

2:可以从ffmpeg官网,或者github库中安装对应的release版本(不同的版本之间有差异,只是安装环境/供调试用自己参考取对应的包)。

官网中,选择windows对应的版本:这里调试用,一般选shared. http://ffmpeg.org/ 下载可以参考FFmpeg windows下载安装_luoyayun361的博客-CSDN博客

github中,可以在对应的release构建中看到对应版本,这里可以选择对应版本的shared版本下载:https://github.com/GyanD/codexffmpeg/releases

目标:研究源码前,获取需要的ffmpeg相关依赖库:

1:前面有过文章是在windows上用msys2源码编译ffmpeg,直接使用编译后生成的相关库。

2:这里直接获取ffmpeng相关lib库,直接使用。

(注意,这里qt项目中pro文件中依赖了lib文件,相关的dll文件在运行时也是需要的,不然执行没有啥结果,以及输出窗口:退出,退出代码: -1073741515)

1:获取相关库

这里我下载的这个版本,测试可用
在这里插入图片描述

配置环境变量:对应bin目录:
在这里插入图片描述

验证ffmpeg生效:
在这里插入图片描述

2:分析调用库时相关依赖,即ffmpeg下相关目录关键文件

2.1:bin目录主要是可执行文件的目录。 dumpbin命令

===》bin目录下相关exe文件为ffmpeg,ffplay,ffproble可执行文件,配置环境变量一般为该目录。

===》bin目录下相关dll文件,实际存储相关代码信息,exe文件执行时实际调用该类型文件对应内容。

=======》相关exe的执行,实际还是调用对应dll中的内容。

#如,查看ffmepeg.exe依赖的相关dll
#也能看到dll中相关依赖dll以及对应函数
C:\Users\yun68\Desktop\ffmpeg_build\ffmpeg-5.1.2-full_build-shared\bin>dumpbin -imports avcodec-59.dll

C:\Users\yun68\Desktop\ffmpeg_build\ffmpeg-5.1.2-full_build-shared\bin>dumpbin  /dependents ffmpeg.exe
Microsoft (R) COFF/PE Dumper Version 14.29.30148.0
Copyright (C) Microsoft Corporation.  All rights reserved.


Dump of file ffmpeg.exe

File Type: EXECUTABLE IMAGE

  Image has the following dependencies:

    KERNEL32.dll
    msvcrt.dll
    SHELL32.dll
    avcodec-59.dll
    avdevice-59.dll
    avfilter-8.dll
    avformat-59.dll
    avutil-57.dll
    postproc-56.dll
    swresample-4.dll
    swscale-6.dll

  Summary

        1000 .CRT
        1000 .bss
        1000 .data
        5000 .idata
        2000 .pdata
        F000 .rdata
        1000 .reloc
        1000 .rsrc
       3F000 .text
        1000 .tls
        2000 .xdata

C:\Users\yun68\Desktop\ffmpeg_build\ffmpeg-5.1.2-full_build-shared\bin>

2.2:lib目录主要作用是,作为第三方库,提供给外部使用。

===》相关.lib文件(lib导入库),编译时使用,lib中的代码会被编译到目标exe当中

===》dll是动态库,在运行时使用,dll中的代码不参与编译,而是运行期间,到对应的dll文件当中去查找函数

=======》编译时,使用lib库进行依赖就没有问题了,但是运行时,需要把对应的dll能识别到。

注意:这里在研究好久后才知道,lib库分为一个静态库,包含代码的所有信息;一个lib导入库,只是描述了dll中相关信息,运行时需要依赖dll 参考:lib库知识全面讲解(.lib、.dll)_zxmyoung的博客-CSDN博客

2.3:.dll.a类型文件(也是一个动态库)

.dll.a类型文件是MinGW下的DLL文件的imp-lib,即与MSVS下DLL文件附带了一个引入库.lib类似。

====》1:qt下编译用MinGW构建,可以依赖.dll.a文件,但是运行时还是得能找到相关dll文件

====》2:qt也支持直接依赖dll,依赖lib,所以,.dll.a类型文件就不关注了,可能用MinGW生成相关动态库时需要关注。

3:用demo进行测试。

1:用上面下载的64位的ffmpeg-5.1.2的版本进行测试。

===》新建一个qt项目,关联相关依赖,在.pro文件中如下依赖,使用相关头文件和函数。

=======》(因为遇到代码执行时没反应,退出,退出代码: -1073741515 {1 ?} {2?} 研究环境耗时,所以做笔记

# $$PWD 代表的是项目的目录   ffmpeg-5.1.2是把上面下载的包拷贝到项目目录下了   
# 经过测试,下面这两种依赖方式都可行  我测试了 MinGw 64和msvc-2019 64两种 编译都没问题

#win32 {
#INCLUDEPATH += $$PWD/ffmpeg-5.1.2/include
#LIBS += $$PWD/ffmpeg-5.1.2/lib/avformat.lib   \
#        $$PWD/ffmpeg-5.1.2/lib/avcodec.lib    \
#        $$PWD/ffmpeg-5.1.2/lib/avdevice.lib   \
#        $$PWD/ffmpeg-5.1.2/lib/avfilter.lib   \
#        $$PWD/ffmpeg-5.1.2/lib/avutil.lib     \
#        $$PWD/ffmpeg-5.1.2/lib/postproc.lib   \
#        $$PWD/ffmpeg-5.1.2/lib/swresample.lib \
#        $$PWD/ffmpeg-5.1.2/lib/swscale.lib
#}

win32 {
INCLUDEPATH += $$PWD/ffmpeg-5.1.2/include
LIBS += $$PWD/ffmpeg-5.1.2/lib/libavformat.dll.a   \
        $$PWD/ffmpeg-5.1.2/lib/libavcodec.dll.a    \
        $$PWD/ffmpeg-5.1.2/lib/libavdevice.dll.a   \
        $$PWD/ffmpeg-5.1.2/lib/libavfilter.dll.a   \
        $$PWD/ffmpeg-5.1.2/lib/libavutil.dll.a     \
        $$PWD/ffmpeg-5.1.2/lib/libpostproc.dll.a   \
        $$PWD/ffmpeg-5.1.2/lib/libswresample.dll.a \
        $$PWD/ffmpeg-5.1.2/lib/libswscale.dll.a
}

在这里插入图片描述

2:构建后,直接运行,有报错

1:报错1: 如果用msvc-2019 64进行构建,运行时报错The CDB process terminated.

该问题就是因为没有导入依赖的dll文件。

把动态库依赖的dll导入到构建后生成的项目文件中。

2:问题2:如果使用MinGW 64进行构建,运行时没有反应。

把动态库依赖的dll导入到构建后生成的项目文件中,可以解决问题。

3:构建的debug版本,在没有拷贝相关dll时点击运行,啥反应没有。

或者直接构建的release版本,但是没有拷贝依赖的dll文件时。

报错(qt_test.exe 退出,退出代码: -1073741515
{1 ?} {2?})

3:查看编译后生成exe对应的依赖

可以看出编译出来的exe中依赖的dll文件,把相关依赖dll要么放在环境变量下,要么防止exe同一级别目录下。

F:\qt_project_data\build-untitled3-Desktop_Qt_5_15_2_MSVC2019_64bit-Debug\debug>dumpbin /dependents untitled3.exe
Microsoft (R) COFF/PE Dumper Version 14.29.30148.0
Copyright (C) Microsoft Corporation.  All rights reserved.


Dump of file untitled3.exe

File Type: EXECUTABLE IMAGE

  Image has the following dependencies:

    avutil-57.dll
    KERNEL32.dll
    VCRUNTIME140D.dll
    ucrtbased.dll

  Summary

        1000 .00cfg
        1000 .data
        1000 .idata
        1000 .pdata
        2000 .rdata
        1000 .reloc
        1000 .rsrc
        7000 .text

4:本文总结:

对qt相关环境并不熟悉,在进行测试的时候,遇到构建成功,运行没反应的问题,纠结许久有阻塞,所以做了该整理。

探索过程中,以下几个注意点:

1:qt构建时,要注意选择的构建方式,以及依赖动态库要和构建方式的32/64版本对应,pro文件中要配置对应依赖位置。

2:运行时报错”The CDB process terminated.“,或者运行时没有反应,多半是dll依赖没有对,需要拷贝对应依赖dll到构建目录下。

====》这里同时要注意debug版本和release版本构建时,点击直接运行时的报错和debug运行时的报错不一样。(都是确少对应dll文件)

3:在取库进行测试时,发现有.dll.a文件,实际和lib导入库一个概念,实际运行时需要依赖dll文件。

4:另外,直接把相关dll拷贝到win目录也可以,就不用每次拷贝了,不研究了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/558496.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【蓝桥杯省赛真题40】Scratch报数游戏 蓝桥杯少儿编程scratch图形化编程 蓝桥杯省赛真题讲解

目录 scratch报数游戏 一、题目要求 编程实现 二、案例分析 1、角色分析

OKR是什么意思啊

一、OKR是什么意思? OKR是"Objective and Key Results"的缩写,即目标和关键结果。它是一种目标管理框架,旨在帮助组织和团队设定明确的目标,并通过关键结果来衡量和追踪目标的实现情况。 为了让大家快速了解什么是OKR…

基于变长频带选择的JPEG图像可逆数据隐藏-文献学习

论文学习 原文题目: Reversible Data Hiding of JPEG Image Based on Adaptive Frequency Band Length 发表期刊: TCSVT 2023(中科院1区) 作者: Ningxiong Mao, Hongjie He, Fan Chen, Yuan Yuan, Lingfeng Qu 摘要 J…

SolVES模型应用(基于多源环境QGIS\PostgreSQL\ARCGIS\MAXENT\R语言支持下模型应用)

生态系统服务是人类从自然界中获得的直接或间接惠益,可分为供给服务、文化服务、调节服务和支持服务4类,对提升人类福祉具有重大意义,且被视为连接社会与生态系统的桥梁。自从启动千年生态系统评估项目(Millennium Ecosystem Asse…

又双叒叕入选!腾讯安全NDR连续四年获Gartner认可

近日,全球权威研究机构 Gartner发布了2023年《Emerging Tech: Security — Adoption Growth Insights for Network Detection and Response》(《新兴技术:安全-网络检测与响应的采用增长洞察》),腾讯安全连续四年被列为…

内卷把同事逼成了“扫地僧”,把Git上所有面试题整理成足足24W字测试八股文

互联网大厂更多的是看重学历还是技术? 毫无疑问,是技术,技术水平相近的情况下,肯定学历高/好的会优先一点,这点大家肯定都理解。 说实话,学弟学妹们找工作难,作为面试官招人也难呀&#xff01…

使用laf云开发三分钟上线你自己的Midjourney

文章尾部有demo 江湖惯例:先来一波感谢,感谢laf,让我们可以不使用魔法、免费接入Midjourney,不了解laf的请猛戳 Laf介绍 一、写这篇博客的背景 laf官方最近发布了一个活动,活动链接,新手也可以接入哦&…

云渲染平台为什么越来越多的效果图公司开始使用?

随着3dmax版本的不断更迭,包括常用的V-Ray渲染器和Corona渲染器的不断更新,室内设计行业对于 效果图的渲染要求越来越高。而要求更高的渲染精度和更真实的渲染效果,所需要付出的代价则是不断增长的参数,这会使渲染一张效果图的时间…

chatgpt赋能Python-python_lamba

Python Lambda: 什么是Lambda表达式? Python是一种强大的编程语言,它支持许多编程范式,包括函数式编程。Lambda表达式是函数式编程的一个重要概念。许多人对Lambda表达式感到困惑,认为它们很难理解。本文将介绍Python的Lambda表达…

如何对Windows剪切板里的内容进行取证分析 Windows剪切板取证

前言 无论是在现实中对设备进行取证分析,还是在ctf中做取证类的题目,剪切板里的内容都需要去查看,以免遗漏什么重要信息 剪切板位置 剪切板是计算机操作系统提供的一个临时存储区域,用于在不同应用程序之间复制和粘贴文本、图像…

S72402-NANANA伺服驱动器相当于大脑,执行电机相当于手脚

​ S72402-NANANA伺服驱动器相当于大脑,执行电机相当于手脚 伺服驱动器在控制信号的作用下驱动执行电机,因此驱动器是否能正常工作直接影响设备的整体性能。在伺服控制系统中,伺服驱动器相当于大脑,执行电机相当于手脚。而伺服驱动…

从裸机启动开始运行一个C++程序(三)

先序文章请看 从裸机启动开始运行一个C程序(二) 从裸机启动开始运行一个C程序(一) 编写MBR 上一章我们已经成功地在8086上运行了指令,同时也介绍了nasm汇编语言。那么接下来这一章,我们就来看看如何写BIO…

零基础学习网络安全这一块,请问有哪些相关资料可以推荐一下?

一、相关网站推荐 1、FreeBuf 国内关注度最高的全球互联网安全媒体平台,爱好者们交流与分享安全技术的社区,网络安全行业门户。 2、看雪看雪论坛是个软件安全技术交流场所,为安全技术爱好者提供一个技术交流平台和资源。 3、吾爱破解 吾爱破解…

Spring源码阅读:Spring事务传播特性

一、概述 我们平常工作中经常会听到事务的传播级别,但是使用中基本不会太调整这个事务传播级别,因为没什么业务场景需要我们这么做,只需要使用原有的事务传播级别即可解决95%的业务场景。但是为了那5%的业务场景,我们还是还要学习…

半边圆角和选中

为了这效果肝了几天,调了几天,改了几天,头都晕了! 在 ViewBinder 里设置背景 adapter.setViewBinder(new SimpleCursorAdapter.ViewBinder(){public boolean setViewValue(View view, Cursor cursor, int columnIndex){ …

如何理解驱动程序、设备树、platform、device、driver之间的关系

前言 利用设备树来使用或者编写驱动程序,需要梳理哪些概念? 如何理解驱动程序、设备树、platform、device、driver之间的关系 前言一、总线设备驱动模型——总线、设备、驱动二、从代码中看driver与device的关系三、设备树的应用(一&#xf…

简单分享生鲜超市怎么做同城配送小程序

1、蔬菜生鲜产品展示:用户打开买菜必备软件,就能查看琳琅满目的新鲜水果、蔬菜、肉类、零食等产品,为用户展示更多信息,提升用户下单率。经常更新商品的照片、视频,让客户可以在线浏览和挑选,足不出户就能买…

Baumer工业相机堡盟工业相机通过BGAPISDK使用图像回调函数全帧率保存图像(C++)

Baumer工业相机堡盟工业相机通过BGAPISDK使用图像回调函数全帧率保存图像(C) Baumer工业相机Baumer工业相机全帧率保存的技术背景Baumer工业相机通过BGAPISDK使用相机图像回调函数1.引用合适的类文件2.通过BGAPISDK在相机图像回调函数全帧率保存 Baumer工…

LabVIEWCompactRIO 开发指南31 在LabVIEW FPGA中使用DMA FIFO

LabVIEWCompactRIO 开发指南31 在LabVIEW FPGA中使用DMA FIFO 要为流数据创建DMA缓冲区,请右键单击FPGA目标并选择New...FIFO。为FIFO结构指定一个描述性名称,并选择“target to host”作为类型。这意味着数据应该通过这个DMA FIFO从FPGA目标流向实时主…

“饶派杯”XCTF车联网安全挑战赛战队巡礼!

2023年5月31日,“饶派杯” XCTF车联网安全挑战赛将于江西省上饶市重磅开赛。本届大赛由江西省委网信办、江西省工信厅、上饶市人民政府主办,旨在深入贯彻落实国家网络强国和交通强国战略部署,推动智能网联汽车技术与产业发展、加快该领域人才…