Qt/C++编写可视化大屏电子看板系统31-模块9视频监控_qt 多屏幕监控 代码-程序员宅基地

技术标签: Qt/C++大屏电子看板  qt  Qt学习  Qt数据库请求  

一、前言

视频监控模块采用ffmpeg作为解码内核,可以在系统设置中填入一个视频地址,同时支持本地视频文件、USB摄像机、远程onvif摄像机(海康大华等)、网络视频地址,大屏系统中默认有一个视频监控,如果需要显示多个则new多个视频监控模块即可,在本系统中每个最小单元的小模块都是一个类,需要多少个就可以new多少个出来显示,二级模块作为一个悬停窗体嵌入主界面mainwindow,都可以拖动到任意位置自动嵌入。

视频监控模块有多个参数设置,以便用户设置,最开始做的是内置的写死在代码中,后面随着用户场景的变化,留出参数用户设置更灵活,参数如下:

  • 视频拉伸:有些客户需要拉伸填充有些需要等比例缩放;
  • 视频回调:有些板子或者电脑没有opengl或者版本过低需要开启视频回调才能正常绘制图像;
  • 播放音频:开启后会播放视频和视频流中的声音;
  • 视频循环:开启后播放视频完成后会立即重复播放;
  • 超时时间:打开视频的超时时间,有些网络地址需要设置久一点;
  • 通信方式:视频流采用TCP还是UDP协议播放;

视频监控内核功能特点:

  1. 多线程实时播放视频流+本地视频+USB摄像头等。
  2. 支持windows+linux+mac,支持ffmpeg3和ffmpeg4,支持32位和64位。
  3. 多线程显示图像,不卡主界面。
  4. 自动重连网络摄像头。
  5. 可设置边框大小即偏移量和边框颜色。
  6. 可设置是否绘制OSD标签即标签文本或图片和标签位置。
  7. 可设置两种OSD位置和风格。
  8. 可设置是否保存到文件以及文件名。
  9. 可直接拖曳文件到ffmpegwidget控件播放。
  10. 支持h265视频流+rtmp等常见视频流。
  11. 可暂停播放和继续播放。
  12. 支持存储单个视频文件和定时存储视频文件。
  13. 自定义顶部悬浮条,发送单击信号通知,可设置是否启用。
  14. 可设置画面拉伸填充或者等比例填充。
  15. 可设置解码是速度优先、质量优先、均衡处理。
  16. 可对视频进行截图(原始图片)和截屏。
  17. 录像文件存储支持裸流和MP4文件。
  18. 音视频完美同步,采用外部时钟同步策略。
  19. 支持seek定位播放位置。
  20. 支持在线网络音视频文件比如http开头mp4、mp3结尾的。
  21. 可选句柄模式(GPU绘制)、回调模式(QPainter绘制)。
  22. GPU绘制模式同时支持拉伸和等比例绘制。
  23. 支持qsv、dxva2、d3d11va等硬解码。
  24. 硬解码和GPU组合,超低CPU占用,支持64路视频。
  25. 支持安卓和嵌入式linux,交叉编译即可。

公众号:Qt实战,各种开源作品、经验整理、项目实战技巧,专注Qt/C++软件开发,视频监控、物联网、工业控制、嵌入式软件、国产化系统应用软件开发。

公众号:Qt入门和进阶,专门介绍Qt/C++相关知识点学习,帮助Qt开发者更好的深入学习Qt。多位Qt元婴期大神,一步步带你从入门到进阶,走上财务自由之路。

二、功能特点

  1. 采用分层设计,整体总共分三级界面,一级界面是整体布局,二级界面是单个功能模块,三级界面是单个控件。
  2. 子控件包括饼图、圆环图、曲线图、柱状图、柱状分组图、横向柱状图、横向柱状分组图、合格率控件、百分比控件、进度控件、设备状态面板、表格数据、地图控件、视频控件等。
  3. 二级界面可以自由拖动悬浮,支持最小化隐藏、最大化关闭、响应双击自定义标题栏。
  4. 数据源支持模拟数据(默认)、数据库采集、串口通信(需定制)、网络通信(需定制)、网络请求等,可自由设定每个子界面的采集间隔即数据刷新频率。
  5. 采用纯QWidget编写,亲测Qt4.6到Qt6.2任意版本,理论上支持后续其他Qt版本。
  6. 超强跨平台,亲测windows、linux、mac、国产uos、国产银河麒麟kylin等系统,效果完美,同时还支持嵌入式linux比如树莓派、香橙派、全志、imx6等。
  7. 同时集成了自定义控件、qchart饼图、echart地图等功能。
  8. 内置多套配色风格样式(紫色、蓝色、深蓝、黑色),默认紫色,自适应任意分辨率。
  9. 可设置系统标题、目标分辨率、布局方案,启动立即应用。
  10. 可设置主背景颜色、面板颜色、十字线游标颜色等各种颜色。
  11. 可设置多条曲线不同颜色,没有设置颜色的情况下内置多套精美颜色随机应用。
  12. 可设置标题栏背景颜色、文字颜色。
  13. 可设置曲线图表背景颜色、文字颜色、网格颜色。
  14. 可设置正常颜色、警戒颜色、报警颜色、禁用颜色、百分比进度颜色。
  15. 可分别设置各种字体大小,比如全局字体、软件名称、标题栏、子标题栏、加粗标签等。
  16. 可设置标题栏高度、表头高度、行高度。
  17. 曲线支持游标、定位线、悬停高亮数据点、悬停显示值。
  18. 柱状图支持顶部(可设置顶端、上部、中间、底部)显示数据,全部自适应计算位置。
  19. 支持平滑曲线,内置多种平滑曲线算法,还支持面积图平滑。
  20. 面积图填充颜色可选多种规则比如单色透明度填充、透明度渐变填充等。
  21. 数据库支持sqlite、mysql、postgresql、oracle、国产人大金仓等数据库。
  22. 主界面直接鼠标右键切换布局、配色方案、关闭开启某个二级窗体。
  23. 自动记忆所有子窗口的大小和位置,下次启动立即应用。
  24. 动态加载布局方案菜单,可以动态新建布局、恢复布局、保存布局、另存布局等,用户可以制造任意布局。
  25. 二级窗体,双击从主窗体分离出来浮动,可以自由调整大小。再次双击标题栏最大化,再次双击还原。
  26. 子模块也可以全屏显示作为一个大屏,这样就可以一个大屏拓展出多个子大屏,放大查看子模块的数据详情,适用多屏展示。
  27. 每个模块都可以自定义采集速度,如果是数据库采集会自动排队处理,后期还可以拓展每个子模块都独立的数据库采集。
  28. 提供系统设置模块进行整体的配置参数设置,效果立即应用。
  29. 提供精美炫酷的大屏地图模块,包括静态图片、闪烁效果、迁徙效果、世界地图、区域地图等,可指定点的经纬度坐标,识别单击响应,可以做地图跳转等,每个点都可以不同的颜色和提示信息。
  30. 除了提供大屏系统外,还将每个模块都做了独立的模块示例界面,每个模块都可以独立学习使用,里面用到的控件也单独做了控件示例界面,方便学习每个控件如何使用。
  31. 非常详细的开发和使用手册,其中包括数据库说明、模块对照图、控件对照图、项目结构、代码说明(精确到每个类)、演示demo、使用方法等。

三、体验地址

  1. 体验地址:https://pan.baidu.com/s/1d7TH_GEYl5nOecuNlWJJ7g 提取码:01jf 文件名:bin_bigscreen.zip。
  2. 国内站点:https://gitee.com/feiyangqingyun
  3. 国际站点:https://github.com/feiyangqingyun
  4. 个人主页:https://blog.csdn.net/feiyangqingyun
  5. 知乎主页:https://www.zhihu.com/people/feiyangqingyun/
  6. 在线文档:https://feiyangqingyun.gitee.io/qwidgetdemo/bigscreen/

四、效果图

在这里插入图片描述

五、核心代码

#include "frmmodulevideo.h"
#include "ui_frmmodulevideo.h"
#include "quihelper.h"

frmModuleVideo::frmModuleVideo(QWidget *parent) : QWidget(parent), ui(new Ui::frmModuleVideo)
{
    ui->setupUi(this);
    this->initForm();
}

frmModuleVideo::~frmModuleVideo()
{
    delete ui;
}

void frmModuleVideo::showEvent(QShowEvent *)
{
#ifdef videoffmpeg
    //延时处理不然布局加载后会先显示再隐藏瞬间反复来两次导致隐藏的时候无法暂停
    QTimer::singleShot(200, this, SLOT(open()));
    if (!isLoad) {
        isLoad = true;
    } else {
        videoWidget->next();
    }
#endif
}

void frmModuleVideo::hideEvent(QHideEvent *)
{
#ifdef videoffmpeg
    //界面不可见的时候暂停以节省资源
    videoWidget->pause();
#endif
}

void frmModuleVideo::initForm()
{
    isLoad = false;
    url = AppConfig::VideoUrl;

#ifdef videoffmpeg
    videoWidget = new FFmpegWidget;
    videoWidget->setBorderWidth(0);
    videoWidget->setBgText("");
    //设置拉伸填充图像
    videoWidget->setFillImage(AppConfig::VideoFillImage);
    //设置是否回调,有些嵌入式环境只能用回调
    videoWidget->setCallback(AppConfig::VideoCallback);
    //设置是否播放声音
    videoWidget->setPlayAudio(AppConfig::VideoPlayAudio);
    //设置是否重复播放
    videoWidget->setPlayRepeat(AppConfig::VideoPlayRepeat);
    //设置打开超时时间,一些推流要把时间设置大一些
    videoWidget->setCheckTime(AppConfig::VideoCheckTime * 1000);
    //设置视频流通信协议
    videoWidget->setTransport(AppConfig::VideoTransport);
    //把视频控件加到布局中
    ui->widgetMain->layout()->addWidget(videoWidget);
#endif
}

void frmModuleVideo::setUrl(const QString &url)
{
    this->url = url;
}

void frmModuleVideo::open()
{
#ifdef videoffmpeg
    if (isVisible() && !videoWidget->getIsPlaying()) {
        videoWidget->setUrl(url);
        videoWidget->open();
    }
#endif
}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/feiyangqingyun/article/details/123811299

智能推荐

js处理xml文件,成execl格式_js浏览器环境excel转xml-程序员宅基地

文章浏览阅读344次。nginx配置映射,js读取xml文件,整理成规整excel格式的字符传_js浏览器环境excel转xml

springboot整合jett实现模板excel数据导出_spring boot 导出模板数据-程序员宅基地

文章浏览阅读648次。jett是使用Excel电子表格模板快速创建Excel电子表格报告的工具。_spring boot 导出模板数据

vmstat命令详解-程序员宅基地

文章浏览阅读231次。基础命令学习目录首页原文链接:https://www.cnblogs.com/wensiyang0916/p/6514820.htmlvmstat 1 1表示每秒采集一次vmstat 2 1 2表示2秒采集一次,1表示只采集一次r 表示运行队列(就是说多少个进程真的分配到CPU) 我测试的服务器目前CPU比较空闲,没什么程序在跑,当这个值..._vmstat 1 2

无源波分和彩光模块_无源波分技术及其在4G/5G前传中的应用-程序员宅基地

文章浏览阅读413次。1、无源波分前传方案简述无源波分采用WDM技术,将BBU/DU至不同RRU/AAU的电路采用不同的波长合路到一根光纤中传输。例如,一个4G宏站某个频段的S111站共3个RRU,BBU至RRU的收发端口数共6个,在BBU侧和RRU侧各采用1个6路的OTM(光终端复用器)就可以将BBU和RRU间的收发信号合路到一根光纤中传输,如图1所示。图1 无源WDM前传方案由于OTM是无源器件,故各业务端口光模块..._彩光模块 光纤 发射部分 bbu 波长较大

