Qt开发笔记(一):Qt+FFmpeg开发环境搭建以及工程模板

简介: Qt开发笔记(一):Qt+FFmpeg开发环境搭建以及工程模板

原博主博客地址:https://blog.csdn.net/qq21497936

本文章博客地址:https://blog.csdn.net/qq21497936/article/details/90241425

 

Qt开发笔记(一):Qt+FFmpeg开发环境搭建以及工程模板

前言

       需要使用到FFmpeg做播放器编解码,qt自带的播放器有较大局限,如依赖系统,播放黑屏,无法上浮半透明控件,加速播放、减速播放等等。

 

开发环境搭建                                  

FFmpeg可下载以及版本介绍

       官方下载地址:https://ffmpeg.zeranoe.com/builds/

       

       CSDN下载地址:https://download.csdn.net/download/qq21497936/10666651

开发使用当前最新的版本4.0.2,版本介绍如下:

  • Static(静态库版本):里面只有3个应用程序:ffmpeg.exe,ffplay.exe,ffprobe.exe,每个exe的体积都很大,相关的dll已经被编译到exe里面去了。作为工具而言此版本最合适,不依赖动态库,单个可运行程序;
  • Shared(动态库版本)里面除了3个应用程序:ffmpeg.exe,ffplay.exe,ffprobe.exe之外,还有一些动态dll,比如说avcodec-54.dll之类的。Shared里面的exe体积很小,他们在运行的时候,到相应的dll中调用功能。程序运行过程必须依赖于提供的dll文件,开发程序是必须下载该版本,因为只有该版本中有dll动态库(dev开发者版本中不包含)
  • Dev(开发者版本):是用于开发的,里面包含了库文件xxx.lib以及头文件xxx.h,这个版本不包含exe文件和dll文件。dev版本中include文件夹内包含所有头文件,lib文件夹中包含所有编译开发所需要的库,但没有运行库,需要从Shared版本。

      笔者开发使用4.0.2的win32版本

 

Qt+FFmpeg环境搭建以及工程模板

安装Qt5.9.3

      笔者安装的Qt5.9.3版本,勾选msvc2017 64版本和mingw32版本,具体安装请百度,此处略。

新建FFmpeg工程

      打开QtCreator新建工程FFmpegDemo,如下图:

       

       笔者遵循代码模块化,所以我们在工程主目录下建立

modules/FFmepgServer/FFmpegServer.pri

       在pro头文件中包含FFmpegServer.pri

include($$PWD/modules/FFmpegServer/FFmpegServer.pri)

       添加两行代码,用于引入本模块的头文件路径

       

       添加新类FFmepgServer,集成QObject,主要用于提供一些FFmpeg服务,如录屏,抓图,存录像,转流媒体服务等等,不进行播放端操作;(播放属于另一业务块,所以后续会另行创建其他类);

       

导入FFmpegSdk

      打开模块文件夹,将shared和dev拷贝过来,分别解压到当前文件夹如下图:

       

       正确放置FFmpeg动态库,方法至少有两种:

  • 方法一(推荐)将shared的dll拷贝进lib,这种模块封装性较好,拿来就用,发布时拷贝下dll,如下图:

       

  • 方法二:奖shared的dll拷贝进运行目录(注意是否使用Qt影子工程),这种模块封装性不好,每次引用模块可以编译,运行“异常退出”,自己给自己挖坑,因为容易忘记将shared拷贝进运行库。

       添加FFmpeg搜索路径和配置工程文件,如下:

INCLUDEPATH += $$PWD/ffmpeg-4.0.2-win32-dev/include
LIBS += -L$$PWD/ffmpeg-4.0.2-win32-dev/lib \
                -lavcodec \
                -lavdevice \
                -lavfilter \
                -lavformat \
                -lavutil \
                -lpostproc \
                -lswscale

       FFmpegServer.pri如下图:

       

添加FFmpeg代码测试工程

      在FFmpegServer.h添加头文件,因为qt工程是c++工程,必须加入extern “C”,否则在测试的时候会提示找不到函数,如下图:

       

      正确添加的代码如下:

