diff --git a/docs/video_system/index.html b/docs/video_system/index.html index 8c4f567..e05fe76 100644 --- a/docs/video_system/index.html +++ b/docs/video_system/index.html @@ -693,11 +693,11 @@ header, .context-menu, .megamenu-content, footer{ 视频监控系统开发及使用手册
-
  • 0 前言说明

    0.1 编译说明

    0.1.1 注意事项

    1. 可执行文件在源码同级目录的bin目录下。

    2. 编译完成后记得将源码下的file目录下(切记是file目录下而不是file目录)的所有文件复制到可执行文件同一目录。

    3. 如果开启了视频监控(默认开启),则记得将对应的动态库文件复制到可执行文件同一目录。比如采用ffmpeg内核(默认就是ffmpeg)的话,则将下载到的dll_ffmpeg4下的所有文件复制到可执行文件同一目录。

    4. 各个操作系统对应的ffmpeg编译好的动态库以及miniblink的动态库下载地址。 +

    0 前言说明

    0.1 编译说明

    0.1.1 注意事项

    1. 可执行文件在源码同级目录的bin目录下。

    2. 编译完成后记得将源码下的file目录下(切记是file目录下而不是file目录)的所有文件复制到可执行文件同一目录。

    3. 如果开启了视频监控(默认开启),则记得将对应的动态库文件复制到可执行文件同一目录。比如采用ffmpeg内核(默认就是ffmpeg)的话,则将下载到的dll_ffmpeg4下的所有文件复制到可执行文件同一目录。

    4. 各个操作系统对应的ffmpeg编译好的动态库以及miniblink的动态库下载地址。 https://pan.baidu.com/s/13LDRu6mXC6gaADtrGprNVA  提取码: ujm7。

    5. 如果是64位的qt则对应的dll是拷贝dll_ffmpeg4_64目录下的,64位的linux对应的是liblinux64.tar.gz。

    6. 本系统支持ffmpeg2/3/4/5/6所有版本,默认是ffmpeg4,如果要支持XP需要用ffmpeg2/3。如果是在linux/mac系统上编译记得查看core_videoffmpeg/下面的 linux系统和mac系统上库的用法.txt/编译阶段linux系统ffmpeg库放置位置.jpg/运行阶段linux系统ffmpeg库放置位置.jpg。

    7. 如果编译运行提示miniblink文件不存在请先拷贝,则说明你当前用的Qt版本没有浏览器模块,要么没安装,要么不支持,你也不用担心啥,此时自动切换用的miniblink浏览器内核,你还需要将ffmpeg库下载的网盘的地方找到dll_miniblink.zip下载解压到可执行文件同一目录即可。

    8. 系统中所有的图标,都采用的图形字体,对照表在doc目录下的FontAwesome.png、FontAliBaBa.png,对应图形字体类IconHelper中加载的图形字体,后期如果还有增加的其他图形字体也是放在这里,一个类支持多种图形字体,通过不同的值范围自动设置。

    9. 如果发现地图打不开或者提示秘钥文件丢失,请先确认file目录下的所有文件有没有拷贝过去。

    10. 如果是用vs+qt可能报错 error LNK2026,解决办法详细见本文档中13其他说明/13.5环境使用qt+vs。

    11. 默认用户名admin 密码admin。

    12. 系统配置参数在加载的时候会对节点值进行过滤判断,如果为空会自动用初始值生成新的配置文件,如果不想要显示版权所有公司,可以填xxx而不是删掉整个值。

    13. 如果是用vlc推流的rtsp地址,比如 rtsp://:8554/aabb,由于vlc推流默认写死的采用的udp协议,所以监控系统也必须在系统设置中通信方式选择udp才行(默认tcp)。

    0.1.2 特别提示

    1. 本系统没有说基于哪个Qt版本,由于系统中电子地图模块用到了浏览器模块,所以理论上要求你电脑的Qt版本也有浏览器模块才行。

    2. 如果没有浏览器模块则电子地图模块不可用,但是其余功能全部可用,没有任何影响。

    3. 支持Qt4.7以上的所有版本,亲测msvc、mingw、gcc、clang、armgcc各种编译器,亲测xp、win7、win10、linux、mac、树莓派、香橙派、全志H3、cotex-A9、imx6等。

    4. 2021-1-6开始集成了miniblink浏览器内核,意味着mingw版本的qt5.6以上版本也全部支持,这样就所有系统都有浏览器模块不需要担心没有电子地图的问题。Qt6.4.1到Qt6.5.1之间的版本,miniblink浏览器控件会和openglwidget冲突导致白屏,建议避开这几个版本。

    5. 部分构建套件可能不支持预编译头,预编译头仅仅是为了加快编译速度,和程序本身无关。比如在win+Qt5.5 5.6就发现不支持,也可能是支持的不够全面,如果编译发生错误可以试着打开pro文件注释掉PRECOMPILED_HEADER = head.h 这行。

    6. Qt6.2的mingw版本的multimedia模块不可用,msvc版本的正常。

    7. 开启视频存储后默认存储的MP4格式的文件,如果想要调整体积大小,可以找到core/core_videoffmpeg/ffmpegsave.cpp videoCodecCtx->bit_rate = FFmpegHelper::getBitRate(videoWidth, videoHeight); 将这个码率调小即可,比如 videoCodecCtx->bit_rate = FFmpegHelper::getBitRate(videoWidth, videoHeight)/2; 可以将体积减少一半,相应的画质也会差一些。

    8. 推荐用64位的Qt搭配64位的ffmpeg,目前绝大部分系统都是64位的,能获得最大性能提升,本人亲自对比测试32位和64位,64位无论资源占用和操作响应等体验都更优。尤其是开启硬解码后,如果64个通道都需要硬解码,32位的测试下来貌似资源不够用。

    9. 如果更改appconfig.cpp中的值发现没有变化,那是因为里面的值是用来默认生成配置文件的值,如果配置文件已经存在,则对应变量是从配置文件读取的值,如果想要更改后的默认值生效,需要删除配置文件(config/video_system.ini)重新打开程序即可。

    10. 内核ffmpeg画框画文字水印等采用的滤镜实现,默认硬解码的数据是NV12不支持滤镜,意味着画框等无效,绘制文字有效,如果一定要在硬解码的帧数据画框,可以使用包含各种形状比如正方形/三角形/矩形的图形字体,指定图形字体的值来绘制。

    11. 如果在linux系统编译提示 -disable-new-dtags: unknown option ,打开core_videobase/core_videobase_include.pri ,把底部 DTAGS = ,-disable-new-dtags 整行注释就行。

    12. 关于声音的几点说明:系统中有多个声音相关的控制参数,一个是decodeAudio,用于控制是否解码音频数据;一个是playAudio,用于控制是否将解码后的音频数据发到声卡进行播放;一个是soundMute,用于控制声音大小为静音;在视频控件上的音量图标切换是用于切换静音。音频振幅也就是音柱的变化,只要声卡那边有数据播放,无论静音与否,都会有音频振幅效果。

    0.1.3 离线地图

    1. 离线地图可以用网上的瓦片地图下载器下载百度的离线地图放到对应目录即可。

    2. 也可以直接下载网盘中已经下载好的上海市的离线地图。

    3. 下载地址:https://pan.baidu.com/s/1ZxG-oyUKe286LPMPxOrO2A 提取码:o05q 文件名称:bin_map_tiles.tar.xz

    使用说明

    1. 将压缩包下的两个文件夹复制到对应可执行文件下的config文件夹下,和map.js文件同一级目录。

    2. tiles文件夹是街道图,tiles_hybrid文件夹是卫星图,tiles_self是路网图,路网图和卫星图合并就是混合图。

    3. 默认提供的是上海市徐汇区的瓦片地图,如果自己用万能地图下载器下载的百度地图的瓦片文件,也可以对应替换就行。

    4. 要注意的是格式,默认是jpg,如果下载的瓦片地图格式是png则需要打开config文件夹下的map_load.js文件,将.jpg改成.png保存即可。

    0.2 目录说明

    1. 本源码项目文件中对编译生成的临时文件和可执行文件做了重定向,可执行文件并不在build开头的目录下,而是在源码同级目录的bin目录下。

    2. config目录放的是软件的配置文件、地图模块需要的图片资源等。

    3. db目录一般有三个文件,key.db是秘钥文件、video_system.db是对应sqlite的数据库文件、video_system.sql是对应数据库脚本(可以在系统设置中数据库管理部分执行脚本用来切换到mysql等其他数据库)。

    4. logo目录存放的各种左上角软件LOGO图片,可以在系统设置中下拉选择。

    5. map目录存放的图片地图模块所用的地图图片文件,可以手动拷贝到此。

    6. sound目录存放的本系统所用的声音文件。

    7. layout目录存放的不同工作模式不同界面对应的布局方案配置文件。

    0.3 系统说明

    1. 本视频监控系统做的是通用的系统,主要偏重整体框架和UI交互等。

    2. 主要功能包括摄像机管理,实时视频显示,视频轮询、视频存储、设备地图显示,各种画面切换,各种悬停子模块、onvif搜索设备和云台控制及预置位,通用的NVR视频流播放(比如海康的NVR支持直接取流回放),录像计划、用户管理等功能。

    3. 如果是依赖SDK去实现的功能(雨刷、去雾等)都没有做,那个破坏了兼容性,无法通用其他摄像机设备以及其他操作系统。

    4. 每个厂家SDK和定制的功能都不一样,如果有这方面的需要都是买过去自己加上SDK的功能和自己定制需要的功能。

    5. 整个项目源代码行数大概30W行(项目代码本身除去第三方库以后约7W行,就是自己写的部分),其中代码13.5W行(占比45%),注释12.7W行(占比42%),空行3.5W行。分层设计注释详细。

    6. 本程序会一直持续迭代更新,包括项目源码、整体框架、使用说明等,一次购买终生售后。

    0.4 特别说明

    1. 本程序相当于是个客户端,并不是服务器程序,而是直接从摄像机或者NVR等设备取rtsp视频流。对标的是海康大华的PC客户端程序,只不过海康大华的客户端默认只支持自家的设备,而本程序支持各个厂家的设备。

    2. 摄像机管理没有限制摄像机的数量,理论上10000路肯定没有问题,就是个数据库记录。

    3. 程序实时显示界面最大通道数量可以到64路,每个通道都是打开的时候才会去建立连接取视频流,而不是一开始就建立了连接。

    4. 一般屏幕大小显示64路就已经足够,再多就窗口很小,意义不大,除非分辨率很大。如果还需要同时显示到255路,程序中稍作修改即可,这部分功能可以定制。

    5. 实时显示具体能支持多少路,和具体的电脑配置有关,亲测1.8G主频8G内存I5子码流64路没问题,总之比海康大华客户端要更优秀。

    6. 系统采用onvif协议+rtsp视频流机制,并不限定支持哪家的摄像机,只要符合这两种协议的都支持,市面上99%的网络摄像机都支持这两种基础协议,包括但不限于海康、大华、宇视、天地伟业、华为等各种安防厂家的摄像机。

    7. 本系统没有内置人脸识别等任何相关算法,提供的是相关的接口,比如自己的算法识别到人脸区域后,将区域坐标传入视频控件自动绘制。

    8. 系统采用纯QtWidget(非qml)编写,解码采用ffmpeg,搜索采用onvif协议,视频播放采用rtsp协议,所有源码开放,没有封装的库。

    9. 同时集成了数据库、多线程、串口通信、网络通信、音视频解码/同步/存储、网页地图、界面美化、UI布局等众多知识点。

    10. 未经本人许可不可将本项目源码扩散,如有发现本人将追究法律责任,谢谢配合。

    0.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

    6. 在线文档:https://feiyangqingyun.gitee.io/qwidgetdemo/video_system/

    7. 体验地址:https://pan.baidu.com/s/1d7TH_GEYl5nOecuNlWJJ7g 提取码:01jf 文件名:bin_video_system.zip。

    8. 文章导航:https://qtchina.blog.csdn.net/article/details/121327495

    0.6 功能特点

    0.6.1 软件模块

    1. 视频监控模块,各种停靠小窗体子模块,包括设备列表、图文警情、窗口信息、云台控制、预置位、巡航设置、设备控制、悬浮地图、网页浏览等。

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

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

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

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

    0.6.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. 支持OSD增删改查,可以通过onvif协议添加及修改OSD信息。

    24. 支持onvif图像参数设置,包括明亮度、对比度、饱和度、尖锐度等。

    25. 支持onvif其他操作,包括抓图、网络设置、校时、重启、事件订阅等。

    26. 支持任意onvif摄像机,包括但不限于海康、大华、宇视、天地伟业、华为等。

    27. 可保存视频,可通过录像计划存储,也可在悬浮条手动切换开始录像和停止录像。

    28. 可设置视频流通信方式tcp或udp,可设置视频解码是速度优先、质量优先、均衡处理、最快速度等。

    29. 可设置软件中文名称、英文名称、LOGO图标等。

    30. 存储的视频文件支持导出到指定目录,支持批量上传到服务器。

    31. 完善的录像计划设置,支持每个通道7 * 24小时每半小时设置是否存储录像。

    32. 音视频同步显示以及音视频同步存储到MP4文件。

    0.6.3 特色功能

    1. 主界面采用停靠窗体模式,各种组件以小模块的形式加入,可自定义任意模块加入。

    2. 停靠模块可拖动任意位置嵌入和悬浮,支持最大化全屏,支持多屏幕。

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

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

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

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

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

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

    9. 选中通道对应设备树节点高亮,选中通道节点对应视频控件高亮,方便查看当前通道信息。

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

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

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

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

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

    15. 默认采用opengl绘制视频,超低的CPU资源占用,支持yuyv和nv12两种格式绘制,性能爆表。

    16. 标签和图形信息支持三种绘制方式,绘制到遮罩层、绘制到图片、源头绘制(对应信息可以存储到文件)。

    17. 包括但不限于视频监控内核组件的所有功能,可参阅说明书中功能介绍 视频监控内核

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

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

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

    0.7 地址格式

    0.7.0 特别提示

    1. 由于编解码涉及到很多参数,一般都按照默认参数进行处理。

    2. 部分用户有时候希望通过填入的播放地址就带上这些信息,比如通信协议、桌面采集的分辨率、编码保存是否转码、转码是否缩放原图等。

    3. 各种参数设置有个优先级,优先取地址中带的,没有带则取结构体中的,还没有则取默认值。

    4. 有些值会根据具体情况自动调整,比如本地设备采集没有硬解码,udp开头的视频流强制用udp协议,有些不支持硬解的格式自动将硬解码=none。

    5. 对于需要在地址中指定参数,对应占位符不填的需要占位符留空,不可以跳过。

    6. 占位符中填了对应参数的必须严格按照指定的格式要求,不按照则很可能导致解析失败。

    7. 参数用英文竖杠 | 隔开。

    8. 监控解码组件支持各种场景需求的格式,你能想到的情况都考虑到了,经过近十年的长期实战积累而成。强烈建议看完下面的格式要求。

    0.7.1 通用格式

    1. 格式要求: url|transport|decodeType|encodeVideo|encodeVideoFps|encodeVideoRatio|encodeVideoScale。

    2. url表示媒体地址,比如 f:/1.mp3 d:/1.mp4 rtsp://192.168.0.100 等。

    3. transport表示通信协议,可选 tcp/udp,一般用于rtsp视频流,很多时候在linux系统中必须指定tcp,rtsp摄像头才能正常采集。

    4. decodeType表示解码策略,0-速度优先,1-质量优先,2-均衡处理,3-最快速度(不做音视频同步,收到就立马解码和显示)。

    5. encodeVideo表示视频编码格式,0-不做处理,1-自动转码(源头是264就264/265就265),2-强制用264编码,3-强制用265编码。

    6. encodeVideoFps表示编码帧率,默认取源头流的帧率,如果指定了则取指定的。

    7. encodeVideoRatio表示视频压缩比率,对应bit_rate的值,在不改变分辨率的情况下,通过调整这个参数来控制保存文件体积的大小。范围值0-1。

    8. encodeVideoScale表示视频缩放值,字符串类型,如果值float值,则相当于在原有分辨率按照这个值等比例缩放,比如encodeVideoScale=0.5,视频源分辨率是1920x720,则编码保存按照960x360这个分辨率保存。如果是640x480,则按照指定的这个分辨率强制缩放,可能会变形。

    0.7.2 本地设备

    1. 格式要求:url|bufferSize|frameRate|codecName|encodeVideoScale。

    2. url表示媒体地址,采集摄像头统一约定 video=或者audio=开头。

    3. bufferSize表示分辨率,可填1280x720这种,不填默认640x480。

    4. frameRate表示帧率,不填默认25。

    5. codecName表示解码器名称,有些本地摄像头可以指定解码器名称比如mjpeg/h264,前提是要该设备支持该解码器。默认为空则不指定会自动处理。

    6. encodeVideoScale表示缩放,1表示原始比例(默认值1),0.2则表示按照原始分辨率等比例0.2倍缩放,也可以填400x300表示强制按照这个分辨率缩放。这个在高分辨率的时候特别有用,比如采集的桌面分辨率很大,但是传输的时候受限于带宽,需要等比例压缩一下再传输,此时可以填0.5/0.2之类的值。

    7. win系统如何查看设备名见本文档中 打开本地摄像头

    8. linux系统查看设备名直接执行命令 ls /dev/video * 即可,一般对应的设备名是 /dev/video0。

    9. 下面假定本地摄像头的设备名为 USB Video Device。

    10. 写法1:video=USB Video Device,这种写法默认按照640x480分辨率打开摄像头。

    11. 写法2:video=USB Video Device|1280x720|30,这种写法按照指定的分辨率1280x720以及采集帧率30来打开摄像头。

    12. 写法3:video=/dev/video0,这种是对应linux系统,程序内部会自动过滤和调整填入的地址。

    13. 写法4:audio=麦克风 (USB Audio Device),只采集本地麦克风。

    14. 写法5:video=USB Video Device:audio=麦克风 (USB Audio Device),同时采集本地摄像头和麦克风。

    15. 写法6:video=USB Video Device|1920x1080|30|h264,按照1080P分辨率30帧h264格式解码来打开摄像头。

    16. 写法7:video=USB Video Device|1920x1080|||0.5,按照1080P分辨率采集,保存按照960x540分辨率。

    17. 约定audio=开头是只采集音频,video=开头可以采集视频或者视音频。

    18. 如果指定了分辨率和帧率则需要硬件支持才行,比如摄像头的最大分辨率是640x480,而指定了1280x720则会打开失败。

    0.7.3 本地桌面

    1. 格式要求:url|bufferSize|frameRate|offsetX|offsetY|screenIndex|encodeVideoScale。

    2. url表示媒体地址,采集桌面统一约定 screen=开头。

    3. bufferSize表示采集分辨率,不填则默认取屏幕分辨率。

    4. frameRate表示采集帧率,基本上在2-30之间,不填的话默认ffmpeg会设定一个值,有时候是30。

    5. offsetX/offsetY表示偏移值XY坐标,从屏幕的左上角(0,0)开始。

    6. screenIndex表示屏幕索引,不填的话则默认取当前鼠标所在屏幕。在多个屏幕的时候可通过此参数指定屏幕索引。

    7. encodeVideoScale表示缩放,1表示原始比例(默认值1),0.2则表示按照原始分辨率等比例0.2倍缩放,也可以填400x300表示强制按照这个分辨率缩放。这个在高分辨率的时候特别有用,比如采集的桌面分辨率很大,但是传输的时候受限于带宽,需要等比例压缩一下再传输,此时可以填0.5/0.2之类的值。

    8. 写法1:screen=desktop,当前屏幕全屏采集。

    9. 写法2:screen=desktop||15|0|0|1,屏幕2全屏采集,帧率15。

    10. 写法3:screen=desktop|800x600|10|50|100,鼠标所在当前屏幕采集,采集区域rect(50,100,800,600),帧率10。

    11. 写法4:screen=desktop|10x10,约定10x10分辨率表示所有屏幕合并到一个屏幕采集,比如两个屏幕的时候,当做一个屏幕整体采集。当合并屏幕采集的时候,XY偏移值参数无效。

    12. 写法5:screen=desktop|800x600|25|1500|300|255,约定屏幕索引255则取用户自定义的区域,该字符串表示采集区域是(1500, 300, 800, 600),自由区域,可以任意指定,比如两个屏幕中间区域。前提只要保证该区域在两个屏幕区域中,如果超过了的话可能采集失败,这要求用户需要对采集区域精准定位。

    13. 写法6:screen=title=MainWindow,对指定窗口标题是MainWindow的窗体采集。支持中文标题比如screen=title=系统设置。

    14. 经过大量测试发现,如果打包发布的Qt程序带了qt.conf文件并且里面指定了 WindowsArguments = dpiawareness=0 ,在电脑分辨率设置了缩放比不为100%的时候,计算出来的桌面区域未必正确,建议如果此种情况下一定要采集正确的桌面,去掉qt.conf文件中的对应内容或者删除qt.conf文件即可。

    0.7.4 电视频道

    1. 中央综合:http://39.135.138.60:18890/PLTV/88888910/224/3221225618/index.m3u8

    2. 中央新闻:http://39.135.138.60:18890/PLTV/88888910/224/3221225638/index.m3u8

    3. 中央音乐:http://39.135.138.60:18890/PLTV/88888910/224/3221225641/index.m3u8

    4. 中央电视:http://39.135.138.60:18890/PLTV/88888910/224/3221225635/index.m3u8

    5. 中央记录:http://39.135.138.60:18890/PLTV/88888910/224/3221225646/index.m3u8

    6. 中央少儿:http://39.135.138.60:18890/PLTV/88888910/224/3221225639/index.m3u8

    7. 湖南卫视:http://39.135.138.60:18890/PLTV/88888910/224/3221225745/index.m3u8

    8. 深圳卫视:http://39.135.138.60:18890/PLTV/88888910/224/3221225741/index.m3u8

    9. 上海纪实:http://39.135.138.60:18890/PLTV/88888910/224/3221225654/index.m3u8

    10. 天津卫视:http://39.135.138.60:18890/PLTV/88888910/224/3221225739/index.m3u8

    0.7.5 视频文件

    万能办法,用谷歌或者谷歌内核的浏览器,打开时光网 http://www.mtime.com/ ,随便打开个视频,这里一般是预告片,按F12切换到审查元素,顶部切换到网络,选中媒体,刷新网页,按照尺寸排列,最大的那个MP4文件就是,鼠标右键复制地址,这个地址就是完整的网络地址。

    1. http://vfx.mtime.cn/Video/2021/11/16/mp4/211116131456748178.mp4

    2. http://vfx.mtime.cn/Video/2023/03/09/mp4/230309152143524121.mp4

    3. http://vfx.mtime.cn/Video/2023/03/07/mp4/230307085324679124.mp4

    4. http://vfx.mtime.cn/Video/2022/07/18/mp4/220718132929585151.mp4

    5. http://vfx.mtime.cn/Video/2022/12/17/mp4/221217153424902164.mp4

    6. http://vfx.mtime.cn/Video/2022/07/04/mp4/220704110656040153.mp4

    7. http://vfx.mtime.cn/Video/2021/02/08/mp4/210208150307073134.mp4

    8. http://vfx.mtime.cn/Video/2021/05/11/mp4/210511114524329144.mp4

    9. http://vfx.mtime.cn/Video/2021/04/20/mp4/210420113022586184.mp4

    10. http://vfx.mtime.cn/Video/2021/03/13/mp4/210313111010421158.mp4

    11. http://vfx.mtime.cn/Video/2020/01/15/mp4/200115125943120574.mp4

    百度视频

    1. https://vd2.bdstatic.com/mda-nhpqy7k8xamgiqw3/720p/h264/1661362621500413748/mda-nhpqy7k8xamgiqw3.mp4

    2. https://vd2.bdstatic.com/mda-nhp9zvu4tiinsp7z/576p/h264/1661324637707658476/mda-nhp9zvu4tiinsp7z.mp4

    3. https://vd4.bdstatic.com/mda-nhp77xn7fx3e0jgb/576p/h264/1661317610850513689/mda-nhp77xn7fx3e0jgb.mp4

    4. https://vd2.bdstatic.com/mda-nhp72n8xvbtdcmcq/576p/h264/1661317214259599500/mda-nhp72n8xvbtdcmcq.mp4

    5. https://vd2.bdstatic.com/mda-nhp6z0in87tvw77v/576p/h264/1661316943890074768/mda-nhp6z0in87tvw77v.mp4

    6. http://vd3.bdstatic.com/mda-jennyc5ci1ugrxzi/mda-jennyc5ci1ugrxzi.mp4

    7. http://vd2.bdstatic.com/mda-mhhf5mr00yyhpfjs/1080p/cae_h264/1629284581057661229/mda-mhhf5mr00yyhpfjs.mp4

    8. http://vd2.bdstatic.com/mda-mhig1c3sw223mx8p/1080p/cae_h264/1629380139191731149/mda-mhig1c3sw223mx8p.mp4

    9. http://vd3.bdstatic.com/mda-mekfm7wu6f4rtt99/1080p/cae_h264/1621595318412084671/mda-mekfm7wu6f4rtt99.mp4

    10. http://vd2.bdstatic.com/mda-mesdm11tdp69a9ye/1080p/cae_h264/1622115758783335310/mda-mesdm11tdp69a9ye.mp4

    时间很短的视频文件

    1. https://highlight-video.cdn.bcebos.com/video/6s/95ae2066-ee02-11ed-9f01-6c92bf5ceb6f.mp4

    2. https://highlight-video.cdn.bcebos.com/video/6s/1a74a352-d1fb-11ed-829b-6c92bf468c1f.mp4

    3. https://highlight-video.cdn.bcebos.com/video/6s/e0d35168-edf5-11ed-8709-6c92bf3b0281.mp4

    4. https://highlight-video.cdn.bcebos.com/video/6s/0757f6ec-ee03-11ed-85d3-6c92bf3b0af4.mp4

    5. https://highlight-video.cdn.bcebos.com/video/6s/6ffb9cbe-ee01-11ed-916c-6c92bfb45e04.mp4

    专业测试视频播放器的各种文件 http://samples.mplayerhq.hu/

    0.7.6 监控设备

    下面列出的是一些常用厂家的格式,不同厂家格式不一样,具体什么格式请咨询厂家索要对应的视频流格式,或者设备支持onvif的话,通过onvif工具搜索可以拿到视频流格式。

    0.7.6.1 海康
    0.7.6.2 大华
    0.7.6.3 常规

    0.7.7 指定协议

    1 登录退出

    1.1 用户登录

    系统启动后,首先会弹出用户登录界面,从用户姓名的下拉框选择用户名,然后输入密码(默认用户名密码都是admin),单击登录按钮,密码正确则会进入到系统主界面,错误会弹出提示,错误超过三次自动关闭,需要重新打开软件。

    在登录界面可以勾选是否记住密码,是否自动登录,如果勾选了记住密码,则下次启用软件会自动填入最后用户的密码,勾选了自动登录(以最后的用户信息作为当前登录用户)则启动后直接进入主界面。如果开启了自动登录,不会弹出登录界面,可以在系统设置中关闭自动登录和记住密码。

    1.2 用户退出

    在主界面单击右上角的关闭按钮,会弹出用户退出界面,需要输入密码验证防止误关闭,会自动填入登录的用户名,密码输入正确才会退出软件。用户登录和退出都内置了超级密码a防止管理员忘记密码。

    2 模块功能

    主界面由顶部主菜单导航、左侧右侧停靠窗体(设备列表、窗口信息、图文警情、悬浮地图、云台控制、设备控制、预置巡航、视频轮询等)、中间视频监控主画面组成,其中左右两侧的停靠窗体可以拉伸宽度,上下停靠窗体之间也可以拉伸高度,每个停靠窗体都可以关闭和悬浮。自动保存布局文件,下次启动自动应用。

    1. 所有模块都是停靠窗体。

    2. 可以任意组合多种子模块。

    3. 模块可停靠悬浮。

    4. 在普通模式和全屏模式都有独立的布局文件。

    5. 不同的工作模式都可对应不同的布局文件。

    2.1 模块显示

    左侧和右侧的面板,可以通过单击面板右上角的关闭按钮来隐藏,当隐藏一个面板以后,剩余的面板会自动填充布局,如果需要重新显示面板,则在标题栏鼠标右键就可以对小面板进行显示和隐藏,右上角的时间和CPU显示面板可以在系统设置中控制显示隐藏。系统会自动记住最后的布局比如显示的面板和宽高占比,下次启动后自动应用。

    1. 在停靠窗体的标题栏鼠标右键也会弹出子窗体的开启菜单,复选框勾选表示显示,悬浮的窗体没有这个特性,一定要是嵌入在主界面中的子窗体标题栏才有。

    2. 如果是全屏模式,由于没有了标题栏,想要关闭模块的话,需要将其拖动到边缘嵌入主窗体,然后在标题栏鼠标右键菜单中关闭即可。

    2.2 模块拖动

    面板和面板之间有个分隔条,鼠标移到对应分隔条的地方,会变成可拉动的鼠标指针,此时可以上下左右拉动调整宽高,调整好以后会自动保存宽高比例,下次启动后自动应用最后的配置来显示。

    2.3 视频播放

    视频播放支持多种方式:

    1. 双击子节点播放单个摄像机,在当前选中通道处播放。

    2. 双击父节点播放整个录像机的摄像机,依次排列。

    3. 按住子节点拖曳到对应通道,播放摄像机。

    4. 本地文件直接拖曳到通道,自动播放本地文件。

    5. 启动后自动播放最后通道的视频信息。

    6. 代码接口提供指定通道播放url,AppEvent::Instance()->slot_loadVideo。

    7. 代码接口提供指定两个通道交换,AppEvent::Instance()->slot_changeVideo,比如报警的时候将某个通道移到最前面显示。

    2.4 视频截图

    视频截图支持多种方式:

    1. 监控通道鼠标右键,弹出菜单选择截图当前视频/截图所有视频。

    2. 视频面板底部工具栏截图按钮。

    3. 每个通道悬浮工具条截图按钮。

    4. 截图默认保存在可执行文件所在目录下的image_normal目录,文件名格式ch01_2028-11-24-13-41-24-000.jpg。

    5. 底部工具栏截图按钮触发截图后会弹出提示抓拍文件后的保存位置。

    2.5 删除视频

    有多种方法可以删除视频:

    1. 鼠标右键删除当前视频。

    2. 鼠标右键删除所有视频。

    3. 按住通道画面移出视频监控画面。

    4. 悬浮条关闭按钮。

    2.6 画面切换

    -

    系统支持多画面切换,全屏切换等,包括1/4/6/8/9/13/16/25/36/64画面切换,如果还需要增加更多的画面比如81/100/255等,可以直接在videobox.cpp源码中稍微修改即可。

    画面切换支持多种方式:

    1. 鼠标右键画面切换。

    2. 底部左侧画面切换缩略图。

    3. 快捷键alt+enter全屏。

    4. 快捷键esc退出全屏。

    5. 切换到X画面,标准的行列数通道布局,比如竖屏一般需要4x2这种,表示4行2列布局。

    6. 切换到Y画面,自定义的一些布局,比如通道01-通道02表示左右两侧各一个通道。通道01-通道03表示上面一整个通道,下面左右两侧各一个通道。可以自行在videobox类中增加或者修改。

    2.7 声音调节

    在主界面画面栏右下角,按下声音图标自动弹出声音调节面板,失去焦点自动隐藏,拉动声音滚动条来调节声音大小,还有静音切换。右下角的声音和静音切换是针对所有通道的,单个通道可以在每个通道的悬浮条工具栏中单击静音切换按钮。

    2.8 视频轮询

    参数说明:

    2.9 通道交换

    通道交换功能很常用,一般用户喜欢调整自己想要的通道显示到前面或者占据画面的更大部分,比如6画面8画面的时候,左侧有一个画面占据很大的位置,一般这个用来显示重要性最高的实时视频,如果需要通道交换,则按住通道拖动到另外一个通道上面松开鼠标即可,会立即应用,瞬间切换,这里切记不要移出视频画面外,移出去表示删除。

    本系统也封装了代码中动态控制切换和动态交换,具体演示示例代码在DeviceThreadUI类中,具体全局调用函数在AppEvent类中,具体执行在frmVideoPanelTool窗体类中。

    2.10 云台控制

    如果需要控制云台移动,先要选择对应的通道,边缘会高亮,进行云台控制的前提是该摄像机要是支持云台的摄像机,很多人以为啥摄像机都可以移动,这是错误的,如果摄像机不支持云台,这个功能就别玩了,玩不起,经常遇到一些人说怎么云台不能用了,一检查尼玛原来摄像机根本没有云台。

    本系统云台控制走的是onvif协议,没有使用私有协议,上百家厂家的摄像机,走私有协议会玩死人的,所以统一采用onvif通用协议,需要提前在系统设置中的摄像机管理,搜索摄像机,输入正确的onvif用户信息后一键获取到云台地址。具体操作参见 设备搜索

    2.11 设备控制

    设备控制部分,目前可以获取和设置图片参数、手动校时、重启设备、抓拍图片等,和云台控制操作一样,操作前也是需要选中某个通道,然后才是对选中的通道进行设备控制,比如图片参数中的明亮度、对比度、饱和度、尖锐度。

    后面把OSD配置模块和网络配置模块也放在这里,因为这几个模块参数排列不适合作为悬停模块,所以统一放在设备控制模块中,通过单击按钮切换出来。

    2.12 报警订阅

    本系统默认支持海康、大华、宇视、华为、天地伟业等厂家的摄像机的报警事件订阅,可以在系统设置中的视频参数设置中开启事件订阅开关,如果摄像机已经开启了报警事件的话(一般摄像机的网页配置界面进去有移动侦测、遮挡报警、人脸识别、报警输入等各种),默认一般是关闭的,比如摄像机后面的开关量输入报警接口,需要web页面进去设置开启。具体操作参见 报警输入设置

    报警订阅走的是onvif协议,具体事件内容和含义可以在config/event.txt事件字典表中修改,由于onvif事件有多种,而且不同厂家对应关键字对应的事件含义可能不一样,不同厂家的设备可能含义有点出入,所有可以通过事件字典表自行更改,对应内容含义 事件等级/唯一标识/报警字样/解除字样,默认程序按照这个表中的进行过滤,不在表中的可以正常收到但是不会处理。具体处理逻辑代码在DeviceOnvif类中。

    常用几种事件字典:

    2.13 悬浮工具

    悬浮条功能介绍:

    1. 内置悬浮条控件,悬浮条位置支持顶部、底部、左侧、右侧。

    2. 悬浮条控件参数包括边距、间距、背景透明度、背景颜色、文本颜色、按下颜色、位置、按钮图标代码集合、按钮名称标识集合、按钮提示信息集合。

    3. 悬浮条控件一排工具按钮可自定义,通过结构体参数设置,图标可选图形字体还是自定义图片。

    4. 悬浮条按钮内部实现了录像切换、抓拍截图、静音切换、电子放大、关闭视频等功能,也可以自行在源码中增加自己对应的功能。

    5. 悬浮条按钮对应实现了功能的按钮,有对应图标切换处理,比如录像按钮按下后会切换到正在录像中的图标,声音按钮切换后变成静音图标,再次切换还原。

    6. 悬浮条按钮单击后都用名称唯一标识作为信号发出,可以自行关联响应处理。

    7. 悬浮条空白区域可以显示提示信息,默认显示当前视频分辨率大小,具体要显示哪些信息在系统设置中的功能激活中勾选。

    2.14 电子放大

    在悬浮条中单击电子放大按钮,可以切换到电子放大状态,然后在画面上选取一块区域,选取的时候会自动绘制对应的矩形,鼠标松开后会自动放大显示选取的区域。为了能够区分哪些通道处于电子放大状态,在单击了电子放大按钮后,悬浮条会一直显示,直到再次单击该按钮撤出电子放大状态。画面模式和原始的视频显示模式一致,如果画面模式是拉伸填充则电子放大的画面也是拉伸填充。

    2.15 标签图形

    可动态添加任意多个osd标签信息,标签信息包括名字、是否可见、字号大小、文本文字、文本颜色、标签图片、标签坐标、标签格式(文本、日期、时间、日期时间、图片)、标签位置(左上角、左下角、右上角、右下角、居中、自定义坐标)。

    具体结构体参数和使用方法如下: