Qt + FFmpeg 搭建 Windows 开发环境

news2024/11/19 5:42:39

Qt + FFmpeg 搭建 Windows 开发环境

  • Qt + FFmpeg 搭建 Windows 开发环境
    • 安装 Qt Creator
    • 下载 FFmpeg 编译包
    • 测试 Qt + FFmpeg
      • 踩坑
      • 解决方法1:换一个 FFmpeg 库
      • 解决方法2:把项目改成 64 位
    • 后记

官方博客:https://www.yafeilinux.com/

Qt开源社区:https://www.qter.org/

Qt + FFmpeg 搭建 Windows 开发环境

安装 Qt Creator

本文章采用 Qt Creator 4.6.2,详细信息:

在这里插入图片描述

安装步骤参考本人博客:Qt 5基础 | Qt Creator 5.6.1-1的下载与安装

下载 FFmpeg 编译包

进入 FFmpeg 官网,点击 Download:

在这里插入图片描述

进入下载界面,点击 Windows builds from gyan.dev:

在这里插入图片描述

进入 gyan.dev/ffmpeg/builds,选择 ffmpeg-5.1.2-full_build-shared.7z 下载:

在这里插入图片描述

注:一般不选用最新版本下载。

下载完成后解压,内容如下:

在这里插入图片描述

测试 Qt + FFmpeg

踩坑

新建一个 Qt 项目,项目名 testFFmpeg:

在这里插入图片描述

将 ffmpeg-5.1.2-full_build-shared 拷贝到项目目录下:

在这里插入图片描述

注:只拷贝其中的 include 和 lib 也行,注意路径名。

在 testFFmpeg.pro 里面添加 ffmpeg 头文件和库文件路径:

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

注:libs 的多行引用一定要记得带斜杠,否则后续的引用无效。

先编译看看:

在这里插入图片描述

显示正常。

此时,在项目同目录下生成了 build-testFFmpeg-Desktop_Qt_5_9_6_MinGW_32bit-Debug,里面有项目的执行文件。

把 ffmpeg-5.1.2-full_build-shared\bin 的 dll 文件拷贝到执行文件所在目录:

在这里插入图片描述

注:本次我们只用到了 avutil-57.dll,只拷贝这个也行。

修改 main.c 程序:

#include <stdio.h>

// 包含ffmpeg头文件
#include "libavutil/avutil.h"

int main()
{
    printf("Hello FFMPEG, av_version_info is %s\n", av_version_info());

    printf("avutil_configuration is \n%s\n", avutil_configuration());

    return 0;
}

后面运行程序,出现了报错:error: undefined reference to `av_version_info’。

原因:项目选择了 32 位的构建套件,而 FFmpeg 库是 64 位的!

参考:Qt测试FFmpeg的av_version_info()函数,出现undefined reference to `av_version_info‘

解决方法1:换一个 FFmpeg 库

在网上找到了一个 win32 编译的 32 位 FFmpeg 库,修改前面 .pro 文件的库的配置即可。

FFmpeg 库下载链接:ffmpeg-win32-4.2.2.zip

运行结果:

在这里插入图片描述

解决方法2:把项目改成 64 位

重新构建一个项目,选用 MSVC2015 64bit,命名为 testFFmpeg_win64:

在这里插入图片描述

pro 文件添加:

INCLUDEPATH += $$PWD/ffmpeg-5.1.2-full_build-shared/include \

LIBS += $$PWD/ffmpeg-5.1.2-full_build-shared/lib/avcodec.lib \
        $$PWD/ffmpeg-5.1.2-full_build-shared/lib/avdevice.lib \
        $$PWD/ffmpeg-5.1.2-full_build-shared/lib/avfilter.lib \
        $$PWD/ffmpeg-5.1.2-full_build-shared/lib/avformat.lib \
        $$PWD/ffmpeg-5.1.2-full_build-shared/lib/avutil.lib \
        $$PWD/ffmpeg-5.1.2-full_build-shared/lib/postproc.lib \
        $$PWD/ffmpeg-5.1.2-full_build-shared/lib/swresample.lib \
        $$PWD/ffmpeg-5.1.2-full_build-shared/lib/swscale.lib \

照旧拷贝 ffmpeg-5.1.2-full_build-shared 到项目里。

构建项目,遇到报错:Qt 程序数据库管理器不匹配。

解决方法:

工具→选项→构建套件(Kit),MSVC2015 64bits 的编译器换成 amd64。之前是 x86_arm64,是 32 位的。

