首页 > 编程知识 正文

qt开发环境搭建,qt中如何使用ffmpeg命令

时间:2023-05-03 09:47:42 阅读:259900 作者:1242

原博主博客地址: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/includeLIBS += -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/mldxtz下的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

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。