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

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

仅仅时把自己过程中遇到的稍微阻塞疑惑问题做出整理,疑惑的是拿到的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目录也可以,就不用每次拷贝了,不研究了。

目录
相关文章
|
5月前
|
监控 安全 测试技术
【01】卓伊凡收到冒充税务机关的诈骗程序-决定在沙盒Sandbox环境中运行测试下-广大企业同胞们注意防诈骗
【01】卓伊凡收到冒充税务机关的诈骗程序-决定在沙盒Sandbox环境中运行测试下-广大企业同胞们注意防诈骗
160 14
【01】卓伊凡收到冒充税务机关的诈骗程序-决定在沙盒Sandbox环境中运行测试下-广大企业同胞们注意防诈骗
|
4月前
|
Java 测试技术 容器
Jmeter工具使用:HTTP接口性能测试实战
希望这篇文章能够帮助你初步理解如何使用JMeter进行HTTP接口性能测试,有兴趣的话,你可以研究更多关于JMeter的内容。记住,只有理解并掌握了这些工具,你才能充分利用它们发挥其应有的价值。+
809 23
|
9月前
|
数据可视化 前端开发 测试技术
接口测试新选择:Postman替代方案全解析
在软件开发中,接口测试工具至关重要。Postman长期占据主导地位,但随着国产工具的崛起,越来越多开发者转向更适合中国市场的替代方案——Apifox。它不仅支持中英文切换、完全免费不限人数,还具备强大的可视化操作、自动生成文档和API调试功能,极大简化了开发流程。
|
6月前
|
SQL 安全 测试技术
2025接口测试全攻略:高并发、安全防护与六大工具实战指南
本文探讨高并发稳定性验证、安全防护实战及六大工具(Postman、RunnerGo、Apipost、JMeter、SoapUI、Fiddler)选型指南,助力构建未来接口测试体系。接口测试旨在验证数据传输、参数合法性、错误处理能力及性能安全性,其重要性体现在早期发现问题、保障系统稳定和支撑持续集成。常用方法包括功能、性能、安全性及兼容性测试,典型场景涵盖前后端分离开发、第三方服务集成与数据一致性检查。选择合适的工具需综合考虑需求与团队协作等因素。
817 24
|
6月前
|
SQL 测试技术
除了postman还有什么接口测试工具
最好还是使用国内的接口测试软件,其实国内替换postman的软件有很多,这里我推荐使用yunedit-post这款接口测试工具来代替postman,因为它除了接口测试功能外,在动态参数的支持、后置处理执行sql语句等支持方面做得比较好。而且还有接口分享功能,可以生成接口文档给团队在线浏览。
258 2
|
8月前
|
JSON 前端开发 测试技术
大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
412 10
大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
|
8月前
|
缓存 Java 测试技术
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
948 3
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
|
8月前
|
JSON 前端开发 API
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
385 5
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
|
7月前
|
存储 JSON API
Python测试淘宝店铺所有商品接口的详细指南
本文详细介绍如何使用Python测试淘宝店铺商品接口,涵盖环境搭建、API接入、签名生成、请求发送、数据解析与存储、异常处理等步骤。通过具体代码示例,帮助开发者轻松获取和分析淘宝店铺商品数据,适用于电商运营、市场分析等场景。遵守法规、注意调用频率限制及数据安全,确保应用的稳定性和合法性。
|
7月前
|
监控 API 开发工具
Socket.IO介绍,以及怎么连接测试Socket.IO接口?
Socket.IO 是一个用于浏览器和服务器间实时双向通信的库,支持低延迟消息传递、跨平台运行及自动重连。文章介绍了其特点与调试需求,并详细说明如何使用 Apifox 工具创建、连接、发送/接收 Socket.IO 事件,以及团队协作和调试技巧。掌握这些技能可提升实时应用开发效率与质量。

热门文章

最新文章

推荐镜像

更多
  • qt