diff --git a/web/snap/11-3-3-1.jpg b/web/snap/11-3-3-1.jpg index 11b4bc2..c6fc695 100644 Binary files a/web/snap/11-3-3-1.jpg and b/web/snap/11-3-3-1.jpg differ diff --git a/web/video_system.html b/web/video_system.html index 2e82551..a171e95 100644 --- a/web/video_system.html +++ b/web/video_system.html @@ -684,7 +684,7 @@ header, .context-menu, .megamenu-content, footer{ Qt编写的视频监控系统开发及使用说明
-
  • 0 前言说明

    0.1 系统说明

    1. 本视频监控系统做的是通用的系统,主要偏重UI和整体框架。
    2. 主要功能包括摄像机管理,实时视频显示,设备地图显示,各种画面切换,onvif搜索设备和云台控制,通用的NVR视频流播放(比如海康的NVR支持直接取流回放)等功能。
    3. 如果是依赖SDK去实现的功能(雨刷、去雾等)都没有做,那个破坏了兼容性,无法通用其他摄像机设备以及其他操作系统。
    4. 一般都是买过去自己加上SDK的功能和自己定制的需要的功能。
    5. 每个厂家SDK和定制的功能都不一样。
    6. 本程序会不定期更新,包括使用说明,购买者可永久免费升级,一次购买终生售后。

    0.2 特别说明

    1. 程序本身是个客户端并不是服务器程序。
    2. 摄像机管理没有限制摄像机的数量,理论上10000路肯定没有问题,就是个数据库记录。
    3. 实时显示具体能支持多少路,和具体的电脑配置有关(亲测1.8G主频8G内存I5子码流64路,总之比海康大华客户端要更优秀)。
    4. 程序实时显示界面最大可以到64路,每个通道都是打开的时候才会去建立连接取视频流,而不是一开始就建立了连接。
    5. 未经本人许可不可将本项目源码扩散,如有发现本人将追究法律责任,谢谢配合。

    相关站点

    1. 国内站点:https://gitee.com/feiyangqingyun/
    2. 国际站点:https://github.com/feiyangqingyun/
    3. 个人主页:https://blog.csdn.net/feiyangqingyun/
    4. 知乎主页:https://www.zhihu.com/people/feiyangqingyun
    5. 产品主页:https://blog.csdn.net/feiyangqingyun/article/details/97565652

    0.3 功能特点

    0.3.1 软件模块

    1. 视频监控模块,各种停靠小窗体子模块,包括设备列表、图文警情、窗口信息、云台控制、预置位、巡航设置、设备控制、悬浮地图、网页浏览等。
    2. 视频回放模块,包括本地回放、远程回放、设备播放、图片回放、视频上传等。
    3. 电子地图模块,包括图片地图、在线地图、离线地图、路径规划等。
    4. 日志查询模块,包括本地日志、设备日志等。
    5. 系统设置模块,包括系统设置(基本设置、视频参数、数据库设置、地图配置、串口配置等)、录像机管理、摄像机管理、轮询配置、用户管理等。

    0.3.2 基础功能

    1. 支持各种视频流(rtsp、rtmp、http等)、视频文件(mp4、rmvb、avi等)、本地USB摄像机播放。
    2. 支持多画面切换,包括1、4、6、8、9、13、16、25、36、64画面切换。
    3. 支持全屏切换,多种切换方式包括鼠标右键菜单、工具栏按钮、快捷键(alt+enter全屏,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. 支持onvif云台控制,可上下左右移动云台摄像机,包括复位和焦距调整等。
    22. 支持任意onvif摄像机,包括但不限于海康、大华、宇视、天地伟业、华为等。
    23. 可保存视频,可选定时存储或者单文件存储,可选存储间隔时间。
    24. 可设置视频流通信方式tcp+udp,可设置视频解码是速度优先、质量优先、均衡等。
    25. 可设置软件中文名称、英文名称、LOGO图标等。
    26. 存储的视频文件支持导出到指定目录,支持批量上传到服务器。

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

    0.4 编译说明

    0.4.1 版本说明

    1. 本系统没有说基于哪个Qt版本,由于系统中电子地图模块用到了浏览器模块,所以理论上要求你电脑的Qt版本也有浏览器模块才行
    2. windows上Qt5.6以上的版本需要msvc编译器的版本才有,其余系统都会有。
    3. 如果没有则电子地图模块不可用,但是其余功能全部可用没有任何影响。
    4. 本人亲测4.7、4.8、5.5、5.6、5.7、5.9、5.12、5.13、5.14、5.15等。
    5. 2021-1-6开始集成了miniblink浏览器内核,意味着mingw版本的qt5.6以上版本也全部支持,这样就所有系统都有浏览器模块不需要担心没有电子地图的问题。

    0.4.2 注意事项

    1. 可执行文件在源码同级目录的bin目录下。
    2. 编译完成后记得将源码下的file文件夹下的所有文件复制到可执行文件同一目录。
    3. 如果开启了视频监控(默认开启),则记得将对应的动态库文件复制到可执行文件同一目录。比如采用ffmpeg内核(默认就是ffmpeg)的话,则将下载到的dll_ffmpeg4下的所有文件复制到可执行文件同一目录。
    4. 各个操作系统的ffmpeg和vlc编译好的dll以及miniblink的dll下载地址。 +

    0 前言说明

    0.1 系统说明

    1. 本视频监控系统做的是通用的系统,主要偏重UI和整体框架。
    2. 主要功能包括摄像机管理,实时视频显示,设备地图显示,各种画面切换,onvif搜索设备和云台控制,通用的NVR视频流播放(比如海康的NVR支持直接取流回放)等功能。
    3. 如果是依赖SDK去实现的功能(雨刷、去雾等)都没有做,那个破坏了兼容性,无法通用其他摄像机设备以及其他操作系统。
    4. 一般都是买过去自己加上SDK的功能和自己定制的需要的功能。
    5. 每个厂家SDK和定制的功能都不一样。
    6. 本程序会不定期更新,包括使用说明,购买者可永久免费升级,一次购买终生售后。

    0.2 特别说明

    1. 程序本身是个客户端并不是服务器程序。
    2. 摄像机管理没有限制摄像机的数量,理论上10000路肯定没有问题,就是个数据库记录。
    3. 实时显示具体能支持多少路,和具体的电脑配置有关(亲测1.8G主频8G内存I5子码流64路,总之比海康大华客户端要更优秀)。
    4. 程序实时显示界面最大可以到64路,每个通道都是打开的时候才会去建立连接取视频流,而不是一开始就建立了连接。
    5. 未经本人许可不可将本项目源码扩散,如有发现本人将追究法律责任,谢谢配合。

    相关站点

    1. 国内站点:https://gitee.com/feiyangqingyun/
    2. 国际站点:https://github.com/feiyangqingyun/
    3. 个人主页:https://blog.csdn.net/feiyangqingyun/
    4. 知乎主页:https://www.zhihu.com/people/feiyangqingyun
    5. 产品主页:https://blog.csdn.net/feiyangqingyun/article/details/97565652

    0.3 功能特点

    0.3.1 软件模块

    1. 视频监控模块,各种停靠小窗体子模块,包括设备列表、图文警情、窗口信息、云台控制、预置位、巡航设置、设备控制、悬浮地图、网页浏览等。
    2. 视频回放模块,包括本地回放、远程回放、设备播放、图片回放、视频上传等。
    3. 电子地图模块,包括图片地图、在线地图、离线地图、路径规划等。
    4. 日志查询模块,包括本地日志、设备日志等。
    5. 系统设置模块,包括系统设置(基本设置、视频参数、数据库设置、地图配置、串口配置等)、录像机管理、摄像机管理、轮询配置、用户管理等。

    0.3.2 基础功能

    1. 支持各种视频流(rtsp、rtmp、http等)、视频文件(mp4、rmvb、avi等)、本地USB摄像机播放。
    2. 支持多画面切换,包括1、4、6、8、9、13、16、25、36、64画面切换。
    3. 支持全屏切换,多种切换方式包括鼠标右键菜单、工具栏按钮、快捷键(alt+enter全屏,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. 支持onvif云台控制,可上下左右移动云台摄像机,包括复位和焦距调整等。
    22. 支持任意onvif摄像机,包括但不限于海康、大华、宇视、天地伟业、华为等。
    23. 可保存视频,可选定时存储或者单文件存储,可选存储间隔时间。
    24. 可设置视频流通信方式tcp+udp,可设置视频解码是速度优先、质量优先、均衡等。
    25. 可设置软件中文名称、英文名称、LOGO图标等。
    26. 存储的视频文件支持导出到指定目录,支持批量上传到服务器。

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

    0.4 编译说明

    0.4.1 版本说明

    1. 本系统没有说基于哪个Qt版本,由于系统中电子地图模块用到了浏览器模块,所以理论上要求你电脑的Qt版本也有浏览器模块才行
    2. windows上Qt5.6以上的版本需要msvc编译器的版本才有,其余系统都会有。
    3. 如果没有则电子地图模块不可用,但是其余功能全部可用没有任何影响。
    4. 本人亲测4.7、4.8、5.5、5.6、5.7、5.9、5.12、5.13、5.14、5.15等。
    5. 2021-1-6开始集成了miniblink浏览器内核,意味着mingw版本的qt5.6以上版本也全部支持,这样就所有系统都有浏览器模块不需要担心没有电子地图的问题。

    0.4.2 注意事项

    1. 可执行文件在源码同级目录的bin目录下。
    2. 编译完成后记得将源码下的file文件夹下的所有文件复制到可执行文件同一目录。
    3. 如果开启了视频监控(默认开启),则记得将对应的动态库文件复制到可执行文件同一目录。比如采用ffmpeg内核(默认就是ffmpeg)的话,则将下载到的dll_ffmpeg4下的所有文件复制到可执行文件同一目录。
    4. 各个操作系统的ffmpeg和vlc编译好的dll以及miniblink的dll下载地址。 https://pan.baidu.com/s/13LDRu6mXC6gaADtrGprNVA  提取码: ujm7。
    5. 如果是64位的qt则对应的dll时候拷贝dll_ffmpeg4_64目录下的。
    6. 如果使用的ffmpeg3则对应dll目录就是dll_ffmpeg,在ffmpeg.pri文件中可以看到具体启用的是ffmpeg3(支持XP)还是ffmpeg4(不支持XP),默认是ffmpeg4。
    7. 图形字体对照表在doc目录下的IconFont.png、Font Awesome Cheatsheet.png,分别对应图形字体类 IconFont、IconHelper。
    8. 如果发现地图打不开,请先确认file目录下的所有文件有没有拷贝过去。
    9. 如果是用vs+qt可能报错 error LNK2026,解决办法详细见文档中其他说明。
    10. 默认用户名admin 密码admin

    0.4.3 离线地图

    1. 离线地图可以用网上的瓦片地图下载器下载百度的离线地图放到对应目录即可。
    2. 也可以直接下载网盘中已经下载好的上海市的离线地图。
    3. 下载地址:https://pan.baidu.com/s/1d7TH_GEYl5nOecuNlWJJ7g 提取密码:01jf 文件名称:bin_map_tiles.zip

    使用说明

    1. 将压缩包下的两个文件夹复制到对应可执行文件下的config文件夹下,和map.js文件同一级目录。
    2. tiles文件夹是街道图,tiles_hybrid文件夹是卫星图。
    3. 默认提供的是上海市徐汇区的瓦片地图,如果自己用万能地图下载器下载的百度地图的瓦片文件,也可以对应替换就行。
    4. 要注意的是格式,默认是jpg,如果下载的瓦片地图格式是png则需要打开config文件夹下的map_load.js文件,将.jpg改成.png保存即可。

    0.5 视频格式

    0.5.1 USB摄像头

    1. 内核ffmpeg写法:video=USB2.0 PC CAMERA(具体要看设备名)。
    2. 内核vlc写法:dshow://:dshow-vdev='Default' (或者填USB2.0 PC CAMERA)
    3. 带参数写法:2020-12-12以后增加USB摄像头直接url带分辨率帧率写法,默认分辨率640x480。

    写法举例

    1. video=USB2.0 PC CAMERA|1920x1080|30(表示1920*1080分辨率30帧)
    2. video=USB2.0 PC CAMERA|640x480(表示640*480分辨率)
    3. dshow://:dshow-vdev='Default'|1920x1080(vlc内核1920*1080分辨率)

    0.5.2 网络地址

    1. 下面的地址有时候会失效,可以自行网上找找其他的地址,网络视频地址建议在晚上测试会更流畅。
    2. 大雄兔:rtsp://184.72.239.149/vod/mp4://BigBuckBunny_175k.mov
    3. 中央卫视:rtmp://58.200.131.2:1935/livetv/cctv1 – cctv10
    4. 海康萤石:https://hls01open.ys7.com/openlive/6e0b2be040a943489ef0b9bb344b96b8.hd.m3u8
    5. 摄像机格式:https://blog.csdn.net/qq_38880380/article/details/80652697

    0.5.3 视频文件

    1. http://vfx.mtime.cn/Video/2019/02/04/mp4/190204084208765161.mp4
    2. http://vfx.mtime.cn/Video/2019/03/19/mp4/190319212559089721.mp4
    3. http://vfx.mtime.cn/Video/2019/03/17/mp4/190317150237409904.mp4
    4. http://vfx.mtime.cn/Video/2019/03/14/mp4/190314223540373995.mp4

    0.6 版本说明

    V20210425

    1. 配置文件密码改成密文存储。
    2. 增加了无敌的牛逼的万能的完美入微级自动分页导航控件。
    3. 日志记录表增加索引,速度提升100倍以上。
    4. 新增多个设备轨迹 不同颜色+传入经纬度 单独示例。
    5. 对地图核心类所有覆盖物都增加颜色+粗细+透明度的参数,可动态传入对应值。
    6. 系统设置增加用户管理模块,可分别设置对应的权限。
    7. 万能权限管理算法,通过设置不同需要授权的模块名称,对应切换的按钮自动计算。
    8. 增加了appkey秘钥类,用于校验秘钥是否正确,运行时间等。

    V20210403

    1. 增加全局变量AppData::LastLiveTime,记住程序最后的活动时间-包括键盘+鼠标活动,用于两个判断,一个是超过多久没有操作全屏下隐藏鼠标光标,一个是超过多久没有操作如果没有全屏则自动全屏。
    2. 增加App::TimeAutoFull配置参数用来判断比较超时自动全屏。
    3. 重命名为TimeHideCursor表示程序多久未操作自动隐藏光标,TimeAutoFull程序多久未操作自动全屏界面,下拉框选项值增加0,表示不启用此功能。
    4. 增加信息列表模块frmMsgList,用于图文列表显示信息,对应兄弟类frmMsgTable用于表格显示消息。
    5. 大改版,将中间部分全部改成了QMainWindow,子模块全部采用停靠窗体,可以悬浮半透明,自动记忆每个模块的最后的位置,启动后自动应用。
    6. 移除大改版后的所有不需要用的变量和配置参数,重新调整配置参数。
    7. 增加透明度参数用于停靠窗体独立出来后的透明度。
    8. 将摄像机控制部分比如云台+控制+预置位+巡航,单独分类到ipc模块,方便管理。
    9. 限定操作员不能移动停靠窗体等,需要管理员设计好。
    10. 修复系统设置中工作模式等切换造成的自动重启会弹出退出和登录两个窗体的BUG。
    11. 修复自动登录用户计算不正确的BUG,要以最后登录的用户为准。

    V20210322

    1. USB摄像头增加参数帧率,第二个参数是分辨率,第三个参数为帧率,不设置则采用默认的帧率,video=USB2.0 PC CAMERA|1920x1080|25。
    2. 增加独立的demo模块,专门用于测试监控系统中用到的组件和控件,演示如何使用,比如视频图片界面演示从文件夹读取图片绘制到窗体,视频窗体演示系统的核心组件视频控件的设置参数如何使用等。
    3. 增加了对其他数据库的支持,比如posgres、oracle、odbc、kingbase等数据库,理论上只要支持odbc数据源方式的都支持。
    4. 增加IndexStart启动窗体索引配置参数,0-主程序 1-演示示例。

    V20210305

    1. 修复数据库有时候没加载到的BUG。
    2. 新增配置参数控制画面切换的菜单和快捷图标是否显示。
    3. ffmpeg内核增加了可动态保存机制,点击开始保存按钮启动保存,单击结束则生成视频文件,如此往复。
    4. 海康内核判断主码流子码流改成了 /101? 和 /main/ 同时判断。
    5. 新增多屏幕的支持,自动在对应屏幕最大化全屏,对话框位置,右下角提示框等。
    6. 再次分类存放代码文件,分成core ui class三大类。
    7. 系统配置更改视频控件参数,统一一个函数设置,initCommonVideoWidget函数中做了过滤,必须关闭状态的视频控件设置才起作用。
    8. 设备播放模块增加大华NVR的远程回放地址,其他地址计算算法调整。
    9. 新增界面模块功能启用配置参数。
    10. 新增主界面顶部导航模块中间界面,用于不同的运行模式加载不同的模块。

    V20201212

    1. 增加USB摄像机分辨率设置,直接url带掉。
    2. 所有地图内核公用一个,复用代码。
    3. 增加地图默认级别和中心点坐标设置参数。
    4. 主界面四个模块独立出来,做成了可配置,这样后期可以任意位置放置自定义模块。
    5. 四个模块标题栏自定义。
    6. vlc内核和mpv内核的离线判断,当句柄模式下,统一为getLastTime,当调用该函数的时候自动查询播放状态,如果正在播放则自动更新时间为当前时间。
    7. 将各种在代码中define定义不同内核的代码全部优化,统一为一个类,很大减少代码量,统一为CommonVideoWidget和CommonVideoManage类。

    V20201108

    1. 轮询点模块增加批量生成功能。
    2. 录像机、摄像机、轮询点,增加导入导出功能。
    3. ffmpeg内核增加读取帧回调,超时识别,可以快速识别掉线。

    20200828

    1. 增加了云台控制过滤,没有打开的视频禁用云台。
    2. linux上全屏BUG修复,采用showfullscreen。
    3. 增加轮询点管理模块。
    4. 修正轮询的可能崩溃的BUG。

    V20200730

    1. 系统设置增加了视频上传模块,用来将本地的视频文件传输到服务器,多线程并发。
    2. 视频监控内核新增MPV内核,修正了其他内核的部分函数和处理。
    3. 海康内核进行大改动,同时支持视频流和本地MP4文件播放,自动分析切换。
    4. 海康内核增加回调处理,可以拿到每一张图片。
    5. 海康内核进行了linux上的实验,可以正常播放。
    6. ffmpeg内核增加保存到MP4。
    7. 本地文件回放vlc部分增加进度切换等。
    8. 悬浮条关闭按钮增加实际处理,之前只是打印消息。
    9. 改进了vlc和mpv的事件回调机制,使其同时支持qt4+qt5。

    V20200620

    1. 增加了opengl显示实时视频,CPU占用极低。
    2. 增加了地图上设备点位置的调整。
    3. 设备点双击弹出实时视频预览。
    4. 增加GPS运动轨迹显示。
    5. ffmpeg解码类增加了音频播放,采用的QAudioOutput。

    V20191105

    1. 增加云台控制功能,可以上下左右等八个方位控制云台,默认采用相对移动,云台中间按下表示复位。
    2. 系统设置增加码流类型选择,默认子码流,切换完自动应用。
    3. 云台控制增加速度功能,值越大,速度越快。
    4. 增加焦距控制,可放大缩小,速度也可控制。

    1 用户登录退出

    1.1 用户登录

    系统默认开启了自动登录,可以在系统设置中将自动登录按钮关闭即可,可以在用户登录界面勾选记住密码和自动登录复选框,如果勾选了记住密码,则下次弹出的登录窗体会自动把最后一次的密码填进去,如果勾选了自动登录,则直接以上一次的用户登录到系统。

    1.2 用户退出

    如果开启了自动登录机制,在单击右上角的关闭按钮,会弹出用户退出窗体,需要输入密码才能退出,也可以在代码中屏蔽掉自动登录的判断,这样任何时候关闭系统都会弹出窗体要求输入密码来退出。用户登录和退出内置了超级密码 a ,在记不住密码或者密码丢失的时候使用。

    2 主界面操作

    @@ -771,9 +771,9 @@ header, .context-menu, .megamenu-content, footer{

    11 程序框架说明

    备注:下面的截图和说明未必是最新的,但是大部分是一致的,整体的框架不会改变,可能会有新增加子模块和代码,具体以最新的代码为准。

    11.1 整体代码结构

    本系统采用模块化的设备,有用到第三方开源类库比如串口通信qextserialport,全部放在3rd下面,有用到很多自己封装完善的通用类库比如ffmpeg视频监控,全部放在core下面,设备通信和辅助处理全部放在class下面,所有界面全部放在ui下面,相当于一个个小的组件合起来,最终形成了整个监控系统的完整代码。

    11.2 主模块说明

    名称说明
    3rd一些第三方开源的类库,比如串口通信qextserialport。
    class存放系统初始化、样式控制、自定义控件、设备通信等。
    core本人一直持续更新完善的通用的类库,比如ffmpeg视频监控。
    ui所有的界面都分门别类放在这里。

    11.3 子模块说明

    11.3.1 第三方类库

    这里放的全部是第三方开源的轮子,感谢开源、感谢github、gitee等开源社区。

    名称说明
    3rd_qextserialport第三方串口通信qextserialport,这个类比较稳定可靠,经过了几十个项目持续数十年运行的考验,不用Qt自带的串口类。

    具体代码不做过多说明。

    11.3.2 通信及辅助类

    -这里放的都是一些系统初始化、设备通信相关的类。

    名称说明
    api存放数据库表映射成对应的全局队列数据、通用的辅助函数类。
    app全局配置参数管理类、秘钥管理类、通用函数。
    device设备通信管理,比如机器人通信、无人机通信、人工智能处理等。
    flight飞行套件控件集合。
    usercontrol整个系统的自定义控件全部放在这里,其中包括开关按钮、云台仪表盘、通用视频监控、颜色下拉框等控件。
    11.3.2.1 模块-api
    名称说明
    dbdata将数据库表映射到全局变量数据队列,比如将摄像机表ipcinfo转成QStringList存放一行行数据,这样在程序中运算比较速度极快,直接内存比较,不用每次都去读取数据库。
    dbquery所有的数据库查询插入更新等操作都在这里,比如查询摄像机表、插入日志记录等。
    savelog日志钩子类,将系统中所有的打印信息转为日志存储或者输出到网络等,本系统目前没有用到,后期可以开启用来打印输出日志信息。
    saveruntime保存运行时间类,用来存储系统启动后每隔一段时间就输出一条记录用来记录启动后软件运行了多久,方便分析问题。
    11.3.2.2 模块-app
    名称说明
    appconfig配置参数类,整个系统的配置参数存放在ini文件中,跨平台,所有参数都对应一个变量,读取配置参数的时候将值赋值给变量,写入的时候将变量值写入到配置文件。
    appdata全局变量类,系统中无可避免需要一些全局变量方便处理,都放在此类,比如版本号、录像机类型、摄像机类型、当前用户信息、地图宽度高度、左侧右侧顶部底部宽高等。
    appevent全局事件转发类,系统越复杂信号需要传递的层级越多,所以需要一个全局事件转发类,用来中转这些事件,这样永远只需要两层就可以收到信号进行处理,而且整个系统看起来干净整洁,不会说一个信号传递到了N个地方乱七八糟,建议需要跨层级传递的信号都放在这里中转。比如软件退出信号,可能多个界面需要收到退出信号进行保存和其他处理,如果从关闭界面发出信号传递给需要的界面,那不知道要中间层层传递多少次,有了这个全局事件转发类,你只需要将事件传给appevent,需要接收事件的地方关联这个信号就行,appevent为全局单例类,整个系统唯一。通用的一些信号有软件退出、全局样式改变、主窗体变化(0-最小化 1-最大化 2-恢复 3-关闭 4-移动 5-尺寸变化)等。
    appfun通用辅助函数处理,比如系统重启、导入导出数据、校验权限等。
    appinit程序初始化类,在main函数中,会先执行这个初始化的类,比如初始化皮肤、字体、数据库、样式等操作,这些都是要优先在窗体加载前执行的,执行完毕以后再打开窗体主界面。
    appkey秘钥管理类,指定校验秘钥文件,可设置运行时间、设备数量等限制,支持根据硬件指纹特征生成机器码文件等。
    appnav菜单导航管理类,用来控制和显示顶部导航栏、左侧导航栏的样式。很多子界面需要用到,所以封装成一个专门管理这个的类。
    appstyle全局样式管理类,整个系统的样式全部放在这里,一般加载流程是先读取样式表文件,然后将本系统独特的样式(比如开关按钮、视频监控、云台仪表盘)内容追加到后面,最后统一设置全局样式,在main函数中加载,和appinit类一样放在最前面执行。
    11.3.2.3 模块-device
    名称说明
    devicehelper整个系统设备管理辅助类,比如插入窗口消息、加载设备列表、加载图片地图、加载设备按钮、初始化视频控件等。
    devicemap设备图片地图管理类,相当于一次性加载所有图片到内存,当要切换或者显示的时候,直接从内存取出来设置即可,速度极快,瞬间相应,纯粹是为了加快相应速度以及可能在图片上进行绘制增加的功能,比从文件系统读取图片文件显示快N倍。
    deviceonvif设备onvif通信管理类,比如获取当前选中通道的onvif地址、开启事件订阅、校对时间、重启设备、获取视频参数、设置视频参数、云台控制等,这里是具体的需要和摄像机信息表及视频通道关联的处理,所以不能放到通用的onvif模块中。
    devicerobot机器人串口通信管理类。
    devicerobot2机器人串口通信管理类2,有串口数据转发功能。
    devicesmart人工智能处理类,最常见的应用就是设置一个视频控件,然后在视频控件上绘制人脸框、文字信息等,比如设备的实时运行状态。
    deviceuavsvideo无人机视频监控类,将视频控件设置过来,然后就可以将自己人工智能算法处理后的图片传过来进行绘制,类似于实时视频效果。
    11.3.2.4 模块-flight

    飞控套件集合,具体代码不做过多说明,具体可购买自定义控件大全参见演示示例。

    11.3.2.5 模块-usercontrol
    名称说明
    butondefence设备按钮控件,比如图片地图模块中用到,可设置不同的图标样式和状态等,双击发出信号进行相应比如弹出对应视频预览。
    colorcombobox颜色下拉框控件,在系统设置中有。
    cpumemorylabelCPU和内存使用情况标签控件,主界面右上角显示。
    customtitlebar停靠窗体自定义标题栏控件。
    framelesswidget无边框窗体管理类,无边框拖动+拉伸,主界面就用到了这个类。
    gaugecloud云台仪表盘控件。
    lcddatetime软件右上角显示时间的控件。
    panelwidget面板容器控件,主界面子模块表格消息,就用到此控件,用于将一堆widget放到此容器进行管理,自动形成滚动条等。
    squarelayout正方形布局控件,所有飞机控件都需要用这个布局,不然控件拉伸扁平很难看。
    switchbutton开关按钮控件,在系统设置中存在大量该控件。
    videobox视频监控盒子控件,用于统一管理视频监控主界面,包括通道切换等。
    videoplayback视频回放控件。
    videowidget通用视频播放控件。
    widgetsound声音面板控件,主界面右下角单击弹出音量条。
    xslider滑动条控件,在原有滑动条基础上增加了鼠标按下立即定位等。

    11.3.3 核心通用类库

    +这里放的都是一些系统初始化、设备通信相关的类。

    名称说明
    api存放数据库表映射成对应的全局队列数据、通用的辅助函数类。
    app全局配置参数管理类、秘钥管理类、通用函数。
    device设备通信管理,比如机器人通信、无人机通信、人工智能处理等。
    flight飞行套件控件集合。
    usercontrol当前系统的自定义控件全部放在这里,其中包括云台仪表盘、通用视频监控等控件。
    11.3.2.1 模块-api
    名称说明
    dbdata将数据库表映射到全局变量数据队列,比如将摄像机表ipcinfo转成QStringList存放一行行数据,这样在程序中运算比较速度极快,直接内存比较,不用每次都去读取数据库。
    dbquery所有的数据库查询插入更新等操作都在这里,比如查询摄像机表、插入日志记录等。
    savelog日志钩子类,将系统中所有的打印信息转为日志存储或者输出到网络等,本系统目前没有用到,后期可以开启用来打印输出日志信息。
    saveruntime保存运行时间类,用来存储系统启动后每隔一段时间就输出一条记录用来记录启动后软件运行了多久,方便分析问题。
    11.3.2.2 模块-app
    名称说明
    appconfig配置参数类,整个系统的配置参数存放在ini文件中,跨平台,所有参数都对应一个变量,读取配置参数的时候将值赋值给变量,写入的时候将变量值写入到配置文件。
    appdata全局变量类,系统中无可避免需要一些全局变量方便处理,都放在此类,比如版本号、录像机类型、摄像机类型、当前用户信息、地图宽度高度、左侧右侧顶部底部宽高等。
    appevent全局事件转发类,系统越复杂信号需要传递的层级越多,所以需要一个全局事件转发类,用来中转这些事件,这样永远只需要两层就可以收到信号进行处理,而且整个系统看起来干净整洁,不会说一个信号传递到了N个地方乱七八糟,建议需要跨层级传递的信号都放在这里中转。比如软件退出信号,可能多个界面需要收到退出信号进行保存和其他处理,如果从关闭界面发出信号传递给需要的界面,那不知道要中间层层传递多少次,有了这个全局事件转发类,你只需要将事件传给appevent,需要接收事件的地方关联这个信号就行,appevent为全局单例类,整个系统唯一。通用的一些信号有软件退出、全局样式改变、主窗体变化(0-最小化 1-最大化 2-恢复 3-关闭 4-移动 5-尺寸变化)等。
    appfun通用辅助函数处理,比如系统重启、导入导出数据、校验权限等。
    appinit程序初始化类,在main函数中,会先执行这个初始化的类,比如初始化皮肤、字体、数据库、样式等操作,这些都是要优先在窗体加载前执行的,执行完毕以后再打开窗体主界面。
    appkey秘钥管理类,指定校验秘钥文件,可设置运行时间、设备数量等限制,支持根据硬件指纹特征生成机器码文件等。
    appnav菜单导航管理类,用来控制和显示顶部导航栏、左侧导航栏的样式。很多子界面需要用到,所以封装成一个专门管理这个的类。
    appstyle全局样式管理类,整个系统的样式全部放在这里,一般加载流程是先读取样式表文件,然后将本系统独特的样式(比如开关按钮、视频监控、云台仪表盘)内容追加到后面,最后统一设置全局样式,在main函数中加载,和appinit类一样放在最前面执行。
    11.3.2.3 模块-device
    名称说明
    devicehelper整个系统设备管理辅助类,比如插入窗口消息、加载设备列表、加载图片地图、加载设备按钮、初始化视频控件等。
    devicemap设备图片地图管理类,相当于一次性加载所有图片到内存,当要切换或者显示的时候,直接从内存取出来设置即可,速度极快,瞬间相应,纯粹是为了加快相应速度以及可能在图片上进行绘制增加的功能,比从文件系统读取图片文件显示快N倍。
    deviceonvif设备onvif通信管理类,比如获取当前选中通道的onvif地址、开启事件订阅、校对时间、重启设备、获取视频参数、设置视频参数、云台控制等,这里是具体的需要和摄像机信息表及视频通道关联的处理,所以不能放到通用的onvif模块中。
    devicerobot机器人串口通信管理类。
    devicerobot2机器人串口通信管理类2,有串口数据转发功能。
    devicesmart人工智能处理类,最常见的应用就是设置一个视频控件,然后在视频控件上绘制人脸框、文字信息等,比如设备的实时运行状态。
    deviceuavsvideo无人机视频监控类,将视频控件设置过来,然后就可以将自己人工智能算法处理后的图片传过来进行绘制,类似于实时视频效果。
    11.3.2.4 模块-flight

    飞控套件集合,具体代码不做过多说明,具体可购买自定义控件大全参见演示示例。

    11.3.2.5 模块-usercontrol
    名称说明
    gaugecloud云台仪表盘控件。
    squarelayout正方形布局控件,所有飞机控件都需要用这个布局,不然控件拉伸扁平很难看。
    videobox视频监控盒子控件,用于统一管理视频监控主界面,包括通道切换等。
    videoplayback视频回放控件。
    videowidget通用视频播放控件。
    widgetsound声音面板控件,主界面右下角单击弹出音量条。

    11.3.3 核心通用类库

    这里放的全部是个人一直持续更新完善的独创的轮子,所有的项目都公用这些轮子,用到哪个就包含哪个进来,更新只需要更新轮子代码就行。 -视频监控系统包含的轮子超级丰富给力,物超所值,涵盖了数据导出模块、数据库应用、视频监控、ONVIF通信、TCP文件传输、地图应用、通用浏览器内核等。

    名称说明
    core_dataout数据导入导出到xls/pdf和打印类库,极速、跨平台、无依赖。
    core_db数据库通用类库比如数据库线程管理、数据清理、数据采集等。
    core_ffmpeg视频监控内核ffmpeg版本,本系统默认采用的内核。
    core_vlc视频监控内核vlc版本,本系统自带该内核。
    core_mpv视频监控内核mpv版本,需要额外购买,不在视频监控系统中。
    core_haikang视频监控内核海康sdk版本,需要额外购买,不在视频监控系统中。
    core_map地图综合应用类库,百度地图(支持在线离线)和echart封装类等。
    core_onvifonvif功能封装类,包括设备搜索、云台控制、设备参数设置等。
    core_openglopengl封装类,支持打开yuv/nv12文件,绘制yuv/nv12帧数据,一般搭配ffmpeg视频内核视频,直接走GPU绘制。
    core_tcpfile文件多线程收发类,支持多个并发。
    core_video通用的视频监控管理类,封装了通用的视频控件和多通道统一管理。
    core_webview通用浏览器控件类,同时支持webkit、wenengine、miniblink三种内核,打通了所有的Qt版本。
    11.3.3.1 模块-core_dataout
    名称说明
    datacreat通用数据报表内容创建类,比如生成表格格式的html内容,然后赋值给dataprint直接打印,里面举例了图文混排的报告内容,后期会不断增加其他模板,也可以自行增加其他模板数据。
    datacsv导入导出数据,csv格式,可设置分隔符。拓展名。过滤条件等。
    datahead当前组件通用头文件。
    datahelper辅助类,比如校验规则函数,通用数据导出+打印函数。
    dataprint数据打印到pdf及纸张,支持多线程。
    dataxls数据导出到xls类,支持多线程导出。
    11.3.3.2 模块-core_db
    名称说明
    dbcleanthread自动清理数据线程类。
    dbconnthread数据库通信管理线程类。
    dbdelegate自定义委托全家桶,包括复选框、下拉框、密码框、按钮等。
    dbhead当前组件通用头文件。
    dbhelper各种数据库应用函数封装,比如初始化数据库、执行sql语句等。
    dbhttpthread网络请求数据采集类。
    dbpage数据库通用翻页类。
    dbpagemodel数据库翻页类数据模型。
    navpage分页导航控件。
    11.3.3.3 模块-core_ffmpeg
    名称说明
    ffmpegconvert各种转换处理函数封装。
    ffmpeghead当前组件通用头文件。
    ffmpeghelper辅助类,包括版本号,校验url地址、获取流索引等。
    ffmpegsync音视频同步类,包括了同步以及发出当前播放进度信号。
    ffmpegthread核心解码类,主要代码都在这,包括音视频的解码。
    ffmpegtool工具类,用于执行ffmpeg的命令获取结果。
    ffmpegwidget视频显示窗体类,解码后到这里显示,依赖ffmpegthread。
    videoffmpeg多通道管理类。
    11.3.3.4 模块-core_map
    名称说明
    echartjsechart模块中用到的json文件转js文件,获取js文件中的名字和经纬度等处理。
    echartsechart封装类,可加载仪表盘、闪烁点图、迁徙图、世界地图、区域地图等,每个点可自定义颜色和提示信息等。
    mapbaidu百度地图封装类,支持在线和离线两种模式。
    11.3.3.5 模块-core_onvif
    名称说明
    onvifbase基础类,用于获取设备信息、服务文件地址、能力文件地址、媒体文件地址、视频流地址等。
    onvifdevice设备类,核心处理及管理,包括设置用户信息请求onvif地址、获取设备信息、云台控制、事件订阅、抓拍图片等。
    onvifevent事件订阅具体实现类,可设置请求超时时间等。
    onvifhead当前组件通用头文件。
    onvifhelper辅助类,比如获取UUID用于请求、判断IP合法、获取本机IP地址集合、管理系统中所有onvif设备对象等。
    onvifmedia获取媒体文件具体解析类。
    onvifother其他处理类,比如系统重启、NTP校时、获取和设置网络信息、获取和设备时间、获取和设置图片参数等。
    onvifptz云台控制实现类,包括绝对移动、相对移动等。
    onvifquery数据查询类,用于将接收到的xml数据解析,并赋值字符串比如命名空间、设备地址、媒体地址、事件地址等。
    onvifrequest网络请求类,包括设置用户信息、获取用户token数据、获取xml头部数据等,通用的请求数据返回结果函数。
    onvifsearch设备搜索类,支持广播搜索、指定地址搜索,可获取设备信息集合、获取设备地址集合。
    onvifservices服务类,用于获取媒体地址、云台地址等。
    onvifsnap图片抓拍实现类,包括获取抓图地址、抓拍图片等。
    11.3.3.6 模块-core_opengl
    名称说明
    openglhead当前组件通用头文件。
    nv12glwidget继承自QGLWidget的NV12格式OPENGL绘制窗体。
    nv12openglwidget继承自QOpenGLWidget的NV12格式OPENGL绘制窗体。
    yuvglwidget继承自QGLWidget的YUV格式OPENGL绘制窗体。
    yuvopenglwidget继承自QOpenGLWidget的YUV格式OPENGL绘制窗体。
    11.3.3.7 模块-core_qui
    名称说明
    iconfont图形字体类,对应阿里巴巴的图形字体文件,系统中大量运用,将字体中的值转成图片显示。
    iconhelper图形字体类,对应国际开源的fontawesome图形字体。
    quiconfig存储当前组件的配置参数信息,比如全局的字体名称、字号、无边框窗体的最小化最大化关闭等图标、样式表的颜色值。
    quidateselect自定义日期范围选择对话框。
    quihead当前组件通用头文件。
    quihelper项目通用辅助类,各种常用函数的封装,比如获取当前屏幕分辨率、设置字体、设置编码、加载翻译文件、各种进制数据转换、弹出各种对话框、设置延时时间等。
    quiinputbox自定义输入框窗体,可指定不同的输入类型比如文本框、下拉框等。
    quimessagebox自定义信息消息框窗体,可设置关闭倒计时,不同的类型比如信息框、询问框、错误框等。
    quistyle当前组件通用样式设置管理类,可以指定枚举类型样式、传入样式内容设置、获取样式表文件对应的颜色值等。当前组件样式相关的处理函数都放在这里,统一管理。
    quitipbox自定义右下角信息对话框,可设置对齐方式、关闭倒计时等。
    quiwidget自定义无边框窗体,可设置标题,各种图标等。
    11.3.3.8 模块-core_tcpfile
    名称说明
    tcpfilehead当前组件通用头文件。
    tcpfilehelper辅助类,包括将字节转为MB单位、初始化表格控件、生成表格行、数据加密解密、解压文件、重启系统等。
    tcpreceivefileserver接收文件服务类,管理多个接收文件线程,支持监听端口被动接收文件和主动连接服务器接收文件。
    tcpreceivefilethread接收文件线程类,根据发送的文件名、包编号、块大小、挨个接收数据最终形成文件,可设置保存文件夹等。
    tcpsearchfileserver搜索文件服务类,目前没用,用于接收请求搜索文件是否存在。
    tcpsendfilethread发送文件线程类,按照 文件开始符+文件大小+文件内容+文件结束符 逐个分包发送,可对文件的每个包进行加密传输。
    11.3.3.9 模块-core_video
    名称说明
    commonvideomanage通用视频管理类,比如定时器排队打开视频、排队重连视频,可设置超时时间、打开间隔、重连间隔等。
    commonvideowidget通用视频控件类,视频监控系统支持多种内核,每种内核对应的视频控件接口一样,根据预定义关键字识别具体的视频控件类,搞个通用的视频控件类,就不用每个用到该控件的代码文件去挨个判断预定义变量生成对应的视频控件,很大减少重复冗余代码量。
    11.3.3.10 模块-core_webview
    名称说明
    webcore.pri通用的根据不同的Qt版本、不同的编译器环境、不同的操作系统,加载对应的浏览器内核模块和定义不同的变量。
    miniblinkminiblink封装处理类。
    webhelper经纬度转换、获取小数点经纬度值等常用处理函数。
    webjsdata通用的浏览器控件和Qt程序交互数据中转类。
    webview通用浏览器控件,支持webkit、webengine、miniblink。

    11.3.4 界面UI

    +视频监控系统包含的轮子超级丰富给力,物超所值,涵盖了数据导出模块、数据库应用、视频监控、ONVIF通信、TCP文件传输、地图应用、通用浏览器内核等。

    名称说明
    core_control通用自定义控件,很多系统经常用到的控件全部放在这里。
    core_dataout数据导入导出到xls/pdf和打印类库,极速、跨平台、无依赖。
    core_db数据库通用类库比如数据库线程管理、数据清理、数据采集等。
    core_ffmpeg视频监控内核ffmpeg版本,本系统默认采用的内核。
    core_vlc视频监控内核vlc版本,本系统自带该内核。
    core_mpv视频监控内核mpv版本,需要额外购买,不在视频监控系统中。
    core_haikang视频监控内核海康sdk版本,需要额外购买,不在视频监控系统中。
    core_map地图综合应用类库,百度地图(支持在线离线)和echart封装类等。
    core_onvifonvif功能封装类,包括设备搜索、云台控制、设备参数设置等。
    core_openglopengl封装类,支持打开yuv/nv12文件,绘制yuv/nv12帧数据,一般搭配ffmpeg视频内核视频,直接走GPU绘制。
    core_tcpfile文件多线程收发类,支持多个并发。
    core_video通用的视频监控管理类,封装了通用的视频控件和多通道统一管理。
    core_webview通用浏览器控件类,同时支持webkit、wenengine、miniblink三种内核,打通了所有的Qt版本。
    11.3.3.1 模块-core_control
    名称说明
    bottomwidget通用底部状态栏控件,可以设置软件名称、版本号、运行时间等。
    colorcombobox颜色下拉框控件,在系统设置中有。
    cpumemorylabelCPU和内存使用情况标签控件,主界面右上角显示。
    customtitlebar停靠窗体自定义标题栏控件。
    devicebutton设备按钮控件,比如图片地图模块中用到,可设置不同的图标样式和状态等,双击发出信号进行相应处理比如弹出对应视频预览等。
    framelesswidget无边框窗体管理类,无边框拖动+拉伸,主界面就用到了这个类。
    lcddatetime软件右上角显示时间的控件。
    panelwidget面板容器控件,主界面子模块表格消息,就用到此控件,用于将一堆widget放到此容器进行管理,自动形成滚动条等。
    switchbutton开关按钮控件,在系统设置中存在大量该控件。
    xslider滑动条控件,在原有滑动条基础上增加了鼠标按下立即定位等。
    11.3.3.2 模块-core_dataout
    名称说明
    datacreat通用数据报表内容创建类,比如生成表格格式的html内容,然后赋值给dataprint直接打印,里面举例了图文混排的报告内容,后期会不断增加其他模板,也可以自行增加其他模板数据。
    datacsv导入导出数据,csv格式,可设置分隔符。拓展名。过滤条件等。
    datahead当前组件通用头文件。
    datahelper辅助类,比如校验规则函数,通用数据导出+打印函数。
    dataprint数据打印到pdf及纸张,支持多线程。
    dataxls数据导出到xls类,支持多线程导出。
    11.3.3.3 模块-core_db
    名称说明
    dbcleanthread自动清理数据线程类。
    dbconnthread数据库通信管理线程类。
    dbdelegate自定义委托全家桶,包括复选框、下拉框、密码框、按钮等。
    dbhead当前组件通用头文件。
    dbhelper各种数据库应用函数封装,比如初始化数据库、执行sql语句等。
    dbhttpthread网络请求数据采集类。
    dbpage数据库通用翻页类。
    dbpagemodel数据库翻页类数据模型。
    navpage分页导航控件。
    11.3.3.4 模块-core_ffmpeg
    名称说明
    ffmpegconvert各种转换处理函数封装。
    ffmpeghead当前组件通用头文件。
    ffmpeghelper辅助类,包括版本号,校验url地址、获取流索引等。
    ffmpegsync音视频同步类,包括了同步以及发出当前播放进度信号。
    ffmpegthread核心解码类,主要代码都在这,包括音视频的解码。
    ffmpegtool工具类,用于执行ffmpeg的命令获取结果。
    ffmpegwidget视频显示窗体类,解码后到这里显示,依赖ffmpegthread。
    videoffmpeg多通道管理类。
    11.3.3.5 模块-core_map
    名称说明
    echartjsechart模块中用到的json文件转js文件,获取js文件中的名字和经纬度等处理。
    echartsechart封装类,可加载仪表盘、闪烁点图、迁徙图、世界地图、区域地图等,每个点可自定义颜色和提示信息等。
    mapbaidu百度地图封装类,支持在线和离线两种模式。
    11.3.3.6 模块-core_onvif
    名称说明
    onvifbase基础类,用于获取设备信息、服务文件地址、能力文件地址、媒体文件地址、视频流地址等。
    onvifdevice设备类,核心处理及管理,包括设置用户信息请求onvif地址、获取设备信息、云台控制、事件订阅、抓拍图片等。
    onvifevent事件订阅具体实现类,可设置请求超时时间等。
    onvifhead当前组件通用头文件。
    onvifhelper辅助类,比如获取UUID用于请求、判断IP合法、获取本机IP地址集合、管理系统中所有onvif设备对象等。
    onvifmedia获取媒体文件具体解析类。
    onvifother其他处理类,比如系统重启、NTP校时、获取和设置网络信息、获取和设备时间、获取和设置图片参数等。
    onvifptz云台控制实现类,包括绝对移动、相对移动等。
    onvifquery数据查询类,用于将接收到的xml数据解析,并赋值字符串比如命名空间、设备地址、媒体地址、事件地址等。
    onvifrequest网络请求类,包括设置用户信息、获取用户token数据、获取xml头部数据等,通用的请求数据返回结果函数。
    onvifsearch设备搜索类,支持广播搜索、指定地址搜索,可获取设备信息集合、获取设备地址集合。
    onvifservices服务类,用于获取媒体地址、云台地址等。
    onvifsnap图片抓拍实现类,包括获取抓图地址、抓拍图片等。
    11.3.3.7 模块-core_opengl
    名称说明
    openglhead当前组件通用头文件。
    nv12glwidget继承自QGLWidget的NV12格式OPENGL绘制窗体。
    nv12openglwidget继承自QOpenGLWidget的NV12格式OPENGL绘制窗体。
    yuvglwidget继承自QGLWidget的YUV格式OPENGL绘制窗体。
    yuvopenglwidget继承自QOpenGLWidget的YUV格式OPENGL绘制窗体。
    11.3.3.8 模块-core_qui
    名称说明
    iconfont图形字体类,对应阿里巴巴的图形字体文件,系统中大量运用,将字体中的值转成图片显示。
    iconhelper图形字体类,对应国际开源的fontawesome图形字体。
    quiconfig存储当前组件的配置参数信息,比如全局的字体名称、字号、无边框窗体的最小化最大化关闭等图标、样式表的颜色值。
    quidateselect自定义日期范围选择对话框。
    quihead当前组件通用头文件。
    quihelper项目通用辅助类,各种常用函数的封装,比如获取当前屏幕分辨率、设置字体、设置编码、加载翻译文件、各种进制数据转换、弹出各种对话框、设置延时时间等。
    quiinputbox自定义输入框窗体,可指定不同的输入类型比如文本框、下拉框等。
    quimessagebox自定义信息消息框窗体,可设置关闭倒计时,不同的类型比如信息框、询问框、错误框等。
    quistyle当前组件通用样式设置管理类,可以指定枚举类型样式、传入样式内容设置、获取样式表文件对应的颜色值等。当前组件样式相关的处理函数都放在这里,统一管理。
    quitipbox自定义右下角信息对话框,可设置对齐方式、关闭倒计时等。
    quiwidget自定义无边框窗体,可设置标题,各种图标等。
    11.3.3.9 模块-core_tcpfile
    名称说明
    tcpfilehead当前组件通用头文件。
    tcpfilehelper辅助类,包括将字节转为MB单位、初始化表格控件、生成表格行、数据加密解密、解压文件、重启系统等。
    tcpreceivefileserver接收文件服务类,管理多个接收文件线程,支持监听端口被动接收文件和主动连接服务器接收文件。
    tcpreceivefilethread接收文件线程类,根据发送的文件名、包编号、块大小、挨个接收数据最终形成文件,可设置保存文件夹等。
    tcpsearchfileserver搜索文件服务类,目前没用,用于接收请求搜索文件是否存在。
    tcpsendfilethread发送文件线程类,按照 文件开始符+文件大小+文件内容+文件结束符 逐个分包发送,可对文件的每个包进行加密传输。
    11.3.3.10 模块-core_video
    名称说明
    commonvideomanage通用视频管理类,比如定时器排队打开视频、排队重连视频,可设置超时时间、打开间隔、重连间隔等。
    commonvideowidget通用视频控件类,视频监控系统支持多种内核,每种内核对应的视频控件接口一样,根据预定义关键字识别具体的视频控件类,搞个通用的视频控件类,就不用每个用到该控件的代码文件去挨个判断预定义变量生成对应的视频控件,很大减少重复冗余代码量。
    11.3.3.11 模块-core_webview
    名称说明
    webcore.pri通用的根据不同的Qt版本、不同的编译器环境、不同的操作系统,加载对应的浏览器内核模块和定义不同的变量。
    miniblinkminiblink封装处理类。
    webhelper经纬度转换、获取小数点经纬度值等常用处理函数。
    webjsdata通用的浏览器控件和Qt程序交互数据中转类。
    webview通用浏览器控件,支持webkit、webengine、miniblink。

    11.3.4 界面UI

    这里分门别类存放的各种功能集合的界面类,每个类都一个ui文件、一个h头文件、一个cpp实现文件,方便快速查找对应功能的界面,也方便拓展增加界面。 不仅分文件夹存放的,而且命名也尽量按照对应功能打头,比如系统设置模块中的都用frmconfig打头,外层文件夹是整齐的,内部代码也是整齐的。

    名称说明
    frmconfig系统设置模块,包括基本设置、录像机管理、摄像机管理、轮询管理、用户管理、视频上传等。
    frmdata日志查询模块,包括本地日志、设备日志等。
    frmdemo演示demo示例,用于演示具体控件或者功能的使用,方便学习参考,比如视频图片、视频控件、视频存储都单独的使用demo。
    frmipc存放摄像机处理相关的模块,比如设备控制,云台控制、预置位、巡航设置等。之前放在frmmodule模块中,后面独立出来管理更方便。
    frmmain主界面模块,包括登录登出界面、主界面、右上角时间组件、欢迎组件等。
    frmmap地图模块,包括通用地图内核界面、图片地图、在线地图、离线地图、路径规划等。
    frmmodule停靠子窗体模块,包括停靠窗体管理核心类、设备列表、窗口信息、图文警情、设备轨迹、网页浏览等模块。将摄像机、机器人、无人机相关的模块放到了对应的模块文件夹,这里放的是系统通用的模块。
    frmrobot无人机模块,包括图像增强、飞行监控等模块。
    frmuavs无人机模块,包括图像增强、飞行监控等模块。
    frmvideo视频监控模块,所有视频监控相关的都放在这里,包括主界面的视频监控布局窗体、视频回放、远程回放、图片回放等。
    11.3.4.1 模块-frmconfig
    名称说明
    frmconfig系统设置模块主界面,采用堆栈窗体形式,加载多个子界面比如摄像机管理、轮询管理等。
    frmconfigdb数据库设置,独立出来,很多系统通用。
    frmconfigipc摄像机管理,可以增加、删除、修改、清空、导入、导出、打印摄像机信息。
    frmconfigipcsearchonvif设备搜索,独立出来的窗体,可以搜索局域网内的所有onvif摄像机信息,搜索完以后获取摄像机的视频流地址等,最后可以单个添加或者批量选中添加到摄像机信息表格中。
    frmconfignvr录像机管理,可以增加、删除、修改、清空、导入、导出、打印录像机信息。
    frmconfigpoll轮询管理,可以增加、删除、修改、清空、导入、导出、打印轮询点信息。可以按照设定规则批量生成轮询点信息。
    frmconfigpollplus将轮询管理中的轮询参数配置、分组管理、批量添加等独立出来的界面,方便管理和拓展。
    frmconfigsave录像计划,目前空的,等想好了怎么设计好在实现。
    frmconfigsystem系统设置,包括基本设置、视频参数、数据库设置、地图配置、功能激活、颜色配置、串口配置、网络配置等。
    frmconfiguser用户管理,可以增加、删除、修改、清空、导入、导出、打印用户信息。每个用户可以勾选不同的模块权限。
    11.3.4.2 模块-frmdata
    名称说明
    frmdata日志查询模块主界面,采用堆栈窗体形式,加载多个子界面包括本地日志、设备日志等。
    frmdatadevice设备日志,通过私有协议从NVR取对应设备日志信息。
    frmdatauser本地地址,用户操作的日志信息,可查询和导出打印数据记录。
    11.3.4.3 模块-frmdemo
    名称说明
    frmdemo单独的功能演示示例主窗体,加载多个子界面比如视频控件等。
    frmdemovideoimage视频图片示例,从图片文件夹读取图片集合,定时器绘制取出图片发给视频控件绘制。
    frmdemovideosave视频保存示例,演示如何对视频控件进行视频保存,可动态保存。
    frmdemovideowidget视频控件示例,演示视频控件如何使用。
    11.3.4.4 模块-frmipc
    名称说明
    frmipccontrol设备控制模块,可对选中设备进行图片参数调节、NTP校时、设备重启、抓拍图片(ONVIF抓图)等。
    frmipcnavigate巡航管理模块,暂未实现,后期完善。
    frmipcreset预置位管理模块,暂未实现,后期完善。
    frmipcptz云台控制模块,可对选中的摄像机进行云台控制。
    11.3.4.5 模块-frmmain
    名称说明
    frmlogin用户登录界面,三次错误关闭,下拉可选用户,内置超级密码。
    frmlogout用户退出界面,三次错误关闭,下拉可选用户,内置超级密码。
    frmmain系统主界面,采用堆栈窗体,加载各个子模块。
    frmmain1备用模块1界面,根据参数设置决定是否启用。
    frmtimecpu右上角日期时间+CPU内存显示。
    frmwelcome右上角欢迎信息界面。
    11.3.4.6 模块-frmmap
    名称说明
    frmmap地图管理主界面,采用堆栈窗体形式,加载各个子界面比如图片地图、在线地图、离线地图、路径规划等。
    frmmapcore通用百度地图内核界面,用来加载百度地图,可设置在线、离线模式,有很多个窗体用到类似功能特意封装到一个类,重复利用,比如悬浮地图、飞行轨迹、路径规划等模块都用到了此内核。
    frmmapdevice通用的设备地图界面,在线地图和离线地图界面公用这个界面,唯一区别就是设置下地图的模式是在线还是离线。
    frmmapimage图片地图界面,设备作为一个个按钮点显示在对应地图上,可以拖动,双击弹出预览实时视频。
    frmmaplocal离线地图界面,可更新经纬度值、模拟运动轨迹等。
    frmmapweb在线地图界面,可更新经纬度值、模拟运动轨迹等。
    frmmaproute路径规划界面,可查询路线得到路线的经纬度坐标集合。
    11.3.4.7 模块-frmmodule
    名称说明
    frmdevicegps设备轨迹模块,对设定的设备随机模拟轨迹,也可传入经纬度坐标值自动移动并绘制轨迹线条,不同设备可以不同颜色。
    frmdevicetree设备列表模块,读取设备信息加载形成树状列表,双击或者拖动到视频监控窗体直接播放视频,提供右键菜单作为演示如何使用。
    frmmodule主界面中心部分窗体,采用QMainWindow类,中间加载的视频监控面板,其余new出来每个子模块,子模块可停靠和悬浮拖动等。不同工作模式下的各种子模块都在此加载。同时负责管理模块的显示隐藏菜单。
    frmmsglist图文警情模块,也叫消息列表模块,带有右键菜单添加、删除、清空列表中的消息,双击可以弹出大图预览。
    frmmsglistitem图文警情模块子类,都是由一个个item组成放到panelwidget面板控件中,自动形成滚动条。
    frmmsgtable窗口消息模块,也叫表格消息模块,表格形式显示打印信息,不同的内容可以不同颜色区分。
    frmwebview网页浏览模块,传入一个url地址打开对应的网页,比如打开一个3D的网页。
    11.3.4.8 模块-frmrobot
    名称说明
    frmrobotdata仿真数据模块,启动机器人通信服务,接收数据解析显示。
    frmrobotdebug数据调试模块,可模拟发送轨迹数据测试解析类。
    frmrobotdebug2新数据调试模块,打印多个串口数据,不同颜色显示。
    frmrobotemulate运动仿真模块,预留给用户实现,一般放个3D效果。
    frmrobotlog机器人实时数据模块,预留给用户实现。
    11.3.4.9 模块-frmuavs
    名称说明
    frmuavsflight飞行套件控件面板,放了多个飞行仪表,默认自动模拟数据,可以传入对应数据显示。
    frmuavsimage图像增强模块,预留给用户实现。
    frmuavspanel飞行监控面板。
    11.3.4.10 模块-frmvideo
    名称说明
    frmvideo视频回放模块主界面,堆栈窗体形式,加载多个子界面比如本地回放、远程回放、设备播放等。
    frmvideopanel视频监控面板,主界面中间部分,这是核心,管理多个通道,通道可移除删除,拖曳打开,拖曳交换等。
    frmvideopaneltool视频监控底部工具栏,独立出来一个类专门管理。
    frmvideoplayimage图片回放模块,按照规则查询图片目录,然后可设定播放速度进行图片序列播放。
    frmvideoplaylocal本地回放模块,查询对应通道的本地存储的视频文件,双击播放,可暂停和拖动进度条位置。
    frmvideoplaynvr远程回放模块,需要用厂家sdk去实现,从NVR回放录像。
    frmvideoplayweb设备播放模块,通过RTSP视频流的形式从远程设备取视频进行播放,支持摄像机和录像机,手动填入地址也行。
    frmvideopreview视频预览窗体,比如图片或者地图上双击设备弹出的视频预览,可以多个,关闭的时候自动释放资源。
    frmvideoupload视频上传,将本地存储的视频文件上传到服务器。

    12 二次开发说明

    12.1 开发环境搭建

    12.1.1 常规通用步骤

    1. 第一步:安装系统,推荐用vmware虚拟机。
    2. 第二步:安装qt环境,可以直接用官方下载的run安装包安装,有些要求用命令行安装。
    3. 第三步:写个空白窗体程序测试下是否环境正常。
    4. 第四步:编译ffmpeg,生成对应的动态库或者静态库。
    5. 第五步:打开video_system.pro项目进行编译。
    6. 第六步:打包发布,为了发布方便,推荐用静态编译的Qt+静态编译的ffmpeg,这样打包发布很清爽,就一个可执行文件。

    12.1.2 windows+mingw

    12.1.3 windows+msvc

    12.1.4 linux+ubuntu

    12.1.5 linux+deepin

    12.1.6 linux+centeros

    12.1.7 linux+uos

    12.1.8 linux+银河麒麟

    12.2 通用模块使用

    12.3 人工智能集成

    13 其他说明

    13.1 海康onvif设置

    新版的海康的摄像机,默认onvif是关闭的,需要手动开启,开启以后记得添加onvif用户,并重启摄像机应用。提示:海康旗下的萤石目前暂时不支持onvif协议。

    13.2 大华onvif设置

    大华摄像机,需要在用户管理中添加onvif用户,添加好以后建议重启摄像机应用。

    13.3 国际onvif工具

    工具的名字叫ONVIF Device Manager,可以自行搜索下载,此工具位国际官方工具,如果此工具搜索不到摄像机,则说明该摄像机不是真正的onvif摄像机,不是标准的摄像机,目前市面上的绝大部分网络摄像机都支持onvif。

    13.4 报警输入设置

    默认摄像机IO输入或者开关量输入是关闭的,需要手动开启,一般都是登录到摄像机的web页面找到开关量的地方,可能描述不一样但是大致的意思差不多,一般摄像机会有两组开关量输入,而且开关量报警有常开常闭两种,都需要自己手动选择,如果是常开的话意味着闭合是属于报警,反之亦然。找两个导线接在对应口子(详见摄像机厂家的说明书,摄像机背面板也会有对应字样标识一般叫 in),短接或者扒开,都会有反应,onvif工具都能接收到信息(前提是单击过订阅事件按钮,而且顺利返回了订阅地址才行),会收到LogicalState关键字的信息,true或者1表示报警,false或者0表示正常,可能每个厂家会有所区别,需要自己拿到数据后做特殊处理,但是大部分厂家都是相似的,实在不行无非搞个contains方法判断好了。