Qt+FFmpeg播放RTSP H264视频流(1)- 在Qt项目加入FFmpeg库

QtCreator引入FFmpeg库

本文讲解使用Qt和FFmpeg播放Rtsp H264视频的过程,Rtsp H264视频流从Ipcamera设备获取。最终效果如下图所示:
Qt + FFmpeg播放RTSP H264

下载FFmpeg库

FFmpeg库可以使用源码编译也可以从网上下载已经编译好的库文件,这里使用从网上下载编译好的库文件。
从网站:https://ffmpeg.zeranoe.com/builds/ 下载编译好的FFmpeg库。我选择下载32位的库。
FFmpeg下载选择Windows 32-bit 版本,Static,Share,Dev三个都下载,下载好的三个文件分别为:
下载已编译好的ffmpeg库

添加FFmpeg库到Qt项目

使用QtCreator创建一个Qt gui项目,创建完项目后:

  1. 在项目根目录下创建ffmpeg文件夹,在ffmpeg文件夹中创建include和lib文件夹
  2. 解压ffmpeg-20190628-098ab93-win32-dev.zip压缩文件
  3. 将解压后ffmpeg-20190628-098ab93-win32-dev文件夹下include目录中所有头文件拷贝到新建的ffmpeg目录下的include文件夹中
  4. 将解压后ffmpeg-20190628-098ab93-win32-dev文件夹下lib目录中的所有dll.a结尾的文件拷贝到ffmpeg的lib文件夹中
  5. 修改项目pro文件,在pro文件中增加如下内容:
INCLUDEPATH += $$PWD/ffmpeg/include
LIBS += $$PWD/ffmpeg/lib/libavcodec.dll.a \
             $$PWD/ffmpeg/lib/libavfilter.dll.a \
             $$PWD/ffmpeg/lib/libavformat.dll.a \
             $$PWD/ffmpeg/lib/libavutil.dll.a \
             $$PWD/ffmpeg/lib/libswscale.dll.a

FFmpeg库测试Qt项目

测试FFmpeg库是否能正常使用

  1. 在项目中FFmpegLibTestFrm.cpp文件中添加FFmpeg头文件
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>
}
  1. 在FFmpegLibTestFrm构造函数中增加如下代码
qDebug("------------------------------------------------------------------------");
qDebug("%s", avcodec_configuration());
qDebug("version: %d", avcodec_version());
qDebug("------------------------------------------------------------------------");

添加FFmpeg库测试代码

  1. 编译运行程序,编译成功,运行时如下报错:
Starting E:\code\qt\build-FFmpegLibTest-Desktop_Qt_5_9_2_MinGW_static_32bit-Release\release\FFmpegLibTest.exe...
Cannot retrieve debugging output.
程序异常结束。
The process was ended forcefully.
E:\code\qt\build-FFmpegLibTest-Desktop_Qt_5_9_2_MinGW_static_32bit-Release\release\FFmpegLibTest.exe crashed.

报这个错是因为缺少FFmpeg动态库
解压ffmpeg-20190628-098ab93-win32-shared.zip,将bin目录下的所有dll文件拷贝到编译后的release目录中。注意:如果使用的Qt动态库编译,则还需要加入Qt相关的dll文件后,程序才能跑起来。我用的Qt静态库
将FFmpeg dll文件添加到可执行程序目录重新编译运行程序,程序正常运行,并在QtCreator控制台输出如下内容:

------------------------------------------------------------------------
--disable-static --enable-shared --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libdav1d --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libmfx --enable-amf --enable-ffnvcodec --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth --enable-libopenmpt
version: 3814756
------------------------------------------------------------------------

测试结果
至此,FFmpeg库已经能在Qt项目中正常使用了。

测试demo代码下载:demo代码

  • 4
    点赞
  • 75
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
### 回答1: qt ffmpeg rtsp 多摄像头实时显示是一种常见的视频监控系统开发技术。它主要涉及到qt编程、ffmpeg音视频处理rtsp媒体传输协议。通过使用这些技术,可以实现对多个摄像头的一次性监控和实时显示。具体实现过程主要包括以下几个步骤: 1. 使用qt编写界面,设置多个监控区域 2. 通过ffmpeg读取rtsp,并对其进行解码 3. 对解码后的视频进行处理,包括视频格式转换、分辨率调整、编码等 4. 显示处理后的视频到qt界面上对应的监控区域中 5. 添加控制功能,例如图像调整、录制等 总的来说,qt ffmpeg rtsp 多摄像头实时显示是一种实用的视频监控系统开发技术,它可以为不同的企业和机构提供更加安全、高效的视频监控服务,同时也可以提升人们对环境和事件的认识和应对能力。 ### 回答2: QT是一种跨平台的GUI,可用于创建不同类型的应用程序。ffmpeg是一种广泛使用的开源框架,可以用于解码、编码和播放多种类型的音视频文件。而RTSP是一种实时媒体传输协议,通常用于视频流的传输。 在QT中使用ffmpegRTSP协议可以实现多摄像头的实时显示。首先需要使用ffmpeg打开RTSP媒体,此后就可以使用QT的多媒体模块进行视频显示。具体实现如下: 1. 首先在QT项目中添加ffmpeg,并包含相关头文件。 2. 使用ffmpeg中的avformat_open_input()函数打开RTSP媒体,设置相关参数,如codec等配置。 3. 创建QT的VideoWidget对象,将其与QMediaPlayer对象绑定,设置为全屏显示或自适应大小。 4. 使用QT的QMediaPlayer对象进行视频播放,通过QMediaPlayer::setVideoOutput()方法将视频输出到VideoWidget中。 5. 在主窗口中创建多个QGridLayout布局,每个布局包含一个VideoWidget和一个QLabel,分别用于显示视频和视频来源的IP地址或名称等相关信息。 6. 将多个布局分别添加到主窗口中,实现多视频窗口的显示。 7. 在主窗口中添加一个线程,该线程循环调用ffmpeg的av_read_frame()函数读取RTSP媒体中的视频帧,使用QMetaObject::invokeMethod()方法将视频帧传输到QMediaPlayer对象中进行播放。 通过以上步骤,可以实现一个简单的多摄像头实时显示系统。需要注意的是,在实际应用中,还需要考虑很多细节,如多线程同步,视频流清晰度、延迟等方面的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值