extern "C" {
    #include <libavcodec/avcodec.h>
    #include <libavformat/avformat.h>
    #include <libswscale/swscale.h>
    #include <libavdevice/avdevice.h>
    #include <libavformat/version.h>
    #include <libavutil/time.h>
    #include <libavutil/mathematics.h>
}

      在FFmpeg的构造函数中,使用qDebug()打开出ffmpeg的配置信息,代码如下图:

       

      在Mianwindow中new FFmpegServer类,运行成功则表示搭建qt+ffmpeg开发环境成功,如下图:

     

切换编译器msvc/mingw32工程测试

       当前使用的编译工程如下(注意去掉shadow影子工程):

       

      切换至msvc编译工程报错如下(注意去掉shadow影子工程):

     

      是因为msvc使用的64位的编译器,那么导入ffmpeg sdk 64位的,如下图:

       

      还是将shared/bin下的dll拷贝到dev/lib(参考下图32位的):

       

        修改pri文件(pro无法判断编译器,手动切换或者可自己定义Config判断):

       

        编译运行成功:

       

 

优化使msvc/mingw32都可编译成功

      添加系统判断和编译器判断,配置文件中是以系统构架来判断编译的位数,实际可能会存在操作系统64位但是编译目标为32位的,那么只能自己注意改动了,因为据笔者目前所知,.pro(.pri)是无法判断编译器位数的。

         

 

工程模板下载地址

         https://download.csdn.net/download/qq21497936/10667360

(待后续)

 

原博主博客地址:https://blog.csdn.net/qq21497936

本文章博客地址:https://blog.csdn.net/qq21497936/article/details/90241425


