首页 > 编程知识 正文

视频监控系统由哪几部分组成(视频监控系统远程)

时间:2023-05-05 04:35:25 阅读:103841 作者:2170

增加

## 一、前言

图形报警子模块,适应各种人脸识别和报警应用。参考各种视频监控手机应用的报警提示信息,基本都是自带时间、内容和缩略图(点击查看大图)。这种信息排列在现代软件中越来越多的使用,弥补了窗口信息的局限性。图形提醒模块负责以图形形式显示相应的提醒或提示信息,有时间、有内容、有图片。双击对应图片放大查看具体图片。为了演示如何方便使用,本模块增加了右键菜单,可以添加消息、删除消息、清除消息。

要实现这个图形报警模块,Qt实现非常方便。有人说qml是分钟,但实际上widgets是分钟。在QtWidget中,一切都是widgets,大量控件都是从widgets继承而来的。即使是复杂的控件,如日历控件,也是由一堆子控件组成的,如QTableView QSpinBox。在qml中,一切都是直的。您可以通过随意设置一个矩形区域来设置鼠标事件和执行操作。这种图片和文字提醒可以组合成一个带有多个QLabel的小部件,然后在需要的时候,可以在滚动条区域放入一个新的小部件。这里需要注意的是,如果无限期添加到图文提醒列表中,内存会一直增加,所以需要限制列表数量。如果数量超过该数量,早期的小部件将被删除。删除时,最好使用deleteLater方法安全删除,避免出错。

00-1010 # # # (1)软件模块

1.视频监控模块,对接小表单的各个子模块,包括设备列表、图形报警、窗口信息、平移/倾斜控制、预设位置、巡航设置、设备控制、浮动地图、网页浏览等。

2.视频播放模块,包括本地播放、远程播放、设备播放、图片播放、视频上传等。

3.电子地图模块,包括图片地图、在线地图、离线地图、路径规划等。

4.日志查询模块,包括本地日志、设备日志等。

5.系统设置模块,包括系统设置(基本设置、视频参数、数据库设置、地图配置、串口配置等。),录像机管理,摄像头管理,轮询配置,用户管理等。

# # # (2)基本功能

1.支持各种视频流(rtsp、rtmp、http等。),视频文件(mp4、rmvb、avi等。),以及本地USB摄像头。

2.支持多屏切换,包括1、4、6、8、9、13、16、25、36、64屏切换。

3.支持全屏切换,包括鼠标右键菜单、工具栏按钮和快捷键(alt进入全屏,esc退出全屏)。

4.支持视频轮询,包括1、4、9、16画面轮询,并可设置轮询分组(轮询计划)、轮询间隔、流类型等。

5.支持onvif协议,包括设备搜索、平移/倾斜控制和设备控制(图片参数、校对时间、系统重启、快照图片等)。).

6.支持权限管理。不同的用户可以对应不同的模块权限,如删除日志、关闭系统等。

7.数据库支持多种类型,包括sqlite、mysql、sqlserver、postgresql、oracle、人大国库等。

8.本地USB摄像头支持设置分辨率、帧率等参数。

9.所有的对接模块都会自动生成相应的菜单来控制显示和隐藏,右击标题栏即可弹出。

10.支持显示所有模块、隐藏所有模块、重置常用布局和重置全屏布局。

11.双击设备弹出实时预览视频,支持图片地图、在线地图、离线地图等。

12.摄像机节点被拖动到对应的窗体播放视频,也支持拖动本地文件直接播放。

13.删除视频支持鼠标右键删除、悬浮条关闭删除、拖到视频监控面板外部删除等。

14.图片地图上的设备按钮可以自由拖动,自动保存位置信息。在百度地图上,可以点击鼠标获取经纬度信息,可以用来更新设备的位置。

15.视频监控面板形式的任何频道都支持拖拽交换和即时响应。

16.封装百度地图、视图切换、运动轨迹、设备点、鼠标按压获取经纬度等。