在这里插入图片描述

照旧添加那些 dll 文件:

在这里插入图片描述

运行成功,结果:

在这里插入图片描述

后记

没想到配个环境都能花这么久的时间,Qt + FFmpeg 实现视频播放器项目推迟一下下,看赛马娘第三季要紧!

现在官网的编译包不能直接在 32bit 的项目里用,有点烦的。先用老东西 ffmpeg-win32-4.2.2.zip 凑合。懂这方面的可以评论区指点一下。

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

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

相关文章

小程序入门笔记(一) 黑马程序员前端微信小程序开发教程

微信小程序基本介绍 小程序和普通网页有以下几点区别&#xff1a; 运行环境&#xff1a;小程序可以在手机的操作系统上直接运行&#xff0c;如微信、支付宝等&#xff1b;而普通网页需要在浏览器中打开才能运行。 开发技术&#xff1a;小程序采用前端技术进行开发&#xff0c;…

Interference Signal Recognition Based on Multi-Modal Deep Learning

系统结构 基于决策的融合实际上是用损失函数监督融合模型 其中 N N N是训练样本的数量 体会 作者未解释公式4的 t i t_i ti​的含义且不公布代码

[尚硅谷React笔记]——第3章 React应用(基于React脚手架)

目录&#xff1a; react脚手架创建项目并启动react脚手架项目结构一个简单的Hello组件样式的模块化功能界面的组件化编码流程&#xff08;通用&#xff09;组件的组合使用-TodoList 1.react脚手架 xxx脚手架: 用来帮助程序员快速创建一个基于xxx库的模板项目 包含了所有需…

ctfshow web入门 php特性 web131-web135

1.web131 和上题一样差不多&#xff0c;正则最大回溯次数绕过 import requests url"" data{f:very*250000360Dctfshow } rrequests.post(url,datadata) print(r.text)2.web132 通过扫描发现robots.txt,访问/admin发现源码 &&和||都是短路运算符 只要满足co…

【LittleXi】【MIT6.S081-2020Fall】Lab: locks

【MIT6.S081-2020Fall】Lab: locks 【MIT6.S081-2020Fall】Lab: locks内存分配实验内存分配实验准备实验目的1. 举一个例子说明修改前的**kernel/kalloc.c**中如果没有锁会导致哪些进程间竞争(races)问题2. 说明修改前的kernel/kalloc.c中锁竞争contention问题及其后果3. 解释a…

使用Jest测试Cesium源码

使用Jest测试Cesium源码 介绍环境Cesium安装Jest安装Jest模块包安装babel安装Jest的VSC插件 测试例子小结 介绍 在使用Cesium时&#xff0c;我们常常需要编写自己的业务代码&#xff0c;其中需要引用Cesium的源码&#xff0c;这样方便调试。此外&#xff0c;目前代码中直接使用…

状态机-状态规划(309. 买卖股票的最佳时机含冷冻期)