相关文章
|
8天前
|
编解码 移动开发 安全
FFmpeg开发笔记(五十)聊聊几种流媒体传输技术的前世今生
自互联网普及以来,流媒体技术特别是视频直播技术不断进步,出现了多种传输协议。早期的MMS由微软主导,但随WMV格式衰落而减少使用。RTSP由网景和RealNetworks联合提出,支持多种格式,但在某些现代应用中不再受支持。RTMP由Adobe开发,曾广泛用于网络直播,但因HTML5不支持Flash而受影响。HLS由苹果开发,基于HTTP,适用于点播。SRT和RIST均为较新协议,强调安全与可靠性,尤其SRT在电视直播中应用增多。尽管RTMP仍占一定市场,但SRT等新协议正逐渐兴起。
37 8
FFmpeg开发笔记(五十)聊聊几种流媒体传输技术的前世今生
|
14天前
|
Web App开发 Java 视频直播
FFmpeg开发笔记(四十九)助您在毕业设计中脱颖而出的几个流行APP
对于软件、计算机等专业的毕业生,毕业设计需实现实用软件或APP。新颖的设计应结合最新技术,如5G时代的音视频技术。示例包括: 1. **短视频分享APP**: 集成FFmpeg实现视频剪辑功能,如添加字幕、转场特效等。 2. **电商购物APP**: 具备直播带货功能,使用RTMP/SRT协议支持流畅直播体验。 3. **同城生活APP**: 引入WebRTC技术实现可信的视频通话功能。这些应用不仅实用,还能展示开发者紧跟技术潮流的能力。
39 4
FFmpeg开发笔记(四十九)助您在毕业设计中脱颖而出的几个流行APP
|
7天前
|
Android开发 计算机视觉 C++
FFmpeg开发笔记(五十一)适合学习研究的几个音视频开源框架
音视频编程对许多程序员来说是一片充满挑战的领域,但借助如OpenCV、LearnOpenGL、FFmpeg、OBS Studio及VLC media player等强大的开源工具,可以降低入门门槛。这些框架不仅覆盖了计算机视觉、图形渲染,还包括多媒体处理与直播技术,通过多种编程语言如Python、C++的应用,使得音视频开发更为便捷。例如,OpenCV支持跨平台的视觉应用开发,FFmpeg则擅长多媒体文件的处理与转换,而VLC media player则是验证音视频文件质量的有效工具。
23 0
FFmpeg开发笔记(五十一)适合学习研究的几个音视频开源框架
|
12天前
|
15天前
|
Web App开发 编解码 Linux
FFmpeg开发笔记(四十八)从0开始搭建直播系统的开源软件架构
音视频技术广泛应用于直播系统,涵盖电视、电脑、手机直播等多种形式,并延伸至在线教育、医疗咨询和安全监控等领域。直播系统涉及实时编解码与传输,技术实现较复杂。从用户角度看,直播系统分为来源方和观看方,但在开发者视角下还需加入云平台作为中转。本文提出一套基于全开源软件的直播系统架构,分为三层:开源直播录制软件(如OBS Studio、RTMP Streamer),开源流媒体服务器(如SRS、ZLMediaKit),以及开源音视频播放器(如VLC media player、ExoPlayer)。这些组件共同构成一个高效、灵活且成本低廉的直播解决方案。
46 0
FFmpeg开发笔记(四十八)从0开始搭建直播系统的开源软件架构
|
17天前
|
C++
C++ Qt开发:QUdpSocket网络通信组件
QUdpSocket是Qt网络编程中一个非常有用的组件,它提供了在UDP协议下进行数据发送和接收的能力。通过简单的方法和信号,可以轻松实现基于UDP的网络通信。不过,需要注意的是,UDP协议本身不保证数据的可靠传输,因此在使用QUdpSocket时,可能需要在应用层实现一些机制来保证数据的完整性和顺序,或者选择在适用的场景下使用UDP协议。
53 2
|
27天前
|
网络协议 容器
Qt开发网络嗅探器03
Qt开发网络嗅探器03
|
28天前
|
JavaScript 前端开发 Java
FFmpeg开发笔记(四十七)寒冬下安卓程序员的几个技术转型发展方向
IT寒冬使APP开发门槛提升,安卓程序员需转型。选项包括:深化Android开发,跟进Google新技术如Kotlin、Jetpack、Flutter及Compose;研究Android底层框架,掌握AOSP;转型Java后端开发,学习Spring Boot等框架;拓展大前端技能,掌握JavaScript、Node.js、Vue.js及特定框架如微信小程序、HarmonyOS;或转向C/C++底层开发,通过音视频项目如FFmpeg积累经验。每条路径都有相应的书籍和技术栈推荐,助你顺利过渡。
39 3
FFmpeg开发笔记(四十七)寒冬下安卓程序员的几个技术转型发展方向
|
29天前
|
Web App开发 Android开发
FFmpeg开发笔记(四十六)利用SRT协议构建手机APP的直播Demo
实时数据传输在互联网中至关重要,不仅支持即时通讯如QQ、微信的文字与图片传输,还包括音视频通信。一对一通信常采用WebRTC技术,如《Android Studio开发实战》中的App集成示例;而一对多的在线直播则需部署独立的流媒体服务器,使用如SRT等协议。SRT因其优越的直播质量正逐渐成为主流。本文档概述了SRT协议的使用,包括通过OBS Studio和SRT Streamer进行SRT直播推流的方法,并展示了推流与拉流的成功实例。更多细节参见《FFmpeg开发实战》一书。
37 1
FFmpeg开发笔记(四十六)利用SRT协议构建手机APP的直播Demo
|
1月前
|
Web App开发 5G Linux
FFmpeg开发笔记(四十四)毕业设计可做的几个拉满颜值的音视频APP
一年一度的毕业季来临,计算机专业的毕业设计尤为重要,不仅关乎学业评价还积累实战经验。选择紧跟5G技术趋势的音视频APP作为课题极具吸引力。这里推荐三类应用:一是融合WebRTC技术实现视频通话的即时通信APP;二是具备在线直播功能的短视频分享平台,涉及RTMP/SRT等直播技术;三是具有自定义动画特效及卡拉OK歌词字幕功能的视频剪辑工具。这些项目不仅技术含量高,也符合市场需求,是毕业设计的理想选择。
60 6
FFmpeg开发笔记(四十四)毕业设计可做的几个拉满颜值的音视频APP