17.双击节点,拖动节点,拖动表单的交换位置等操作,都会自动更新保存上一次的广播地址,下次软件打开自动申请。

18.右下角的音量条控制,失去焦点时自动隐藏,以及音量带静音图标。

19.支持视频截图。您可以指定单个或所有频道截图。底部小工具栏也有截图按钮。

20.支持超时自动隐藏鼠标指针和自动全屏机制。

21.支持中频PTZ控制,可上下左右移动PTZ相机,包括复位和对焦调整等。

22.支持任何onvif摄像头,包括但不限于海康、大华、时宇、天地叶巍、华为等。

23.视频可以保存,可选定时存储或单文件存储,可选存储间隔。

24.可以设置视频流通信模式tcp udp,视频解码可以设置为速度优先、质量优先、均衡等。

25.您可以设置软件的中文名称、英文名称和LOGO图标。

26.存储的视频文件可以导出到指定的目录,并批量上传到服务器。

# # # (3)特性

1.主界面采用对接的形式模式,各种组件以小模块的形式加入,任何模块都可以定制加入。

2.对接模块可以拖到任何地方嵌入和挂起,支持最大全屏和多屏。

3.双布局文件存储机

制,正常模式、全屏模式都对应不同的布局方案,自动切换和保存,比如全屏模式可以突出几个模块透明显示在指定位置,更具科幻感现代化。

4. 原创onvif协议机制,采用底层协议解析(udp广播搜索+http请求执行命令)更轻量易懂易学习拓展,不依赖任何第三方组件比如gsoap。

5. 原创数据导入导出机制,跨平台不依赖任何组件,瞬间导出数据。

6. 内置多个原创组件,宇宙超值超级牛逼,包括数据导入导出组件(导出到xls、pdf、打印)、数据库组件(数据库管理线程、自动清理数据线程、万能分页、数据请求等)、地图组件、视频监控组件、文件多线程收发组件、onvif通信组件、通用浏览器内核组件等。

7. 自定义信息框+错误框+询问框+右下角提示框(包含多种格式)等。

8. 精美换肤,高达17套皮肤样式随意更换,所有样式全部统一,包括菜单等。

9. 视频控件悬浮条可以自行增加多个按钮,监控界面底部小工具栏也可自行增加按钮。

10. 双击摄像机节点自动播放视频,双击节点自动依次添加视频,会自动跳到下一个,双击父节点自动添加该节点下的所有视频。可选主码流、子码流。

11. 录像机管理、摄像机管理,可添加删除修改导入导出打印信息,立即应用新的设备信息生成树状列表,不需重启。

12. 可选多种内核自由切换,ffmpeg、vlc、mpv等,均可在pro中设置。推荐用ffmpeg,跨平台最多,默认提供好了linux和mac平台上编译好的库。

13. 支持硬解码,可设置硬解码类型(qsv、dxva2、d3d11va等)。

14. 默认采用opengl绘制视频,超低的CPU资源占用,支持yuyv和nv12两种格式绘制,很牛逼。

15. 高度可定制化,用户可以很方便的在此基础上衍生自己的功能,比如增加自定义模块,增加运行模式、机器人监控、无人机监控、挖掘机监控等。

16. 支持xp、win7、win10、linux、mac、各种国产系统(UOS、中标麒麟、银河麒麟等)、嵌入式linux等系统。

17. 注释完整,项目结构清晰,超级详细完整的使用开发手册,精确到每个代码文件的功能说明,不断持续迭代版本。

## 三、体验地址