class Solution {public int maxProfit(int[] prices) {int n prices.length;if(n 0 || n 1)return 0;int f[][] new int[n][2]; //f[i][0 || 1]表示持有/未持有 第i只股票f[0][0] 0;f[0][1] 0 - prices[0];for(int i 1; i < n;i){f[i][0] Math.max(f[i - 1][0],f[i…

专题一:双指针【优选算法】

双指针应用场景&#xff1a; 数组划分、数组分块 目录 一、移动0 二、复写0 从后向前 三、快乐数 链表带环 四、盛水最多的容器 单调性双指针 五、有效三角形个数 单调性双指针 六、和为s的两个数字 七、三数之和 细节多 需再练 一、移动0 class Solution { public:void move…

前端 | AjaxAxios模块

文章目录 1. Ajax1.1 Ajax介绍1.2 Ajax作用1.3 同步异步1.4 原生Ajax 2. Axios2.1 Axios下载2.2 Axios基本使用2.3 Axios方法 1. Ajax 1.1 Ajax介绍 Ajax: 全称&#xff08;Asynchronous JavaScript And XML&#xff09;&#xff0c;异步的JavaScript和XML。 1.2 Ajax作用 …

SPI 通信协议

1. SPI通信 1. 什么是SPI通信协议 2. SPI的通信过程 在一开始会先把发送缓冲器的数据&#xff08;8位&#xff09;。一次性放到移位寄存器里。 移位寄存器会一位一位发送出去。但是要先放到锁存器里。然后从机来读取。从机的过程也一样。当移位寄存器的数据全部发送完。其实…

【Unity3D编辑器开发】Unity3D编辑器开发基础性框架结构【全面总结】

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客 大家好&#xff0c;我是佛系工程师☆恬静的小魔龙☆&#xff0c;不定时更新Unity开发技巧&#xff0c;觉得有用记得一键三连哦。 一、前言 嗨&#xff0c;大家好&#xff0c;我是恬静的小魔龙。 同学们…

open62541学习:文件传输

作为一种通信协议&#xff0c;文件传输是非常重要的。例如传输执行程序&#xff0c;图片&#xff0c;配置文件等等。文件传输的机制和类型在 OPC UA 中已经存在很长时间了。FileType &#xff08;作为ObjectType&#xff09;和ImageType长期以来一直是内置模型的一部分&#xf…

Linux:TCP三握四挥简析

文章目录 1. 前言2. 背景3. TCP连接的建立和断开3.1 TCP协议状态机3.2 TCP的三握四挥3.2.1 TCP 连接建立的三次握手过程分析3.2.1.1 服务端和客户端套接字的创建3.2.1.2 服务端进入 LISTEN 状态3.2.1.3 服务端在 LISTEN 状态等待客户端的 SYN 请求3.2.1.4 客户端向服务端发送 S…

【云笔记篇】Microsoft OneNote笔记分区数据删除方法

【云笔记篇】Microsoft OneNote笔记分区数据删除方法 Microsoft OneNote删除分区数据需要在网页端操作才能彻底删除—【蘇小沐】 1、实验 系统版本Windows 11 专业工作站版22H2&#xff08;22621.1485&#xff09;&#xff1b;OneNoteOneNote 2016(版本 2303 Build 16.0.162…

香橙派Zero3安装miniconda3(问题多多,已全部解决)

文章目录 前言一、miniconda3版本二、使用步骤1.安装2.添加环境变量3.更新源4.创建新环境 总结另外 前言 你会遇到很多问题&#xff0c;按照我说的基本没问题。 香橙派是zero3。 一、miniconda3版本 Miniconda3-py37_4.9.2-Linux-aarch64.sh这个版本是测试没问题的&#xff0…

HDLbits : Module addsub

module top_module(input [31:0] a,input [31:0] b,input sub,output [31:0] sum );wire w1;add16 add16_1(a[15:0],b[15:0]^{16{sub}},sub,sum[15:0],w1);add16 add16_2(a[31:16],b[31:16]^{16{sub}},w1,sum[31:16],);endmodule 注意&#xff1a;sub位扩展

latex方程组编写,一种可以保证方程编号自适应的方法

问题描述&#xff1a; 在利用latex编写方程组时&#xff0c;可以有很多种方法&#xff0c;但不总是编辑好的公式能够显示出编号&#xff0c;故提出一种有效的方程组编写方法 方法&#xff1a; \begin{equation}X_{ t1}\left \{ \begin{matrix}\frac{x_{i}}{a} \quad\quad 0&l…

数学建模预测模型MATLAB代码大合集及皮尔逊相关性分析(无需调试、开源)

已知2010-2020数据&#xff0c;预测2021-2060数据 一、Logistic预测人口 %%logistic预测2021-2060年结果 clear;clc; X[7869.34, 8022.99, 8119.81, 8192.44, 8281.09, 8315.11, 8381.47, 8423.50, 8446.19, 8469.09, 8477.26]; nlength(X)-1; for t1:nZ(t)(X(t1)-X(t))/X(t1…

redis高可用(主从复制,哨兵,集群)

目录 一、主从复制&#xff1a; 1.主从复制介绍&#xff1a; 2.主从复制的作用&#xff1a; 3.主从复制流程&#xff1a; 4.搭建Redis 主从复制&#xff1a; 4.1 环境准备&#xff1a; 4.2 安装redis&#xff1a; 4.3 master节点修改 Redis 配置文件&#xff1a; 4.4 slave节点…

判断三条边是否构成三角形(Python实现)

组成三角形的三条边a,b,c需满足条件: ab>c ac>b bc>a 已知&#xff1a;三角形任意三条边的长度之和大于第三条边。 解题&#xff1a;定义3个变量a、b、c&#xff0c;让用户输入任意三个数字赋值给三个变量。判断三个变量中是否任意两个之和大于第三个数值。 判断条件之…