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


相关文章
|
4月前
|
Linux 开发工具 Android开发
FFmpeg开发笔记(六十)使用国产的ijkplayer播放器观看网络视频
ijkplayer是由Bilibili基于FFmpeg3.4研发并开源的播放器,适用于Android和iOS,支持本地视频及网络流媒体播放。本文详细介绍如何在新版Android Studio中导入并使用ijkplayer库,包括Gradle版本及配置更新、导入编译好的so文件以及添加直播链接播放代码等步骤,帮助开发者顺利进行App调试与开发。更多FFmpeg开发知识可参考《FFmpeg开发实战:从零基础到短视频上线》。
422 2
FFmpeg开发笔记(六十)使用国产的ijkplayer播放器观看网络视频
|
4月前
|
并行计算 PyTorch TensorFlow
Ubuntu安装笔记(一):安装显卡驱动、cuda/cudnn、Anaconda、Pytorch、Tensorflow、Opencv、Visdom、FFMPEG、卸载一些不必要的预装软件
这篇文章是关于如何在Ubuntu操作系统上安装显卡驱动、CUDA、CUDNN、Anaconda、PyTorch、TensorFlow、OpenCV、FFMPEG以及卸载不必要的预装软件的详细指南。
6510 3
|
4月前
|
编解码 语音技术 内存技术
FFmpeg开发笔记(五十八)把32位采样的MP3转换为16位的PCM音频
《FFmpeg开发实战:从零基础到短视频上线》一书中的“5.1.2 把音频流保存为PCM文件”章节介绍了将媒体文件中的音频流转换为原始PCM音频的方法。示例代码直接保存解码后的PCM数据,保留了原始音频的采样频率、声道数量和采样位数。但在实际应用中,有时需要特定规格的PCM音频。例如,某些语音识别引擎仅接受16位PCM数据,而标准MP3音频通常采用32位采样,因此需将32位MP3音频转换为16位PCM音频。
126 0
FFmpeg开发笔记(五十八)把32位采样的MP3转换为16位的PCM音频
|
4月前
|
Ubuntu 应用服务中间件 nginx
Ubuntu安装笔记(三):ffmpeg(3.2.16)源码编译opencv(3.4.0)
本文是关于Ubuntu系统中使用ffmpeg 3.2.16源码编译OpenCV 3.4.0的安装笔记,包括安装ffmpeg、编译OpenCV、卸载OpenCV以及常见报错处理。
307 2
Ubuntu安装笔记(三):ffmpeg(3.2.16)源码编译opencv(3.4.0)
|
4月前
|
Linux API 开发工具
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ijkplayer是由B站研发的移动端播放器,基于FFmpeg 3.4,支持Android和iOS。其源码托管于GitHub,截至2024年9月15日,获得了3.24万星标和0.81万分支,尽管已停止更新6年。本文档介绍了如何在Linux环境下编译ijkplayer的so库,以便在较新的开发环境中使用。首先需安装编译工具并调整/tmp分区大小,接着下载并安装Android SDK和NDK,最后下载ijkplayer源码并编译。详细步骤包括环境准备、工具安装及库编译等。更多FFmpeg开发知识可参考相关书籍。
142 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
|
4月前
|
缓存 监控 计算机视觉
视频监控笔记(三):opencv结合ffmpeg获取rtsp摄像头相关信息
本文介绍了如何使用OpenCV结合FFmpeg获取RTSP摄像头信息,包括网络架构、视频监控系统组成、以及如何读取和显示网络摄像头视频流。
151 1
|
4月前
|
网络协议 应用服务中间件 nginx
FFmpeg错误笔记(一):nginx-rtmp-module推流出现 Server error: Already publishing
这篇文章讨论了在使用nginx-rtmp-module进行RTMP推流时遇到的“Server error: Already publishing”错误,分析了错误原因,并提供了详细的解决办法,包括修改nginx配置文件和终止异常的TCP连接。
301 0
FFmpeg错误笔记(一):nginx-rtmp-module推流出现 Server error: Already publishing
|
7月前
|
数据安全/隐私保护 C++ 计算机视觉
Qt(C++)开发一款图片防盗用水印制作小工具
文本水印是一种常用的防盗用手段,可以将文本信息嵌入到图片、视频等文件中,用于识别和证明文件的版权归属。在数字化和网络化的时代,大量的原创作品容易被不法分子盗用或侵犯版权,因此加入文本水印成为了保护原创作品和维护知识产权的必要手段。 通常情况下,文本水印可以包含版权声明、制作者姓名、日期、网址等信息,以帮助识别文件的来源和版权归属。同时,为了增强防盗用效果,文本水印通常会采用字体、颜色、角度等多种组合方式,使得水印难以被删除或篡改,有效地降低了盗用意愿和风险。 开发人员可以使用图像处理技术和编程语言实现文本水印的功能,例如使用Qt的QPainter类进行文本绘制操作,将文本信息嵌入到图片中,
243 1
|
6月前
|
监控 C++ 容器
【qt】MDI多文档界面开发
【qt】MDI多文档界面开发
191 0
|
5月前
Qt开发
Qt开发