1. 体验地址:[https://pan.baidu.com/s/1d7TH_GEYl5nOecuNlWJJ7g](https://pan.baidu.com/s/1d7TH_GEYl5nOecuNlWJJ7g) 提取码:01jf 文件名:ssdjb_video_system.zip。

2. 国内站点:[https://gitee.com/feiyangqingyun](https://gitee.com/feiyangqingyun)

3. 国际站点:[https://github.com/feiyangqingyun](https://github.com/feiyangqingyun)

4. 个人主页:[https://blog.csdn.net/feiyangqingyun](https://blog.csdn.net/feiyangqingyun)

5. 知乎主页:[https://www.zhihu.com/people/feiyangqingyun/](https://www.zhihu.com/people/feiyangqingyun/)

6. 在线文档:[https://feiyangqingyun.gitee.io/qwidgetdemo/video_system/](https://feiyangqingyun.gitee.io/qwidgetdemo/video_system/)

## 四、效果图

## 五、核心代码

#include "frmmsglist.h" #include "ui_frmmsglist.h" #include "frmmsglistitem.h" #include "quihelper.h" #include "devicehelper.h" frmMsgList::frmMsgList(QWidget *parent) : QWidget(parent), ui(new Ui::frmMsgList) { ui->setupUi(this); this->initForm(); this->initPanel(); this->initAction(); } frmMsgList::~frmMsgList() { delete ui; } void frmMsgList::resizeEvent(QResizeEvent *) { //设置的0行表示自动计算行数直到不产生滚动条 if (AppConfig::MsgListCount == 0 && isVisible()) { //根据高度变化自动设置行数 int height = this->height() - 10; //行数=高度/每行高度 msgListCount = height / 80; checkCount(); } } void frmMsgList::showEvent(QShowEvent *) { if (AppConfig::MsgListCount != 0) { msgListCount = AppConfig::MsgListCount; } } void frmMsgList::initForm() { msgListCount = 1; DeviceHelper::setMsgList(this); } void frmMsgList::initPanel() { //设置边距 ui->panelWidget->setMargin(6); //设置间距 ui->panelWidget->setSpace(6); //设置自动横向拉伸 ui->panelWidget->setAutoWidth(true); //设置列数 ui->panelWidget->setColumnCount(1); QStringList listMsg; listMsg << "画面变动!" << "有人移动!" << "检测人脸!" << "识别人脸!"; //不需要初始化数据注释下面这段即可 #if 1 QList<QWidget *> widgets; for (int i = 1; i <= 20; i++) { QString time = QTime::currentTime().toString("HH:mm:ss"); QString msg = listMsg.at(rand() % listMsg.count()); QImage image(QString(":/image/liuyifei%1.jpg").arg(rand() % 3)); frmMsgListItem *widget = new frmMsgListItem; widget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); widget->setMsg(msg, image, time); widgets << widget; } //设置窗体集合到容器 ui->panelWidget->setWidgets(widgets); #endif } void frmMsgList::initAction() { //增加右键菜单操作用于演示各种动作 this->setContextMenuPolicy(Qt::ActionsContextMenu); QStringList listTexts; listTexts << "添加消息" << "删除消息" << "清空消息"; foreach (QString text, listTexts) { QAction *action = new QAction(text, this); connect(action, SIGNAL(triggered(bool)), this, SLOT(doAction())); this->addAction(action); } } void frmMsgList::doAction() { QAction *action = (QAction *)sender(); QString text = action->text(); if (text == "添加消息") { QImage image(QString(":/image/liuyifei%1.jpg").arg(rand() % 3)); //addMsg("检测人脸!", image); //测试直接调用全局函数设置 DeviceHelper::addMsgList("检测人脸!", image); } else if (text == "删除消息") { } else if (text == "清空消息") { clearMsg(); } } void frmMsgList::checkCount() { //判断数量是否超过最大值超过则移除多余的 while (ui->panelWidget->getWidgets().count() >= msgListCount) { QWidget *widget = ui->panelWidget->getWidgets().last(); ui->panelWidget->removeWidget(widget); widget->deleteLater(); } } void frmMsgList::addMsg(const QString &msg, const QImage &image) { addMsg(msg, image, TIME); } void frmMsgList::addMsg(const QString &msg, const QImage &image, const QString &time) { checkCount(); //添加新的卡片消息窗体 frmMsgListItem *widget = new frmMsgListItem; widget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); widget->setMsg(msg, image, time); ui->panelWidget->insertWidget(0, widget); } void frmMsgList::clearMsg() { ui->panelWidget->clearWidgets(); }

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