码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Qt + FFmpeg 搭建 Windows 开发环境


    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
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

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

    先编译看看:

    在这里插入图片描述

    显示正常。

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

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

    在这里插入图片描述

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

    修改 main.c 程序:

    #include 
    
    // 包含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;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    后面运行程序,出现了报错: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 \
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    照旧拷贝 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 凑合。懂这方面的可以评论区指点一下。

  • 相关阅读:
    电子工艺卡在汽车制造流程中的应用
    小知识:使用oracle用户查看RAC集群资源状态
    Mac电脑无法识别移动硬盘怎么办?
    Element 中图片预览后如何快速关闭
    基于微信小程序的“共享书角”图书借还管理系统(springboot+vue)
    面试让我手写红黑树?!
    sqlserver2012性能优化配置:设置性能相关的服务器参数
    【广州华锐互动】VR消防员模拟灭火:身临其境的火场救援
    瑞吉外卖项目 基于spring Boot+mybatis-plus开发 超详细笔记,有源码链接
    JAVA计算机毕业设计疫情展示平台Mybatis+源码+数据库+lw文档+系统+调试部署
  • 原文地址:https://blog.csdn.net/ProgramNovice/article/details/133580724
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号