0 前言说明
0.1 系统说明
- 本视频监控系统做的是通用的系统,主要偏重UI和整体框架。
- 主要功能包括摄像机管理,实时视频显示,设备地图显示,各种画面切换,onvif搜索设备和云台控制,通用的NVR视频流播放(比如海康的NVR支持直接取流回放)等功能。
- 如果是依赖SDK去实现的功能(雨刷、去雾等)都没有做,那个破坏了兼容性,无法通用其他摄像机设备以及其他操作系统。
- 一般都是买过去自己加上SDK的功能和自己定制的需要的功能。
- 每个厂家SDK和定制的功能都不一样。
- 本程序会不定期更新,包括使用说明,购买者可永久免费升级,一次购买终生售后。
0.2 特别说明
- 程序本身是个客户端并不是服务器程序。
- 摄像机管理没有限制摄像机的数量,理论上10000路肯定没有问题,就是个数据库记录。
- 实时显示具体能支持多少路,和具体的电脑配置有关(亲测1.8G主频8G内存I5子码流64路,总之比海康大华客户端要更优秀)。
- 程序实时显示界面最大可以到64路,每个通道都是打开的时候才会去建立连接取视频流,而不是一开始就建立了连接。
- 未经本人许可不可将本项目源码扩散,如有发现本人将追究法律责任,谢谢配合。
相关站点
- 国内站点:https://gitee.com/feiyangqingyun/
- 国际站点:https://github.com/feiyangqingyun/
- 个人主页:https://blog.csdn.net/feiyangqingyun/
- 知乎主页:https://www.zhihu.com/people/feiyangqingyun
- 产品主页:https://blog.csdn.net/feiyangqingyun/article/details/97565652
0.3 功能特点
0.3.1 软件模块
- 视频监控模块,各种停靠小窗体子模块,包括设备列表、图文警情、窗口信息、云台控制、预置位、巡航设置、设备控制、悬浮地图、网页浏览等。
- 视频回放模块,包括本地回放、远程回放、设备播放、图片回放、视频上传等。
- 电子地图模块,包括图片地图、在线地图、离线地图、路径规划等。
- 日志查询模块,包括本地日志、设备日志等。
- 系统设置模块,包括系统设置(基本设置、视频参数、数据库设置、地图配置、串口配置等)、录像机管理、摄像机管理、轮询配置、用户管理等。
0.3.2 基础功能
- 支持各种视频流(rtsp、rtmp、http等)、视频文件(mp4、rmvb、avi等)、本地USB摄像机播放。
- 支持多画面切换,包括1、4、6、8、9、13、16、25、36、64画面切换。
- 支持全屏切换,多种切换方式包括鼠标右键菜单、工具栏按钮、快捷键(alt+enter全屏,esc退出全屏)。
- 支持视频轮询,包括1、4、9、16画面轮询,可设置轮询分组(轮询预案)、轮询间隔、码流类型等。
- 支持onvif协议,包括设备搜索、云台控制、设备控制(图片参数、校对时间、系统重启,抓拍图片等)。
- 支持权限管理,不同的用户可以对应不同的模块权限,比如删除日志、关闭系统等。
- 数据库支持多种,包括sqlite、mysql、sqlserver、postgresql、oracle、人大金仓等。
- 本地USB摄像机支持设置分辨率、帧率等参数。
- 所有停靠模块都自动生成对应的菜单用来控制显示和隐藏,在标题栏右键可以弹出。
- 支持显示所有模块、隐藏所有模块、复位普通布局、复位全屏布局。
- 双击设备弹出实时预览视频,支持图片地图、在线地图、离线地图等。
- 摄像机节点拖曳到对应窗体播放视频,同时支持拖曳本地文件直接播放。
- 删除视频支持鼠标右键删除、悬浮条关闭删除、拖曳到视频监控面板外删除等多种方式。
- 图片地图上设备按钮可自由拖动,自动保存位置信息。百度地图上可以鼠标单击获取经纬度信息,用来更新设备位置。
- 视频监控面板窗体中任意通道支持拖曳交换,瞬间响应。
- 封装了百度地图,视图切换,运动轨迹,设备点位,鼠标按下获取经纬度等。
- 双击节点、拖曳节点、拖曳窗体交换位置等操作,均自动更新保存最后的播放地址,下次软件打开自动应用。
- 右下角音量条控件,失去焦点自动隐藏,音量条带静音图标。
- 支持视频截图,可指定单个或者对所有通道截图,底部小工具栏也有截图按钮。
- 支持超时自动隐藏鼠标指针、自动全屏机制。
- 支持onvif云台控制,可上下左右移动云台摄像机,包括复位和焦距调整等。
- 支持任意onvif摄像机,包括但不限于海康、大华、宇视、天地伟业、华为等。
- 可保存视频,可选定时存储或者单文件存储,可选存储间隔时间。
- 可设置视频流通信方式tcp+udp,可设置视频解码是速度优先、质量优先、均衡等。
- 可设置软件中文名称、英文名称、LOGO图标等。
- 存储的视频文件支持导出到指定目录,支持批量上传到服务器。
0.3.3 特色功能
- 主界面采用停靠窗体模式,各种组件以小模块的形式加入,可自定义任意模块加入。
- 停靠模块可拖动任意位置嵌入和悬浮,支持最大化全屏,支持多屏幕。
- 双重布局文件存储机制,正常模式、全屏模式都对应不同的布局方案,自动切换和保存,比如全屏模式可以突出几个模块透明显示在指定位置,更具科幻感现代化。
- 原创onvif协议机制,采用底层协议解析(udp广播搜索+http请求执行命令)更轻量易懂易学习拓展,不依赖任何第三方组件比如gsoap。
- 原创数据导入导出机制,跨平台不依赖任何组件,瞬间导出数据。
- 内置多个原创组件,宇宙超值超级牛逼,包括数据导入导出组件(导出到xls、pdf、打印)、数据库组件(数据库管理线程、自动清理数据线程、万能分页、数据请求等)、地图组件、视频监控组件、文件多线程收发组件、onvif通信组件、通用浏览器内核组件等。
- 自定义信息框+错误框+询问框+右下角提示框(包含多种格式)等。
- 精美换肤,高达17套皮肤样式随意更换,所有样式全部统一,包括菜单等。
- 视频控件悬浮条可以自行增加多个按钮,监控界面底部小工具栏也可自行增加按钮。
- 双击摄像机节点自动播放视频,双击节点自动依次添加视频,会自动跳到下一个,双击父节点自动添加该节点下的所有视频。可选主码流、子码流。
- 录像机管理、摄像机管理,可添加删除修改导入导出打印信息,立即应用新的设备信息生成树状列表,不需重启。
- 可选多种内核自由切换,ffmpeg、vlc、mpv等,均可在pro中设置。推荐用ffmpeg,跨平台最多,默认提供好了linux和mac平台上编译好的库。
- 支持硬解码,可设置硬解码类型(qsv、dxva2、d3d11va等)。
- 默认采用opengl绘制视频,超低的CPU资源占用,支持yuyv和nv12两种格式绘制,很牛逼。
- 高度可定制化,用户可以很方便的在此基础上衍生自己的功能,比如增加自定义模块,增加运行模式、机器人监控、无人机监控、挖掘机监控等。
- 支持xp、win7、win10、linux、mac、各种国产系统(UOS、中标麒麟、银河麒麟等)、嵌入式linux等系统。
- 注释完整,项目结构清晰,超级详细完整的使用开发手册,精确到每个代码文件的功能说明,不断持续迭代版本。
0.4 编译说明
0.4.1 特别提示
- 本系统没有说基于哪个Qt版本,由于系统中电子地图模块用到了浏览器模块,所以理论上要求你电脑的Qt版本也有浏览器模块才行
- windows上Qt5.6以上的版本需要msvc编译器的版本才有,其余系统都会有。
- 如果没有则电子地图模块不可用,但是其余功能全部可用没有任何影响。
- 本人亲测4.7、4.8、5.5、5.6、5.7、5.9、5.12、5.13、5.14、5.15等。
- 2021-1-6开始集成了miniblink浏览器内核,意味着mingw版本的qt5.6以上版本也全部支持,这样就所有系统都有浏览器模块不需要担心没有电子地图的问题。
0.4.2 注意事项
- 可执行文件在源码同级目录的bin目录下。
- 编译完成后记得将源码下的file文件夹下的所有文件复制到可执行文件同一目录。
- 如果开启了视频监控(默认开启),则记得将对应的动态库文件复制到可执行文件同一目录。比如采用ffmpeg内核(默认就是ffmpeg)的话,则将下载到的dll_ffmpeg4下的所有文件复制到可执行文件同一目录。
- 各个操作系统的ffmpeg和vlc编译好的dll以及miniblink的dll下载地址。
-https://pan.baidu.com/s/13LDRu6mXC6gaADtrGprNVA 提取码: ujm7。
- 如果是64位的qt则对应的dll时候拷贝dll_ffmpeg4_64目录下的。
- 如果使用的ffmpeg3则对应dll目录就是dll_ffmpeg,在ffmpeg.pri文件中可以看到具体启用的是ffmpeg3(支持XP)还是ffmpeg4(不支持XP),默认是ffmpeg4。
- 图形字体对照表在doc目录下的IconFont.png、Font Awesome Cheatsheet.png,分别对应图形字体类 IconFont、IconHelper。
- 如果发现地图打不开,请先确认file目录下的所有文件有没有拷贝过去。
- 如果是用vs+qt可能报错 error LNK2026,解决办法详细见文档中其他说明。
- 默认用户名admin 密码admin
0.4.3 离线地图
- 离线地图可以用网上的瓦片地图下载器下载百度的离线地图放到对应目录即可。
- 也可以直接下载网盘中已经下载好的上海市的离线地图。
- 下载地址:https://pan.baidu.com/s/1d7TH_GEYl5nOecuNlWJJ7g 提取密码:01jf 文件名称:bin_map_tiles.zip
使用说明
- 将压缩包下的两个文件夹复制到对应可执行文件下的config文件夹下,和map.js文件同一级目录。
- tiles文件夹是街道图,tiles_hybrid文件夹是卫星图。
- 默认提供的是上海市徐汇区的瓦片地图,如果自己用万能地图下载器下载的百度地图的瓦片文件,也可以对应替换就行。
- 要注意的是格式,默认是jpg,如果下载的瓦片地图格式是png则需要打开config文件夹下的map_load.js文件,将.jpg改成.png保存即可。
0.5 视频格式
0.5.1 USB摄像头
- 内核ffmpeg写法:video=USB2.0 PC CAMERA(具体要看设备名)。
- 内核vlc写法:dshow://:dshow-vdev='Default' (或者填USB2.0 PC CAMERA)
- 带参数写法:2020-12-12以后增加USB摄像头直接url带分辨率帧率写法,默认分辨率640x480。
写法举例
- video=USB2.0 PC CAMERA|1920x1080|30(表示1920*1080分辨率30帧)
- video=USB2.0 PC CAMERA|640x480(表示640*480分辨率)
- dshow://:dshow-vdev='Default'|1920x1080(vlc内核1920*1080分辨率)
0.5.2 网络地址
- 下面的地址有时候会失效,可以自行网上找找其他的地址,网络视频地址建议在晚上测试会更流畅。
- 大雄兔:rtsp://184.72.239.149/vod/mp4://BigBuckBunny_175k.mov
- 中央卫视:rtmp://58.200.131.2:1935/livetv/cctv1 – cctv10
- 海康萤石:https://hls01open.ys7.com/openlive/6e0b2be040a943489ef0b9bb344b96b8.hd.m3u8
- 摄像机格式:https://blog.csdn.net/qq_38880380/article/details/80652697
0.5.3 视频文件
- http://vfx.mtime.cn/Video/2019/02/04/mp4/190204084208765161.mp4
- http://vfx.mtime.cn/Video/2019/03/19/mp4/190319212559089721.mp4
- http://vfx.mtime.cn/Video/2019/03/17/mp4/190317150237409904.mp4
- http://vfx.mtime.cn/Video/2019/03/14/mp4/190314223540373995.mp4
0.6 版本说明
V20210603
- 将onvif搜索的用户密码,设备播放界面的设备密码等配置参数全部改成了密文存储。
- 大量修改代码,全部支持Qt4-Qt6所有版本。
- 调整onvif代码执行机制,改成了异步执行。
- 云台协议增加了连续移动。
- 增加了预置位相关处理,包括获取预置位、调用预置位、添加预置位、删除预置位。
- 自动巡航按照预置位集合进行,采用定时器去调用预置位队列。
- 增加图文警情行数、窗口信息行数配置,0行表示自动处理。
V20210425
- 配置文件密码改成密文存储。
- 增加了无敌的牛逼的万能的完美入微级自动分页导航控件。
- 日志记录表增加索引,速度提升100倍以上。
- 新增多个设备轨迹 不同颜色+传入经纬度 单独示例。
- 对地图核心类所有覆盖物都增加颜色+粗细+透明度的参数,可动态传入对应值。
- 系统设置增加用户管理模块,可分别设置对应的权限。
- 万能权限管理算法,通过设置不同需要授权的模块名称,对应切换的按钮自动计算。
- 增加了appkey秘钥类,用于校验秘钥是否正确,运行时间等。
V20210403
- 增加全局变量AppData::LastLiveTime,记住程序最后的活动时间-包括键盘+鼠标活动,用于两个判断,一个是超过多久没有操作全屏下隐藏鼠标光标,一个是超过多久没有操作如果没有全屏则自动全屏。
- 增加App::TimeAutoFull配置参数用来判断比较超时自动全屏。
- 重命名为TimeHideCursor表示程序多久未操作自动隐藏光标,TimeAutoFull程序多久未操作自动全屏界面,下拉框选项值增加0,表示不启用此功能。
- 增加信息列表模块frmMsgList,用于图文列表显示信息,对应兄弟类frmMsgTable用于表格显示消息。
- 大改版,将中间部分全部改成了QMainWindow,子模块全部采用停靠窗体,可以悬浮半透明,自动记忆每个模块的最后的位置,启动后自动应用。
- 移除大改版后的所有不需要用的变量和配置参数,重新调整配置参数。
- 增加透明度参数用于停靠窗体独立出来后的透明度。
- 将摄像机控制部分比如云台+控制+预置位+巡航,单独分类到ipc模块,方便管理。
- 限定操作员不能移动停靠窗体等,需要管理员设计好。
- 修复系统设置中工作模式等切换造成的自动重启会弹出退出和登录两个窗体的BUG。
- 修复自动登录用户计算不正确的BUG,要以最后登录的用户为准。
V20210322
- USB摄像头增加参数帧率,第二个参数是分辨率,第三个参数为帧率,不设置则采用默认的帧率,video=USB2.0 PC CAMERA|1920x1080|25。
- 增加独立的demo模块,专门用于测试监控系统中用到的组件和控件,演示如何使用,比如视频图片界面演示从文件夹读取图片绘制到窗体,视频窗体演示系统的核心组件视频控件的设置参数如何使用等。
- 增加了对其他数据库的支持,比如posgres、oracle、odbc、kingbase等数据库,理论上只要支持odbc数据源方式的都支持。
- 增加IndexStart启动窗体索引配置参数,0-主程序 1-演示示例。
V20210305
- 修复数据库有时候没加载到的BUG。
- 新增配置参数控制画面切换的菜单和快捷图标是否显示。
- ffmpeg内核增加了可动态保存机制,点击开始保存按钮启动保存,单击结束则生成视频文件,如此往复。
- 海康内核判断主码流子码流改成了 /101? 和 /main/ 同时判断。
- 新增多屏幕的支持,自动在对应屏幕最大化全屏,对话框位置,右下角提示框等。
- 再次分类存放代码文件,分成core ui class三大类。
- 系统配置更改视频控件参数,统一一个函数设置,initCommonVideoWidget函数中做了过滤,必须关闭状态的视频控件设置才起作用。
- 设备播放模块增加大华NVR的远程回放地址,其他地址计算算法调整。
- 新增界面模块功能启用配置参数。
- 新增主界面顶部导航模块中间界面,用于不同的运行模式加载不同的模块。
V20201212
- 增加USB摄像机分辨率设置,直接url带掉。
- 所有地图内核公用一个,复用代码。
- 增加地图默认级别和中心点坐标设置参数。
- 主界面四个模块独立出来,做成了可配置,这样后期可以任意位置放置自定义模块。
- 四个模块标题栏自定义。
- vlc内核和mpv内核的离线判断,当句柄模式下,统一为getLastTime,当调用该函数的时候自动查询播放状态,如果正在播放则自动更新时间为当前时间。
- 将各种在代码中define定义不同内核的代码全部优化,统一为一个类,很大减少代码量,统一为CommonVideoWidget和CommonVideoManage类。
V20201108
- 轮询点模块增加批量生成功能。
- 录像机、摄像机、轮询点,增加导入导出功能。
- ffmpeg内核增加读取帧回调,超时识别,可以快速识别掉线。
20200828
- 增加了云台控制过滤,没有打开的视频禁用云台。
- linux上全屏BUG修复,采用showfullscreen。
- 增加轮询点管理模块。
- 修正轮询的可能崩溃的BUG。
V20200730
- 系统设置增加了视频上传模块,用来将本地的视频文件传输到服务器,多线程并发。
- 视频监控内核新增MPV内核,修正了其他内核的部分函数和处理。
- 海康内核进行大改动,同时支持视频流和本地MP4文件播放,自动分析切换。
- 海康内核增加回调处理,可以拿到每一张图片。
- 海康内核进行了linux上的实验,可以正常播放。
- ffmpeg内核增加保存到MP4。
- 本地文件回放vlc部分增加进度切换等。
- 悬浮条关闭按钮增加实际处理,之前只是打印消息。
- 改进了vlc和mpv的事件回调机制,使其同时支持qt4+qt5。
V20200620
- 增加了opengl显示实时视频,CPU占用极低。
- 增加了地图上设备点位置的调整。
- 设备点双击弹出实时视频预览。
- 增加GPS运动轨迹显示。
- ffmpeg解码类增加了音频播放,采用的QAudioOutput。
V20191105
- 增加云台控制功能,可以上下左右等八个方位控制云台,默认采用相对移动,云台中间按下表示复位。
- 系统设置增加码流类型选择,默认子码流,切换完自动应用。
- 云台控制增加速度功能,值越大,速度越快。
- 增加焦距控制,可放大缩小,速度也可控制。
1 用户登录退出
1.1 用户登录
+https://pan.baidu.com/s/13LDRu6mXC6gaADtrGprNVA 提取码: ujm7。
如果是64位的qt则对应的dll时候拷贝dll_ffmpeg4_64目录下的。如果使用的ffmpeg3则对应dll目录就是dll_ffmpeg,在ffmpeg.pri文件中可以看到具体启用的是ffmpeg3(支持XP)还是ffmpeg4(不支持XP),默认是ffmpeg4。图形字体对照表在doc目录下的IconFont.png、Font Awesome Cheatsheet.png,分别对应图形字体类 IconFont、IconHelper。如果发现地图打不开,请先确认file目录下的所有文件有没有拷贝过去。如果是用vs+qt可能报错 error LNK2026,解决办法详细见文档中其他说明。默认用户名admin 密码admin0.4.3 离线地图
- 离线地图可以用网上的瓦片地图下载器下载百度的离线地图放到对应目录即可。
- 也可以直接下载网盘中已经下载好的上海市的离线地图。
- 下载地址:https://pan.baidu.com/s/1d7TH_GEYl5nOecuNlWJJ7g 提取密码:01jf 文件名称:bin_map_tiles.zip
使用说明
- 将压缩包下的两个文件夹复制到对应可执行文件下的config文件夹下,和map.js文件同一级目录。
- tiles文件夹是街道图,tiles_hybrid文件夹是卫星图。
- 默认提供的是上海市徐汇区的瓦片地图,如果自己用万能地图下载器下载的百度地图的瓦片文件,也可以对应替换就行。
- 要注意的是格式,默认是jpg,如果下载的瓦片地图格式是png则需要打开config文件夹下的map_load.js文件,将.jpg改成.png保存即可。
0.5 视频格式
0.5.1 USB摄像头
- 内核ffmpeg写法:video=USB2.0 PC CAMERA(具体要看设备名)。
- 内核vlc写法:dshow://:dshow-vdev='Default' (或者填USB2.0 PC CAMERA)
- 带参数写法:2020-12-12以后增加USB摄像头直接url带分辨率帧率写法,默认分辨率640x480。
写法举例
- video=USB2.0 PC CAMERA|1920x1080|30(表示1920*1080分辨率30帧)
- video=USB2.0 PC CAMERA|640x480(表示640*480分辨率)
- dshow://:dshow-vdev='Default'|1920x1080(vlc内核1920*1080分辨率)
0.5.2 网络地址
- 下面的地址有时候会失效,可以自行网上找找其他的地址,网络视频地址建议在晚上测试会更流畅。
- 大雄兔:rtsp://184.72.239.149/vod/mp4://BigBuckBunny_175k.mov
- 中央卫视:rtmp://58.200.131.2:1935/livetv/cctv1 – cctv10
- 海康萤石:https://hls01open.ys7.com/openlive/6e0b2be040a943489ef0b9bb344b96b8.hd.m3u8
- 摄像机格式:https://blog.csdn.net/qq_38880380/article/details/80652697
0.5.3 视频文件
- http://vfx.mtime.cn/Video/2019/02/04/mp4/190204084208765161.mp4
- http://vfx.mtime.cn/Video/2019/03/19/mp4/190319212559089721.mp4
- http://vfx.mtime.cn/Video/2019/03/17/mp4/190317150237409904.mp4
- http://vfx.mtime.cn/Video/2019/03/14/mp4/190314223540373995.mp4
0.6 版本说明
V20210603
- 将onvif搜索的用户密码,设备播放界面的设备密码等配置参数全部改成了密文存储。
- 大量修改代码,全部支持Qt4-Qt6所有版本。
- 调整onvif代码执行机制,改成了异步执行。
- 云台协议增加了连续移动。
- 增加了预置位相关处理,包括获取预置位、调用预置位、添加预置位、删除预置位。
- 自动巡航按照预置位集合进行,采用定时器去调用预置位队列。
- 增加图文警情行数、窗口信息行数配置,0行表示自动处理。
- 做了大量的代码改进,比如onvif内核换成了QDom对象处理,之前是采用的QXmlQuery查询,由于XmlPatterns这个模块逐渐废弃了,而且在Qt6中不再有,所以彻底移除了XmlPatterns相关的代码,改用其他处理方式实现。
- 增加了预置位和自动巡航处理,其中包括获取预置位集合、调用预置位、添加预置位、删除预置位、设置起始位、调用起始位等。
- ONVIF内核几乎全部重写,将数据改成了结构体,比如设备信息、预置位信息、事件信息等,可以存储更多的数据,拓展也非常灵活。
V20210425
- 配置文件密码改成密文存储。
- 增加了无敌的牛逼的万能的完美入微级自动分页导航控件。
- 日志记录表增加索引,速度提升100倍以上。
- 新增多个设备轨迹 不同颜色+传入经纬度 单独示例。
- 对地图核心类所有覆盖物都增加颜色+粗细+透明度的参数,可动态传入对应值。
- 系统设置增加用户管理模块,可分别设置对应的权限。
- 万能权限管理算法,通过设置不同需要授权的模块名称,对应切换的按钮自动计算。
- 增加了appkey秘钥类,用于校验秘钥是否正确,运行时间等。
V20210403
- 增加全局变量AppData::LastLiveTime,记住程序最后的活动时间-包括键盘+鼠标活动,用于两个判断,一个是超过多久没有操作全屏下隐藏鼠标光标,一个是超过多久没有操作如果没有全屏则自动全屏。
- 增加App::TimeAutoFull配置参数用来判断比较超时自动全屏。
- 重命名为TimeHideCursor表示程序多久未操作自动隐藏光标,TimeAutoFull程序多久未操作自动全屏界面,下拉框选项值增加0,表示不启用此功能。
- 增加信息列表模块frmMsgList,用于图文列表显示信息,对应兄弟类frmMsgTable用于表格显示消息。
- 大改版,将中间部分全部改成了QMainWindow,子模块全部采用停靠窗体,可以悬浮半透明,自动记忆每个模块的最后的位置,启动后自动应用。
- 移除大改版后的所有不需要用的变量和配置参数,重新调整配置参数。
- 增加透明度参数用于停靠窗体独立出来后的透明度。
- 将摄像机控制部分比如云台+控制+预置位+巡航,单独分类到ipc模块,方便管理。
- 限定操作员不能移动停靠窗体等,需要管理员设计好。
- 修复系统设置中工作模式等切换造成的自动重启会弹出退出和登录两个窗体的BUG。
- 修复自动登录用户计算不正确的BUG,要以最后登录的用户为准。
V20210322
- USB摄像头增加参数帧率,第二个参数是分辨率,第三个参数为帧率,不设置则采用默认的帧率,video=USB2.0 PC CAMERA|1920x1080|25。
- 增加独立的demo模块,专门用于测试监控系统中用到的组件和控件,演示如何使用,比如视频图片界面演示从文件夹读取图片绘制到窗体,视频窗体演示系统的核心组件视频控件的设置参数如何使用等。
- 增加了对其他数据库的支持,比如posgres、oracle、odbc、kingbase等数据库,理论上只要支持odbc数据源方式的都支持。
- 增加IndexStart启动窗体索引配置参数,0-主程序 1-演示示例。
V20210305
- 修复数据库有时候没加载到的BUG。
- 新增配置参数控制画面切换的菜单和快捷图标是否显示。
- ffmpeg内核增加了可动态保存机制,点击开始保存按钮启动保存,单击结束则生成视频文件,如此往复。
- 海康内核判断主码流子码流改成了 /101? 和 /main/ 同时判断。
- 新增多屏幕的支持,自动在对应屏幕最大化全屏,对话框位置,右下角提示框等。
- 再次分类存放代码文件,分成core ui class三大类。
- 系统配置更改视频控件参数,统一一个函数设置,initCommonVideoWidget函数中做了过滤,必须关闭状态的视频控件设置才起作用。
- 设备播放模块增加大华NVR的远程回放地址,其他地址计算算法调整。
- 新增界面模块功能启用配置参数。
- 新增主界面顶部导航模块中间界面,用于不同的运行模式加载不同的模块。
V20201212
- 增加USB摄像机分辨率设置,直接url带掉。
- 所有地图内核公用一个,复用代码。
- 增加地图默认级别和中心点坐标设置参数。
- 主界面四个模块独立出来,做成了可配置,这样后期可以任意位置放置自定义模块。
- 四个模块标题栏自定义。
- vlc内核和mpv内核的离线判断,当句柄模式下,统一为getLastTime,当调用该函数的时候自动查询播放状态,如果正在播放则自动更新时间为当前时间。
- 将各种在代码中define定义不同内核的代码全部优化,统一为一个类,很大减少代码量,统一为CommonVideoWidget和CommonVideoManage类。
V20201108
- 轮询点模块增加批量生成功能。
- 录像机、摄像机、轮询点,增加导入导出功能。
- ffmpeg内核增加读取帧回调,超时识别,可以快速识别掉线。
20200828
- 增加了云台控制过滤,没有打开的视频禁用云台。
- linux上全屏BUG修复,采用showfullscreen。
- 增加轮询点管理模块。
- 修正轮询的可能崩溃的BUG。
V20200730
- 系统设置增加了视频上传模块,用来将本地的视频文件传输到服务器,多线程并发。
- 视频监控内核新增MPV内核,修正了其他内核的部分函数和处理。
- 海康内核进行大改动,同时支持视频流和本地MP4文件播放,自动分析切换。
- 海康内核增加回调处理,可以拿到每一张图片。
- 海康内核进行了linux上的实验,可以正常播放。
- ffmpeg内核增加保存到MP4。
- 本地文件回放vlc部分增加进度切换等。
- 悬浮条关闭按钮增加实际处理,之前只是打印消息。
- 改进了vlc和mpv的事件回调机制,使其同时支持qt4+qt5。
V20200620
- 增加了opengl显示实时视频,CPU占用极低。
- 增加了地图上设备点位置的调整。
- 设备点双击弹出实时视频预览。
- 增加GPS运动轨迹显示。
- ffmpeg解码类增加了音频播放,采用的QAudioOutput。
V20191105
- 增加云台控制功能,可以上下左右等八个方位控制云台,默认采用相对移动,云台中间按下表示复位。
- 系统设置增加码流类型选择,默认子码流,切换完自动应用。
- 云台控制增加速度功能,值越大,速度越快。
- 增加焦距控制,可放大缩小,速度也可控制。
1 用户登录退出
1.1 用户登录
系统默认开启了自动登录,可以在系统设置中将自动登录按钮关闭即可,可以在用户登录界面勾选记住密码和自动登录复选框,如果勾选了记住密码,则下次弹出的登录窗体会自动把最后一次的密码填进去,如果勾选了自动登录,则直接以上一次的用户登录到系统。
1.2 用户退出
如果开启了自动登录机制,在单击右上角的关闭按钮,会弹出用户退出窗体,需要输入密码才能退出,也可以在代码中屏蔽掉自动登录的判断,这样任何时候关闭系统都会弹出窗体要求输入密码来退出。用户登录和退出内置了超级密码 a ,在记不住密码或者密码丢失的时候使用。
2 主界面操作
@@ -701,7 +701,7 @@ header, .context-menu, .megamenu-content, footer{
本系统云台控制走的是onvif协议,没有使用私有协议,上百家厂家的摄像机,走私有协议会玩死人的,所以统一采用onvif通用协议,需要提前在系统设置中的摄像机管理,搜索摄像机,输入正确的onvif用户信息后一键获取到云台地址。
2.11 设备控制
设备控制部分,目前可以获取和设置图片参数、手动校时、重启设备等,上面那一堆复选框对应功能需要用厂家sdk去实现,后期可能会增加一些onvif能够处理的功能。和云台控制操作一样,操作前也是需要选中某个通道,然后才是对选中的通道进行设备控制,比如图片参数中的明亮度、对比度、饱和度。
2.12 报警订阅
本系统默认支持海康摄像机的报警事件订阅,默认已经订阅,如果摄像机已经开启了报警事件的话,默认一般是关闭的,比如摄像机后面的开关量输入报警接口,需要web页面进去设置开启。报警订阅走的是onvif协议,默认测试过海康的摄像机,其余摄像机有些没有测试成功,后期会详细查下原因并改进,会持续更新完善。
2.13 悬浮条操作
本系统中将视频显示这块都封装成了一个控件,每个视频控件都有自己独立的悬浮条,悬浮条的位置可以自行修改两三行代码调整,默认悬浮条在顶部,自动拉伸填充显示,你也可以改成左侧右侧等位置显示,高度可调。悬浮条是一排按钮组成,具体按钮什么名称标识符和功能,可以自定义,控件的封装只是默认放了一排按钮,除了关闭按钮实现了功能外,其余都是信号的形式发出去的,具体操作由程序员本身根据不同的厂家来定义不同的功能。
2.14 标签设置
-视频控件已经将OSD标签封装好了,默认提供两路OSD设置,每个OSD都可以设置是否启用、位置、文字内容、文字颜色、图片、文字大小等,这些设置都提供了友好的接口设置。
在frmvideopanel.cpp文件中有设置示例,默认注释的,参数含义如下:
- 设置标签可见:setOSD1Visible
- 设置文字大小:setOSD1FontSize
- 设置文本文字:setOSD1Text
- 设置文字颜色:setOSD1Color
- 设置标签格式:setOSD1Format
- 设置标签位置:setOSD1Position
3 视频回放
视频回放中有多个子模块,分别是不同的含义:
- 本地回放:回放存储在本地电脑的视频文件。
- 远程回放:通过sdk方式回放NVR上的存储录像(暂未实现,每个厂家不一样)。
- 设备播放:通用的rtsp取流形式的播放实时视频和回放录像文件。
- 图片回放:查找对应文件夹下的所有通道图片,按照设定的间隔回复,类似视频效果,一般用在存储一堆图片序列的应用场景中。
- 视频上传:将查询的本地存储的视频文件上传到云端服务器。类似于将视频文件存储到服务器上,需要手动填写服务器地址和端口。
3.1 本地回放
3.1.1 视频查询
+视频控件已经将OSD标签封装好了,默认提供两路OSD设置,每个OSD都可以设置是否启用、位置、文字内容、文字颜色、图片、文字大小等,这些设置都提供了友好的接口设置。
在frmvideopanel.cpp文件中有设置示例,默认注释的,参数含义如下:
- 设置标签可见:setOSD1Visible
- 设置文字大小:setOSD1FontSize
- 设置文本文字:setOSD1Text
- 设置文字颜色:setOSD1Color
- 设置标签格式:setOSD1Format
- 设置标签位置:setOSD1Position
3 视频回放
视频回放中有多个子模块,分别是不同的含义:
- 本地回放:回放存储在本地电脑的视频文件。
- 远程回放:通过sdk方式回放NVR上的存储录像(暂未实现,每个厂家不一样)。
- 设备播放:通用的rtsp取流形式的播放实时视频和回放录像文件。
- 图片回放:查找对应文件夹下的所有通道图片,按照设定的间隔回复,类似视频效果,一般用在存储一堆图片序列的应用场景中。
- 视频上传:将查询的本地存储的视频文件上传到云端服务器。类似于将视频文件存储到服务器上,需要手动填写服务器地址和端口。
3.1 本地回放
3.1.1 视频查询
本地回放模块主要用来回放存储在本地电脑上的视频,先从右侧选择要回放的通道,默认是所有通道,然后选择类型:存储视频还是报警视频,默认选择存储视频(目前也只有存储的视频,没有报警视频,报警视频的规则还没定好,一般都是买过去自己定义),然后选择要查询的开始时间和结束时间,单击查询按钮,会自动列出来,双击对应的视频文件名称就会播放,除了查询按钮,其余按钮均没有实现具体功能。
3.1.2 存储规则
- 默认存储主目录 video_normal
- 主目录下按照日期目录存放 比如 2021-04-07 2021-04-08
- 日期目录下是单个的视频文件 比如 Ch1_2021-04-07-14-08-11.mp4。
- 拓展功能可以存储对应的数据文件比如经纬度数据和视频文件一个目录 名称一样 拓展名可以是 txt
3.1.3 视频下载
视频下载是将查询出来的视频文件,按照勾选了的文件保存到选择的目录中。
3.2 远程回放
远程回放模块是用来通过sdk的形式回放远程NVR设备上的录像文件,这个暂未实现,本系统主要是为了兼容性和通用性,通过具体sdk形式调用的处理都没有做,破坏了移植性,到了其他平台就没法使用了,本系统sdk使用这块默认用的海康sdk作为示例。
3.3 设备播放
设备播放模块主要是通过rtsp视频流的形式来拉取实时视频和回放视频,现在越来越多的NVR支持直接通过取流的形式来拉取实时视频流和回放视频,这样使用起来很方便,当然在拉取视频流的时候要传入用户信息,防止非法获取,现在越来越多的应用场景需要通过NVR来调取回放视频,传统的SDK的方式非常累厂家太多,而国标的形式太繁琐复杂,于是rtsp形式的最简单的方式应运而生,目前支持的厂家也越来越多,每个厂家格式的规则不一样,可以自行咨询厂家的规则,本程序默认实现了海康、大华和深广的规则。
3.4 图片回放
3.4.1 图片查询
@@ -756,8 +756,12 @@ header, .context-menu, .megamenu-content, footer{
设备列表通过读取录像机信息(生成父节点,相当于区域,录像机信息本身在整个系统中目前就一个作为设备列表的区域信息功能,用户可以自行拓展作为其他用途。)、摄像机信息,自动生成设备列表,每个摄像机都对应一个主码流和子码流,支持各种视频流、本地视频文件、USB摄像机等。
9.2 窗口信息
窗口信息负责显示一些打印信息,比如串口是否打开成功,摄像机是否异常,各种报警日志等,可以在系统设置中设置不同的文字颜色,窗口信息的信息条数自动计算应用,保证最大可能的适应高度。
9.3 图文警情
图文警情模块负责以图文的形式显示对应的警情或者提示信息,有时间、内容、图片,双击对应图片可以放大查看具体图片,为了方便演示如何使用,在此模块增加了右键菜单,可以添加消息、删除消息、清空消息。
9.4 云台控制
-云台控制模块,可以对选中的通道的摄像机(ONVIF协议),进行云台控制,可以控制球机的上下左右等各个方位的移动,还可以调节变倍步长,至于变焦和光圈,目前onvif协议中没看到对应的协议支持,没有实现。
9.5 设备控制
-设备控制模块,可以对选中的通道的摄像机(ONVIF协议),进行获取参数、设置参数、手动校时、重启设备操作,可以对摄像机的明亮度、对比度、饱和度进行设置。
9.6 预置位置
目前空的,后期增加中。
9.7 巡航设置
目前空的,后期增加中。
9.8 悬浮地图
悬浮地图子模块,使用的百度地图,支持在线和离线,用于显示对于设备的位置,支持鼠标直接拖动和缩放。
+云台控制模块,可以对选中的通道的摄像机(ONVIF协议),进行云台控制,可以控制球机的上下左右等各个方位的移动,还可以调节变倍步长,至于变焦和光圈,目前onvif协议中没看到对应的协议支持,没有实现。
+云台移动总共有3种策略:绝对移动、相对移动、连续移动,本系统都支持三种策略,默认采用的连续移动,这也是大部分应用场景需要的,按下对应的方位进行移动,松开立即停止移动,非常人性化。
9.5 设备控制
+设备控制模块,可以对选中的通道的摄像机(ONVIF协议),进行获取参数、设置参数、手动校时、重启设备、抓拍图片、模拟报警等操作,可以对摄像机的明亮度、对比度、饱和度进行设置。后期还可能不断增加新的功能。
9.6 预置位置
+预置位功能,只对带有预置位的球机才起作用,有云台的球机未必有预置位,要仔细查看清楚,不清楚可以询问厂家或者查阅手册,在本模块中,可以获取预置位、添加预置位、调用预置位、删除预置位、调用起始位、设置起始位、开始巡航、停止巡航等。
+获取预置位以后,会将获取到的预置位集合(一般有255个甚至更多)显示到列表中,前面是编号token,后面是预置位的别名name,别名可以是中文的,可以通过添加预置位的时候设置中文的名称。添加、调用、删除预置位之前要先从预置位列表中选中一个预置位。
+自动巡航目前采用的策略是通过勾选查询回来的预置位信息,勾选,然后定时器每隔一段时间调用一次对应的预置位来实现,每次正在执行哪个预置位会在列表中自动选中该预置位,后期如果有更好的处理方法会自动更新改进代码。
9.7 巡航设置
目前放在预置位中,后期可能会有改动。
9.8 悬浮地图
悬浮地图子模块,使用的百度地图,支持在线和离线,用于显示对于设备的位置,支持鼠标直接拖动和缩放。
具体和飞行轨迹模块类似。
9.9 飞行轨迹
专为无人机打造的模块,也可以作为机器人移动模块,通过传入一个经纬度值,实时更新设备的位置和绘制轨迹,模块已经内置了接口进行处理,支持不同设备不同的轨迹颜色(这个功能好)。
9.10 飞行监控
目前放置的是6个飞行套装控件,默认定时器模拟数据,可以自行传入真实的数据会自动显示值。
9.11 数据调试