建边——邻接矩阵、vector、链式向前星_邻接矩阵4vector-程序员宅基地

文章浏览阅读635次。## 建边(图论的中一般都会牵涉到建边的问题,下面的这三种建边的方法视情况选取) - **1.1—邻接矩阵** ==**用邻接矩阵建边的时候,注意题目中可能会有重边!重边!重边!!!**==(根据情况选短的或长的那条),后面两种方法应该不会受重边的影响(目前还没有遇到过有影响的)```cint main(){ int sx,ex,len; //n个点,m条边 while(scanf("%d%d",&n,&m)!=EOF) { _邻接矩阵4vector

施行研发管理,顶层设计是第一步——研发管理自身的战略_施行研发管理,顶层设计是第一步——研发管理自身的战略-程序员宅基地

文章浏览阅读1.7k次。之前写过一篇文章 《研发管理成熟度模型,找到起点再出发》,这里面描述了研发管理体系的发展方向,本篇文章要说的是,企业研发管理持续沿着这个模型演进,相关的必要条件,和大致里程碑。关于研发管理成熟图模型,可以参考关联文章,这里不重复了。必要条件对于技术型企业,产品和技术研发自然是公司战略的主题之一,因此,研发管理也应该成为战略主题的一部分,在公司战略和研发总体战略的指导下,形成研发管理自身的战略。演进路标..._施行研发管理,顶层设计是第一步——研发管理自身的战略

随便推点

史上最全的Android开发学习教程集锦【初学者】_android 项目学习-程序员宅基地

文章浏览阅读5.3w次,点赞39次,收藏399次。根据Google的报告,截止2017年5月为止,Android活跃用户已超过20亿,并还在持续增长中。Android系统在几个主要的市场上已超过了iOS系统,特别是在美国,欧洲和日本,然而苹果确实在中国市场找到了一席之地。未来的市场到底谁是“霸主”我们还无从得知,但Android现在的趋势已经超过iOS。这也是为什么越来越多的设计师投身于Android开发设计。本篇文章从不同角度给Android开..._android 项目学习

揭秘: 优秀CIO的OA选型标准_fanweioa-程序员宅基地

文章浏览阅读6.8k次。OA选型一直是企业信息化建设面临的难题,企业内部没有人懂OA系统,OA行业也没有什么权威机构和数据可以参考,OA系统厂商排名纯属自嗨,那么,到底该如何进行OA选型?看成功企业的选型标准!这些企业CIO在选型时积累的经验都具有极高参考价值,他们的OA选型标准就是你的OA选型指南。OA选型1、综合实力人员:完整的团队是OA项目实施落地的保障,对于企业OA选型来说至关重要,也是企业CIO主要考量标准之一..._fanweioa

Apache Ranger0.5编译-程序员宅基地

文章浏览阅读22次。1. 编译环境# CentOS7# java git gcc环境yum install git wget yum java-1.8.0-openjdk* gcc -y# maven环境wget https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin...

SpringMVC基础掌握--一图看懂三大处理器以及执行流程_springmvc处理器-程序员宅基地

文章浏览阅读1k次,点赞29次,收藏27次。Spring MVC所有的请求都经过Dispatcherservlet来统一分发。DispatcherServlet将请求分发给Controller之前,需要借助于Spring MVC提供的HandlerMapping定位到具体的Controller。HandlerMapping接口负责完成客户请求到Controller映射。Controllr接口将处理用户情求,这和Java Servlet扮演的角色是一致的。_springmvc处理器

ES6 模块暴露_es6暴露模块-程序员宅基地

文章浏览阅读31次。ES6 模块暴露。_es6暴露模块

Intellij IDEA远程debug教程_intell运行调试配置怎么设置-程序员宅基地

文章浏览阅读8.9k次,点赞3次,收藏14次。Intellij IDEA远程debug教程_intell运行调试配置怎么设置

推荐文章

热门文章

相关标签