diff --git a/docs/video_system/index.html b/docs/video_system/index.html index c2be959..19bfce3 100644 --- a/docs/video_system/index.html +++ b/docs/video_system/index.html @@ -693,11 +693,11 @@ header, .context-menu, .megamenu-content, footer{
可执行文件在源码同级目录的bin目录下。
编译完成后记得将源码下的file目录下(切记是file目录下而不是file目录)的所有文件复制到可执行文件同一目录。
如果开启了视频监控(默认开启),则记得将对应的动态库文件复制到可执行文件同一目录。比如采用ffmpeg内核(默认就是ffmpeg)的话,则将下载到的dll_ffmpeg4下的所有文件复制到可执行文件同一目录。
各个操作系统对应的ffmpeg编译好的动态库以及miniblink的动态库下载地址。 +
可执行文件在源码同级目录的bin目录下。
编译完成后记得将源码下的file目录下(切记是file目录下而不是file目录)的所有文件复制到可执行文件同一目录。
如果开启了视频监控(默认开启),则记得将对应的动态库文件复制到可执行文件同一目录。比如采用ffmpeg内核(默认就是ffmpeg)的话,则将下载到的dll_ffmpeg4下的所有文件复制到可执行文件同一目录。
各个操作系统对应的ffmpeg编译好的动态库以及miniblink的动态库下载地址。 https://pan.baidu.com/s/13LDRu6mXC6gaADtrGprNVA 提取码: ujm7。
如果是64位的qt则对应的dll是拷贝dll_ffmpeg4_64目录下的,64位的linux对应的是liblinux64.tar.gz。
本系统支持ffmpeg2/3/4/5/6所有版本,默认是ffmpeg4,如果要支持XP需要用ffmpeg2/3。如果是在linux/mac系统上编译记得查看core_videoffmpeg/下面的 linux系统和mac系统上库的用法.txt/编译阶段linux系统ffmpeg库放置位置.jpg/运行阶段linux系统ffmpeg库放置位置.jpg。
如果编译运行提示miniblink文件不存在请先拷贝,则说明你当前用的Qt版本没有浏览器模块,要么没安装,要么不支持,你也不用担心啥,此时自动切换用的miniblink浏览器内核,你还需要将ffmpeg库下载的网盘的地方找到dll_miniblink.zip下载解压到可执行文件同一目录即可。
系统中所有的图标,都采用的图形字体,对照表在doc目录下的FontAwesome.png、FontAliBaBa.png,对应图形字体类IconHelper中加载的图形字体,后期如果还有增加的其他图形字体也是放在这里,一个类支持多种图形字体,通过不同的值范围自动设置。
如果发现地图打不开或者提示秘钥文件丢失,请先确认file目录下的所有文件有没有拷贝过去。
如果是用vs+qt可能报错 error LNK2026,解决办法详细见本文档中13其他说明/13.5环境使用qt+vs。
默认用户名admin 密码admin。
系统配置参数在加载的时候会对节点值进行过滤判断,如果为空会自动用初始值生成新的配置文件,如果不想要显示版权所有公司,可以填xxx而不是删掉整个值。
如果是用vlc推流的rtsp地址,比如 rtsp://:8554/aabb,由于vlc推流默认写死的采用的udp协议,所以监控系统也必须在系统设置中通信方式选择udp才行(默认tcp)。
本系统没有说基于哪个Qt版本,由于系统中电子地图模块用到了浏览器模块,所以理论上要求你电脑的Qt版本也有浏览器模块才行。
如果没有浏览器模块则电子地图模块不可用,但是其余功能全部可用,没有任何影响。
支持Qt4.7以上的所有版本,亲测msvc、mingw、gcc、clang、armgcc各种编译器,亲测xp、win7、win10、linux、mac、树莓派、香橙派、全志H3、cotex-A9、imx6等。
2021-1-6开始集成了miniblink浏览器内核,意味着mingw版本的qt5.6以上版本也全部支持,这样就所有系统都有浏览器模块不需要担心没有电子地图的问题。Qt6.4.1到Qt6.5.1之间的版本,miniblink浏览器控件会和openglwidget冲突导致白屏,建议避开这几个版本。
部分构建套件可能不支持预编译头,预编译头仅仅是为了加快编译速度,和程序本身无关。比如在win+Qt5.5 5.6就发现不支持,也可能是支持的不够全面,如果编译发生错误可以试着打开pro文件注释掉PRECOMPILED_HEADER = head.h 这行。
Qt6.2的mingw版本的multimedia模块不可用,msvc版本的正常。
开启视频存储后默认存储的MP4格式的文件,如果想要调整体积大小,可以找到core/core_videoffmpeg/ffmpegsave.cpp videoCodecCtx->bit_rate = FFmpegHelper::getBitRate(videoWidth, videoHeight); 将这个码率调小即可,比如 videoCodecCtx->bit_rate = FFmpegHelper::getBitRate(videoWidth, videoHeight)/2; 可以将体积减少一半,相应的画质也会差一些。
推荐用64位的Qt搭配64位的ffmpeg,目前绝大部分系统都是64位的,能获得最大性能提升,本人亲自对比测试32位和64位,64位无论资源占用和操作响应等体验都更优。尤其是开启硬解码后,如果64个通道都需要硬解码,32位的测试下来貌似资源不够用。
如果更改appconfig.cpp中的值发现没有变化,那是因为里面的值是用来默认生成配置文件的值,如果配置文件已经存在,则对应变量是从配置文件读取的值,如果想要更改后的默认值生效,需要删除配置文件(config/video_system.ini)重新打开程序即可。
内核ffmpeg画框画文字水印等采用的滤镜实现,默认硬解码的数据是NV12不支持滤镜,意味着画框等无效,绘制文字有效,如果一定要在硬解码的帧数据画框,可以使用包含各种形状比如正方形/三角形/矩形的图形字体,指定图形字体的值来绘制。
如果在linux系统编译提示 -disable-new-dtags: unknown option ,打开core_videobase/core_videobase_include.pri ,把底部 DTAGS = ,-disable-new-dtags 整行注释就行。
关于声音的几点说明:系统中有多个声音相关的控制参数,一个是decodeAudio,用于控制是否解码音频数据;一个是playAudio,用于控制是否将解码后的音频数据发到声卡进行播放;一个是soundMute,用于控制声音大小为静音;在视频控件上的音量图标切换是用于切换静音。音频振幅也就是音柱的变化,只要声卡那边有数据播放,无论静音与否,都会有音频振幅效果。
离线地图可以用网上的瓦片地图下载器下载百度的离线地图放到对应目录即可。
也可以直接下载网盘中已经下载好的上海市的离线地图。
下载地址:https://pan.baidu.com/s/1ZxG-oyUKe286LPMPxOrO2A 提取码:o05q 文件名称:bin_map_tiles.tar.xz
使用说明
将压缩包下的两个文件夹复制到对应可执行文件下的config文件夹下,和map.js文件同一级目录。
tiles文件夹是街道图,tiles_hybrid文件夹是卫星图,tiles_self是路网图,路网图和卫星图合并就是混合图。
默认提供的是上海市徐汇区的瓦片地图,如果自己用万能地图下载器下载的百度地图的瓦片文件,也可以对应替换就行。
要注意的是格式,默认是jpg,如果下载的瓦片地图格式是png则需要打开config文件夹下的map_load.js文件,将.jpg改成.png保存即可。
本源码项目文件中对编译生成的临时文件和可执行文件做了重定向,可执行文件并不在build开头的目录下,而是在源码同级目录的bin目录下。
config目录放的是软件的配置文件、地图模块需要的图片资源等。
db目录一般有三个文件,key.db是秘钥文件、video_system.db是对应sqlite的数据库文件、video_system.sql是对应数据库脚本(可以在系统设置中数据库管理部分执行脚本用来切换到mysql等其他数据库)。
logo目录存放的各种左上角软件LOGO图片,可以在系统设置中下拉选择。
map目录存放的图片地图模块所用的地图图片文件,可以手动拷贝到此。
sound目录存放的本系统所用的声音文件。
layout目录存放的不同工作模式不同界面对应的布局方案配置文件。
本视频监控系统做的是通用的系统,主要偏重整体框架和UI交互等。
主要功能包括摄像机管理,实时视频显示,视频轮询、视频存储、设备地图显示,各种画面切换,各种悬停子模块、onvif搜索设备和云台控制及预置位,通用的NVR视频流播放(比如海康的NVR支持直接取流回放),录像计划、用户管理等功能。
如果是依赖SDK去实现的功能(雨刷、去雾等)都没有做,那个破坏了兼容性,无法通用其他摄像机设备以及其他操作系统。
每个厂家SDK和定制的功能都不一样,如果有这方面的需要都是买过去自己加上SDK的功能和自己定制需要的功能。
整个项目源代码行数大概30W行(项目代码本身除去第三方库以后约7W行,就是自己写的部分),其中代码13.5W行(占比45%),注释12.7W行(占比42%),空行3.5W行。分层设计注释详细。
本程序会一直持续迭代更新,包括项目源码、整体框架、使用说明等,一次购买终生售后。
程序本身是个客户端(直接从摄像机或者NVR等设备取rtsp视频流)并不是服务器程序,对标的是海康大华的PC客户端程序,只不过海康大华的客户端默认只支持自家的设备,而本程序支持各个厂家的设备。
摄像机管理没有限制摄像机的数量,理论上10000路肯定没有问题,就是个数据库记录。
实时显示具体能支持多少路,和具体的电脑配置有关(亲测1.8G主频8G内存I5子码流64路,总之比海康大华客户端要更优秀)。
程序实时显示界面最大可以到64路,每个通道都是打开的时候才会去建立连接取视频流,而不是一开始就建立了连接。
系统采用onvif协议+rtsp视频流机制,并不限定支持哪家的摄像机,只要符合这两种协议的都支持,市面上99%的网络摄像机都支持这两种基础协议,包括但不限于海康、大华、宇视、天地伟业、华为等各种安防厂家的摄像机。
本系统没有内置人脸识别等任何相关算法,提供的是相关的接口,比如自己的算法识别到人脸区域后,将区域坐标传入视频控件自动绘制。
系统采用纯QtWidget(非qml)编写,解码采用ffmpeg,搜索采用onvif协议,视频播放采用rtsp协议,所有源码开放,没有封装的库。
同时集成了数据库、多线程、串口通信、网络通信、音视频解码/同步/存储、网页地图、界面美化、UI布局等众多知识点。
未经本人许可不可将本项目源码扩散,如有发现本人将追究法律责任,谢谢配合。
产品主页:https://blog.csdn.net/feiyangqingyun/article/details/97565652
在线文档:https://feiyangqingyun.gitee.io/qwidgetdemo/video_system/
体验地址:https://pan.baidu.com/s/1d7TH_GEYl5nOecuNlWJJ7g 提取码:01jf 文件名:bin_video_system.zip。
文章导航:https://qtchina.blog.csdn.net/article/details/121327495
视频监控模块,各种停靠小窗体子模块,包括设备列表、图文警情、窗口信息、云台控制、预置位、巡航设置、设备控制、悬浮地图、网页浏览等。
视频回放模块,包括本地回放、远程回放、设备播放、图片回放、视频上传等。
电子地图模块,包括图片地图、在线地图、离线地图、路径规划等。
日志查询模块,包括本地日志、设备日志等。
系统设置模块,包括系统设置(基本设置、视频参数、数据库设置、地图配置、串口配置等)、录像机管理、摄像机管理、轮询配置、录像计划、用户管理等。
支持各种视频流(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预置位,可以添加、删除、修改预置位,可以调用起始位。
支持OSD增删改查,可以通过onvif协议添加及修改OSD信息。
支持onvif图像参数设置,包括明亮度、对比度、饱和度、尖锐度等。
支持onvif其他操作,包括抓图、网络设置、校时、重启、事件订阅等。
支持任意onvif摄像机,包括但不限于海康、大华、宇视、天地伟业、华为等。
可保存视频,可通过录像计划存储,也可在悬浮条手动切换开始录像和停止录像。
可设置视频流通信方式tcp或udp,可设置视频解码是速度优先、质量优先、均衡处理、最快速度等。
可设置软件中文名称、英文名称、LOGO图标等。
存储的视频文件支持导出到指定目录,支持批量上传到服务器。
完善的录像计划设置,支持每个通道7 * 24小时每半小时设置是否存储录像。
音视频同步显示以及音视频同步存储到MP4文件。
主界面采用停靠窗体模式,各种组件以小模块的形式加入,可自定义任意模块加入。
停靠模块可拖动任意位置嵌入和悬浮,支持最大化全屏,支持多屏幕。
双重布局文件存储机制,正常模式、全屏模式都对应不同的布局方案,自动切换和保存,比如全屏模式可以突出几个模块透明显示在指定位置,更具科幻感现代化。
原创onvif协议机制,采用底层协议解析(udp广播搜索+http请求执行命令)更轻量易懂易学习拓展,不依赖任何第三方组件比如gsoap。
原创数据导入、导出、打印机制,跨平台不依赖任何组件,瞬间导出数据。
内置多个原创组件,宇宙超值超级牛逼,包括数据导入导出组件(导出到xls、pdf、打印)、数据库组件(数据库管理线程、自动清理数据线程、万能分页、数据请求等)、地图组件、视频监控组件、文件多线程收发组件、onvif通信组件、通用浏览器内核组件等。
自定义信息框+错误框+询问框+右下角提示框(包含多种格式)等。
精美换肤,高达20套皮肤样式随意更换,所有样式全部统一,包括菜单等。
选中通道对应设备树节点高亮,选中通道节点对应视频控件高亮,方便查看当前通道信息。
视频控件悬浮条可以自行增加多个按钮,监控界面底部小工具栏也可自行增加按钮。
双击摄像机节点自动播放视频,双击节点自动依次添加视频,会自动跳到下一个,双击父节点自动添加该节点下的所有视频。可选主码流、子码流。
录像机管理、摄像机管理,可添加删除修改导入导出打印信息,立即应用新的设备信息生成树状列表,不需重启。
可选多种内核自由切换,ffmpeg、vlc、mpv等,均可在pro中设置。推荐用ffmpeg,跨平台最多,默认提供好了linux和mac平台上编译好的库。
支持硬解码,可设置硬解码类型(qsv、dxva2、d3d11va等)。
默认采用opengl绘制视频,超低的CPU资源占用,支持yuyv和nv12两种格式绘制,性能爆表。
标签和图形信息支持三种绘制方式,绘制到遮罩层、绘制到图片、源头绘制(对应信息可以存储到文件)。
包括但不限于视频监控内核组件的所有功能,可参阅说明书中功能介绍 视频监控内核。
高度可定制化,用户可以很方便的在此基础上衍生自己的功能,比如增加自定义模块,增加运行模式、机器人监控、无人机监控、挖掘机监控等。
支持xp、win7、win10、win11、linux、mac、各种国产系统(UOS、中标麒麟、银河麒麟等)、嵌入式linux等系统。
注释完整,项目结构清晰,超级详细完整的使用开发手册,精确到每个代码文件的功能说明,不断持续迭代版本。
由于编解码涉及到很多参数,一般都按照默认参数进行处理。
部分用户有时候希望通过填入的播放地址就带上这些信息,比如通信协议、桌面采集的分辨率、编码保存是否转码、转码是否缩放原图等。
各种参数设置有个优先级,优先取地址中带的,没有带则取结构体中的,还没有则取默认值。
有些值会根据具体情况自动调整,比如本地设备采集没有硬解码,udp开头的视频流强制用udp协议,有些不支持硬解的格式自动将硬解码=none。
对于需要在地址中指定参数,对应占位符不填的需要占位符留空,不可以跳过。
占位符中填了对应参数的必须严格按照指定的格式要求,不按照则很可能导致解析失败。
参数用英文竖杠 | 隔开。
格式要求: url|transport|decodeType|encodeVideo|encodeVideoFps|encodeVideoRatio|encodeVideoScale。
url表示媒体地址,比如 f:/1.mp3 d:/1.mp4 rtsp://192.168.0.100 等。
transport表示通信协议,可选 tcp/udp,一般用于rtsp视频流,很多时候在linux系统中必须指定tcp,rtsp摄像头才能正常采集。
decodeType表示解码策略,0-速度优先,1-质量优先,2-均衡处理,3-最快速度(不做音视频同步,收到就立马解码和显示)。
encodeVideo表示视频编码格式,0-不做处理,1-自动转码(源头是264就264/265就265),2-强制用264编码,3-强制用265编码。
encodeVideoFps表示编码帧率,默认取源头流的帧率,如果指定了则取指定的。
encodeVideoRatio表示视频压缩比率,对应bit_rate的值,在不改变分辨率的情况下,通过调整这个参数来控制保存文件体积的大小。范围值0-1。
encodeVideoScale表示视频缩放值,字符串类型,如果值float值,则相当于在原有分辨率按照这个值等比例缩放,比如encodeVideoScale=0.5,视频源分辨率是1920x720,则编码保存按照960x360这个分辨率保存。如果是640x480,则按照指定的这个分辨率强制缩放,可能会变形。
格式要求:url|bufferSize|frameRate|codecName。
url表示媒体地址,采集摄像头统一约定 video=或者audio=开头。
bufferSize表示分辨率,可填1280x720这种,不填默认640x480。
frameRate表示帧率,不填默认25。
codecName表示解码器名称,有些本地摄像头可以指定解码器名称比如mjpeg/h264,前提是要该设备支持该解码器。默认为空则不指定会自动处理。
win系统如何查看设备名见本文档中 打开本地摄像头。
linux系统查看设备名直接执行命令 ls /dev/video * 即可,一般对应的设备名是 /dev/video0。
下面假定本地摄像头的设备名为 USB Video Device。
写法1:video=USB Video Device,这种写法默认按照640x480分辨率打开摄像头。
写法2:video=USB Video Device|1280x720|30,这种写法按照指定的分辨率1280x720以及采集帧率30来打开摄像头。
写法3:video=/dev/video0,这种是对应linux系统,程序内部会自动过滤和调整填入的地址。
写法4:audio=麦克风 (USB Audio Device),只采集本地麦克风。
写法5:video=USB Video Device:audio=麦克风 (USB Audio Device),同时采集本地摄像头和麦克风。
写法6:video=USB Video Device|1920x1080|30|h264,按照1080P分辨率30帧h264格式解码来打开摄像头。
约定audio=开头是只采集音频,video=开头可以采集视频或者视音频。
如果指定了分辨率和帧率则需要硬件支持才行,比如摄像头的最大分辨率是640x480,而指定了1280x720则会打开失败。
格式要求:url|bufferSize|frameRate|offsetX|offsetY|screenIndex|encodeVideoScale。
url表示媒体地址,采集桌面统一约定 screen=开头。
bufferSize表示采集分辨率,不填则默认取屏幕分辨率。
frameRate表示采集帧率,基本上在2-30之间,不填的话默认ffmpeg会设定一个值,有时候是30。
offsetX/offsetY表示偏移值XY坐标,从屏幕的左上角(0,0)开始。
screenIndex表示屏幕索引,不填的话则默认取当前鼠标所在屏幕。在多个屏幕的时候可通过此参数指定屏幕索引。
encodeVideoScale表示缩放,1表示原始比例(默认值1),0.2则表示按照原始分辨率等比例0.2倍缩放,也可以填400x300表示强制按照这个分辨率缩放。这个在高分辨率的时候特别有用,比如采集的桌面分辨率很大,但是传输的时候受限于带宽,需要等比例压缩一下再传输,此时可以填0.5/0.2之类的值。
写法1:screen=desktop,当前屏幕全屏采集。
写法2:screen=desktop||15|0|0|1,屏幕2全屏采集,帧率15。
写法3:screen=desktop|800x600|10|50|100,鼠标所在当前屏幕采集,采集区域rect(50,100,800,600),帧率10。
写法4:screen=desktop|10x10,约定10x10分辨率表示所有屏幕合并到一个屏幕采集,比如两个屏幕的时候,当做一个屏幕整体采集。当合并屏幕采集的时候,XY偏移值参数无效。
写法5:screen=desktop|800x600|25|1500|300|255,约定屏幕索引255则取用户自定义的区域,该字符串表示采集区域是(1500, 300, 800, 600),自由区域,可以任意指定,比如两个屏幕中间区域。前提只要保证该区域在两个屏幕区域中,如果超过了的话可能采集失败,这要求用户需要对采集区域精准定位。
写法6:screen=title=MainWindow,对指定窗口标题是MainWindow的窗体采集。支持中文标题比如screen=title=系统设置。
经过大量测试发现,如果打包发布的Qt程序带了qt.conf文件并且里面指定了 WindowsArguments = dpiawareness=0 ,在电脑分辨率设置了缩放比不为100%的时候,计算出来的桌面区域未必正确,建议如果此种情况下一定要采集正确的桌面,去掉qt.conf文件中的对应内容或者删除qt.conf文件即可。
中央综合:http://39.135.138.60:18890/PLTV/88888910/224/3221225618/index.m3u8
中央新闻:http://39.135.138.60:18890/PLTV/88888910/224/3221225638/index.m3u8
中央音乐:http://39.135.138.60:18890/PLTV/88888910/224/3221225641/index.m3u8
中央电视:http://39.135.138.60:18890/PLTV/88888910/224/3221225635/index.m3u8
中央记录:http://39.135.138.60:18890/PLTV/88888910/224/3221225646/index.m3u8
中央少儿:http://39.135.138.60:18890/PLTV/88888910/224/3221225639/index.m3u8
湖南卫视:http://39.135.138.60:18890/PLTV/88888910/224/3221225745/index.m3u8
深圳卫视:http://39.135.138.60:18890/PLTV/88888910/224/3221225741/index.m3u8
上海纪实:http://39.135.138.60:18890/PLTV/88888910/224/3221225654/index.m3u8
天津卫视:http://39.135.138.60:18890/PLTV/88888910/224/3221225739/index.m3u8
万能办法,用谷歌或者谷歌内核的浏览器,打开时光网 http://www.mtime.com/ ,随便打开个视频,这里一般是预告片,按F12切换到审查元素,顶部切换到网络,选中媒体,刷新网页,按照尺寸排列,最大的那个MP4文件就是,鼠标右键复制地址,这个地址就是完整的网络地址。
http://vfx.mtime.cn/Video/2021/11/16/mp4/211116131456748178.mp4
http://vfx.mtime.cn/Video/2023/03/09/mp4/230309152143524121.mp4
http://vfx.mtime.cn/Video/2023/03/07/mp4/230307085324679124.mp4
http://vfx.mtime.cn/Video/2022/07/18/mp4/220718132929585151.mp4
http://vfx.mtime.cn/Video/2022/12/17/mp4/221217153424902164.mp4
http://vfx.mtime.cn/Video/2022/07/04/mp4/220704110656040153.mp4
http://vfx.mtime.cn/Video/2021/02/08/mp4/210208150307073134.mp4
http://vfx.mtime.cn/Video/2021/05/11/mp4/210511114524329144.mp4
http://vfx.mtime.cn/Video/2021/04/20/mp4/210420113022586184.mp4
http://vfx.mtime.cn/Video/2021/03/13/mp4/210313111010421158.mp4
http://vfx.mtime.cn/Video/2020/01/15/mp4/200115125943120574.mp4
百度视频
https://vd2.bdstatic.com/mda-nhpqy7k8xamgiqw3/720p/h264/1661362621500413748/mda-nhpqy7k8xamgiqw3.mp4
https://vd2.bdstatic.com/mda-nhp9zvu4tiinsp7z/576p/h264/1661324637707658476/mda-nhp9zvu4tiinsp7z.mp4
https://vd4.bdstatic.com/mda-nhp77xn7fx3e0jgb/576p/h264/1661317610850513689/mda-nhp77xn7fx3e0jgb.mp4
https://vd2.bdstatic.com/mda-nhp72n8xvbtdcmcq/576p/h264/1661317214259599500/mda-nhp72n8xvbtdcmcq.mp4
https://vd2.bdstatic.com/mda-nhp6z0in87tvw77v/576p/h264/1661316943890074768/mda-nhp6z0in87tvw77v.mp4
http://vd3.bdstatic.com/mda-jennyc5ci1ugrxzi/mda-jennyc5ci1ugrxzi.mp4
时间很短的视频文件
https://highlight-video.cdn.bcebos.com/video/6s/95ae2066-ee02-11ed-9f01-6c92bf5ceb6f.mp4
https://highlight-video.cdn.bcebos.com/video/6s/1a74a352-d1fb-11ed-829b-6c92bf468c1f.mp4
https://highlight-video.cdn.bcebos.com/video/6s/e0d35168-edf5-11ed-8709-6c92bf3b0281.mp4
https://highlight-video.cdn.bcebos.com/video/6s/0757f6ec-ee03-11ed-85d3-6c92bf3b0af4.mp4
https://highlight-video.cdn.bcebos.com/video/6s/6ffb9cbe-ee01-11ed-916c-6c92bfb45e04.mp4
专业测试视频播放器的各种文件 http://samples.mplayerhq.hu/
下面列出的是一些常用厂家的格式,不同厂家格式不一样,具体什么格式请咨询厂家索要对应的视频流格式,或者设备支持onvif的话,通过onvif工具搜索可以拿到视频流格式。
实时预览格式:rtsp://admin:12345@192.168.1.128:554/Streaming/Channels/101?transportmode=unicast
视频回放格式:rtsp://admin:12345@192.168.1.128:554/Streaming/tracks/101?starttime=20120802t063812z&endtime=20120802t064816z
流媒体视频流:rtsp://172.6.24.15:554/Devicehc8://172.6.22.106:8000:0:0?username=admin&password=12345
日期时间格式:ISO 8601 表示Zulu(GMT) 时间 YYYYMMDD”T”HHmmSS.fraction”Z”,
单播多播说明:unicast表示单播,multicast表示多播,默认单播,可以省略。
通道码流说明:101,1是通道号,01是通道的码流编号,也可以是02、03,第2通道主码流=201,第16通道子码流=1602,依次类推。
实时预览格式:rtsp://192.168.1.128:554/cam/realmonitor?channel=1&subtype=0&unicast=true&proto=Onvif
视频回放格式:rtsp://admin:12345@192.168.1.128:554/cam/playback?channel=1&subtype=0&starttime=2021_03_18_11_36_01&endtime=2021_03_18_12_05_01
格式内容说明:channel表示通道,subtype表示码流编号,日期时间字符串非常明确。
实时预览格式:rtsp://admin:12345@192.168.1.128:554/live?channel=1&stream=1
视频回放格式:rtsp://admin:12345@192.168.1.128:554/file?channel=1&start=1494485280&stop=1494485480
其他通用格式:rtsp://admin:12345@192.168.1.128:554/0 0-主码流 1-子码流
日期时间说明:先转换时间戳,1970年到该时间经过的秒数。
由于视频流源头限制,可能有些源头只支持tcp/udp协议的一种,就需要手动指定。
指定tcp协议打开视频流:rtsp://admin:12345@192.168.1.128/1|tcp
指定udp协议打开视频流:rtmp://livetv.dhtv.cn:1935/live/financial|udp
系统启动后,首先会弹出用户登录界面,从用户姓名的下拉框选择用户名,然后输入密码(默认用户名密码都是admin),单击登录按钮,密码正确则会进入到系统主界面,错误会弹出提示,错误超过三次自动关闭,需要重新打开软件。
在登录界面可以勾选是否记住密码,是否自动登录,如果勾选了记住密码,则下次启用软件会自动填入最后用户的密码,勾选了自动登录(以最后的用户信息作为当前登录用户)则启动后直接进入主界面。如果开启了自动登录,不会弹出登录界面,可以在系统设置中关闭自动登录和记住密码。
在主界面单击右上角的关闭按钮,会弹出用户退出界面,需要输入密码验证防止误关闭,会自动填入登录的用户名,密码输入正确才会退出软件。用户登录和退出都内置了超级密码a防止管理员忘记密码。
主界面由顶部主菜单导航、左侧右侧停靠窗体(设备列表、窗口信息、图文警情、悬浮地图、云台控制、设备控制、预置巡航、视频轮询等)、中间视频监控主画面组成,其中左右两侧的停靠窗体可以拉伸宽度,上下停靠窗体之间也可以拉伸高度,每个停靠窗体都可以关闭和悬浮。自动保存布局文件,下次启动自动应用。
所有模块都是停靠窗体。
可以任意组合多种子模块。
模块可停靠悬浮。
在普通模式和全屏模式都有独立的布局文件。
不同的工作模式都可对应不同的布局文件。
左侧和右侧的面板,可以通过单击面板右上角的关闭按钮来隐藏,当隐藏一个面板以后,剩余的面板会自动填充布局,如果需要重新显示面板,则在标题栏鼠标右键就可以对小面板进行显示和隐藏,右上角的时间和CPU显示面板可以在系统设置中控制显示隐藏。系统会自动记住最后的布局比如显示的面板和宽高占比,下次启动后自动应用。
在停靠窗体的标题栏鼠标右键也会弹出子窗体的开启菜单,复选框勾选表示显示,悬浮的窗体没有这个特性,一定要是嵌入在主界面中的子窗体标题栏才有。
如果是全屏模式,由于没有了标题栏,想要关闭模块的话,需要将其拖动到边缘嵌入主窗体,然后在标题栏鼠标右键菜单中关闭即可。
面板和面板之间有个分隔条,鼠标移到对应分隔条的地方,会变成可拉动的鼠标指针,此时可以上下左右拉动调整宽高,调整好以后会自动保存宽高比例,下次启动后自动应用最后的配置来显示。
视频播放支持多种方式:
双击子节点播放单个摄像机,在当前选中通道处播放。
双击父节点播放整个录像机的摄像机,依次排列。
按住子节点拖曳到对应通道,播放摄像机。
本地文件直接拖曳到通道,自动播放本地文件。
启动后自动播放最后通道的视频信息。
代码接口提供指定通道播放url,AppEvent::Instance()->slot_loadVideo。
代码接口提供指定两个通道交换,AppEvent::Instance()->slot_changeVideo,比如报警的时候将某个通道移到最前面显示。
视频截图支持多种方式:
监控通道鼠标右键,弹出菜单选择截图当前视频/截图所有视频。
视频面板底部工具栏截图按钮。
每个通道悬浮工具条截图按钮。
截图默认保存在可执行文件所在目录下的image_normal目录,文件名格式ch01_2028-11-24-13-41-24-000.jpg。
底部工具栏截图按钮触发截图后会弹出提示抓拍文件后的保存位置。
有多种方法可以删除视频:
鼠标右键删除当前视频。
鼠标右键删除所有视频。
按住通道画面移出视频监控画面。
悬浮条关闭按钮。
-
系统支持多画面切换,全屏切换等,包括1/4/6/8/9/13/16/25/36/64画面切换,如果还需要增加更多的画面比如81/100/255等,可以直接在videobox.cpp源码中稍微修改即可。
画面切换支持多种方式:
鼠标右键画面切换。
底部左侧画面切换缩略图。
快捷键alt+enter全屏。
快捷键esc退出全屏。
切换到X画面,标准的行列数通道布局,比如竖屏一般需要4x2这种,表示4行2列布局。
切换到Y画面,自定义的一些布局,比如通道01-通道02表示左右两侧各一个通道。通道01-通道03表示上面一整个通道,下面左右两侧各一个通道。可以自行在videobox类中增加或者修改。
在主界面画面栏右下角,按下声音图标自动弹出声音调节面板,失去焦点自动隐藏,拉动声音滚动条来调节声音大小,还有静音切换。右下角的声音和静音切换是针对所有通道的,单个通道可以在每个通道的悬浮条工具栏中单击静音切换按钮。
参数说明:
自动轮询:开启后在软件启动后会自动轮询。
轮询间隔:可选5s、10s、30s、60s等,按照此间隔切换下一组视频。
轮询画面:可选1画面、4画面、9画面、16画面,轮询的时候按照多少个通道同时显示。
轮询方案:也可以叫轮询分组,在系统设置中配置。
启动轮询:单击后会启动轮询,轮询是通过定时器控制的,到了时间就切换到下一屏画面。再次单击此按钮会停止轮询,停止轮询会复位轮询分组索引,下次轮询重新从第一个开始。
暂停轮询:单击后会暂停当前轮询,只是定时器暂停,当前轮询索引不变,再次单击从上一次轮询到的位置开始继续轮询。
通道交换功能很常用,一般用户喜欢调整自己想要的通道显示到前面或者占据画面的更大部分,比如6画面8画面的时候,左侧有一个画面占据很大的位置,一般这个用来显示重要性最高的实时视频,如果需要通道交换,则按住通道拖动到另外一个通道上面松开鼠标即可,会立即应用,瞬间切换,这里切记不要移出视频画面外,移出去表示删除。
本系统也封装了代码中动态控制切换和动态交换,具体演示示例代码在DeviceThreadUI类中,具体全局调用函数在AppEvent类中,具体执行在frmVideoPanelTool窗体类中。
1//指定通道显示视频 id从0开始
2void slot_loadVideo(int channel, int ipcID);
3void slot_loadVideo(int channel, const QString &url);
4//通道交换
5void slot_changeVideo(int channel1, int channel2);
如果需要控制云台移动,先要选择对应的通道,边缘会高亮,进行云台控制的前提是该摄像机要是支持云台的摄像机,很多人以为啥摄像机都可以移动,这是错误的,如果摄像机不支持云台,这个功能就别玩了,玩不起,经常遇到一些人说怎么云台不能用了,一检查尼玛原来摄像机根本没有云台。
本系统云台控制走的是onvif协议,没有使用私有协议,上百家厂家的摄像机,走私有协议会玩死人的,所以统一采用onvif通用协议,需要提前在系统设置中的摄像机管理,搜索摄像机,输入正确的onvif用户信息后一键获取到云台地址。具体操作参见 设备搜索 。
设备控制部分,目前可以获取和设置图片参数、手动校时、重启设备、抓拍图片等,和云台控制操作一样,操作前也是需要选中某个通道,然后才是对选中的通道进行设备控制,比如图片参数中的明亮度、对比度、饱和度、尖锐度。
后面把OSD配置模块和网络配置模块也放在这里,因为这几个模块参数排列不适合作为悬停模块,所以统一放在设备控制模块中,通过单击按钮切换出来。
本系统默认支持海康、大华、宇视、华为、天地伟业等厂家的摄像机的报警事件订阅,可以在系统设置中的视频参数设置中开启事件订阅开关,如果摄像机已经开启了报警事件的话(一般摄像机的网页配置界面进去有移动侦测、遮挡报警、人脸识别、报警输入等各种),默认一般是关闭的,比如摄像机后面的开关量输入报警接口,需要web页面进去设置开启。具体操作参见 报警输入设置 。
报警订阅走的是onvif协议,具体事件内容和含义可以在config/event.txt事件字典表中修改,由于onvif事件有多种,而且不同厂家对应关键字对应的事件含义可能不一样,不同厂家的设备可能含义有点出入,所有可以通过事件字典表自行更改,对应内容含义 事件等级/唯一标识/报警字样/解除字样,默认程序按照这个表中的进行过滤,不在表中的可以正常收到但是不会处理。具体处理逻辑代码在DeviceOnvif类中。
常用几种事件字典:
1,IsMotion,有人在移动,移动结束
1,IsInside,有人在闯入,入侵结束
1,LogicalState,开关量报警,报警结束
1,State,开关量联动,联动结束
1,IsTamper,遮挡报警,遮挡结束
悬浮条功能介绍:
内置悬浮条控件,悬浮条位置支持顶部、底部、左侧、右侧。
悬浮条控件参数包括边距、间距、背景透明度、背景颜色、文本颜色、按下颜色、位置、按钮图标代码集合、按钮名称标识集合、按钮提示信息集合。
悬浮条控件一排工具按钮可自定义,通过结构体参数设置,图标可选图形字体还是自定义图片。
悬浮条按钮内部实现了录像切换、抓拍截图、静音切换、电子放大、关闭视频等功能,也可以自行在源码中增加自己对应的功能。
悬浮条按钮对应实现了功能的按钮,有对应图标切换处理,比如录像按钮按下后会切换到正在录像中的图标,声音按钮切换后变成静音图标,再次切换还原。
悬浮条按钮单击后都用名称唯一标识作为信号发出,可以自行关联响应处理。
悬浮条空白区域可以显示提示信息,默认显示当前视频分辨率大小,具体要显示哪些信息在系统设置中的功能激活中勾选。
在悬浮条中单击电子放大按钮,可以切换到电子放大状态,然后在画面上选取一块区域,选取的时候会自动绘制对应的矩形,鼠标松开后会自动放大显示选取的区域。为了能够区分哪些通道处于电子放大状态,在单击了电子放大按钮后,悬浮条会一直显示,直到再次单击该按钮撤出电子放大状态。画面模式和原始的视频显示模式一致,如果画面模式是拉伸填充则电子放大的画面也是拉伸填充。
可动态添加任意多个osd标签信息,标签信息包括名字、是否可见、字号大小、文本文字、文本颜色、标签图片、标签坐标、标签格式(文本、日期、时间、日期时间、图片)、标签位置(左上角、左下角、右上角、右下角、居中、自定义坐标)。
具体结构体参数和使用方法如下:
x1//标签信息
2struct OsdInfo {
3 QString name; //名字唯一标识符(方便删除或更新)
4 bool visible; //是否可见
5 int fontSize; //字号大小
6 QString text; //文本文字
7
+ 系统支持多画面切换,全屏切换等,包括1/4/6/8/9/13/16/25/36/64画面切换,如果还需要增加更多的画面比如81/100/255等,可以直接在videobox.cpp源码中稍微修改即可。
画面切换支持多种方式:
鼠标右键画面切换。
底部左侧画面切换缩略图。
快捷键alt+enter全屏。
快捷键esc退出全屏。
切换到X画面,标准的行列数通道布局,比如竖屏一般需要4x2这种,表示4行2列布局。
切换到Y画面,自定义的一些布局,比如通道01-通道02表示左右两侧各一个通道。通道01-通道03表示上面一整个通道,下面左右两侧各一个通道。可以自行在videobox类中增加或者修改。
2.7 声音调节
在主界面画面栏右下角,按下声音图标自动弹出声音调节面板,失去焦点自动隐藏,拉动声音滚动条来调节声音大小,还有静音切换。右下角的声音和静音切换是针对所有通道的,单个通道可以在每个通道的悬浮条工具栏中单击静音切换按钮。
2.8 视频轮询
参数说明:
自动轮询:开启后在软件启动后会自动轮询。
轮询间隔:可选5s、10s、30s、60s等,按照此间隔切换下一组视频。
轮询画面:可选1画面、4画面、9画面、16画面,轮询的时候按照多少个通道同时显示。
轮询方案:也可以叫轮询分组,在系统设置中配置。
启动轮询:单击后会启动轮询,轮询是通过定时器控制的,到了时间就切换到下一屏画面。再次单击此按钮会停止轮询,停止轮询会复位轮询分组索引,下次轮询重新从第一个开始。
暂停轮询:单击后会暂停当前轮询,只是定时器暂停,当前轮询索引不变,再次单击从上一次轮询到的位置开始继续轮询。
2.9 通道交换
通道交换功能很常用,一般用户喜欢调整自己想要的通道显示到前面或者占据画面的更大部分,比如6画面8画面的时候,左侧有一个画面占据很大的位置,一般这个用来显示重要性最高的实时视频,如果需要通道交换,则按住通道拖动到另外一个通道上面松开鼠标即可,会立即应用,瞬间切换,这里切记不要移出视频画面外,移出去表示删除。
本系统也封装了代码中动态控制切换和动态交换,具体演示示例代码在DeviceThreadUI类中,具体全局调用函数在AppEvent类中,具体执行在frmVideoPanelTool窗体类中。
xxxxxxxxxx
51//指定通道显示视频 id从0开始
2void slot_loadVideo(int channel, int ipcID);
3void slot_loadVideo(int channel, const QString &url);
4//通道交换
5void slot_changeVideo(int channel1, int channel2);
2.10 云台控制
如果需要控制云台移动,先要选择对应的通道,边缘会高亮,进行云台控制的前提是该摄像机要是支持云台的摄像机,很多人以为啥摄像机都可以移动,这是错误的,如果摄像机不支持云台,这个功能就别玩了,玩不起,经常遇到一些人说怎么云台不能用了,一检查尼玛原来摄像机根本没有云台。
本系统云台控制走的是onvif协议,没有使用私有协议,上百家厂家的摄像机,走私有协议会玩死人的,所以统一采用onvif通用协议,需要提前在系统设置中的摄像机管理,搜索摄像机,输入正确的onvif用户信息后一键获取到云台地址。具体操作参见 设备搜索 。
2.11 设备控制
设备控制部分,目前可以获取和设置图片参数、手动校时、重启设备、抓拍图片等,和云台控制操作一样,操作前也是需要选中某个通道,然后才是对选中的通道进行设备控制,比如图片参数中的明亮度、对比度、饱和度、尖锐度。
后面把OSD配置模块和网络配置模块也放在这里,因为这几个模块参数排列不适合作为悬停模块,所以统一放在设备控制模块中,通过单击按钮切换出来。
2.12 报警订阅
本系统默认支持海康、大华、宇视、华为、天地伟业等厂家的摄像机的报警事件订阅,可以在系统设置中的视频参数设置中开启事件订阅开关,如果摄像机已经开启了报警事件的话(一般摄像机的网页配置界面进去有移动侦测、遮挡报警、人脸识别、报警输入等各种),默认一般是关闭的,比如摄像机后面的开关量输入报警接口,需要web页面进去设置开启。具体操作参见 报警输入设置 。
报警订阅走的是onvif协议,具体事件内容和含义可以在config/event.txt事件字典表中修改,由于onvif事件有多种,而且不同厂家对应关键字对应的事件含义可能不一样,不同厂家的设备可能含义有点出入,所有可以通过事件字典表自行更改,对应内容含义 事件等级/唯一标识/报警字样/解除字样,默认程序按照这个表中的进行过滤,不在表中的可以正常收到但是不会处理。具体处理逻辑代码在DeviceOnvif类中。
常用几种事件字典:
1,IsMotion,有人在移动,移动结束
1,IsInside,有人在闯入,入侵结束
1,LogicalState,开关量报警,报警结束
1,State,开关量联动,联动结束
1,IsTamper,遮挡报警,遮挡结束
2.13 悬浮工具
悬浮条功能介绍:
内置悬浮条控件,悬浮条位置支持顶部、底部、左侧、右侧。
悬浮条控件参数包括边距、间距、背景透明度、背景颜色、文本颜色、按下颜色、位置、按钮图标代码集合、按钮名称标识集合、按钮提示信息集合。
悬浮条控件一排工具按钮可自定义,通过结构体参数设置,图标可选图形字体还是自定义图片。
悬浮条按钮内部实现了录像切换、抓拍截图、静音切换、电子放大、关闭视频等功能,也可以自行在源码中增加自己对应的功能。
悬浮条按钮对应实现了功能的按钮,有对应图标切换处理,比如录像按钮按下后会切换到正在录像中的图标,声音按钮切换后变成静音图标,再次切换还原。
悬浮条按钮单击后都用名称唯一标识作为信号发出,可以自行关联响应处理。
悬浮条空白区域可以显示提示信息,默认显示当前视频分辨率大小,具体要显示哪些信息在系统设置中的功能激活中勾选。
2.14 电子放大
在悬浮条中单击电子放大按钮,可以切换到电子放大状态,然后在画面上选取一块区域,选取的时候会自动绘制对应的矩形,鼠标松开后会自动放大显示选取的区域。为了能够区分哪些通道处于电子放大状态,在单击了电子放大按钮后,悬浮条会一直显示,直到再次单击该按钮撤出电子放大状态。画面模式和原始的视频显示模式一致,如果画面模式是拉伸填充则电子放大的画面也是拉伸填充。
2.15 标签图形
可动态添加任意多个osd标签信息,标签信息包括名字、是否可见、字号大小、文本文字、文本颜色、标签图片、标签坐标、标签格式(文本、日期、时间、日期时间、图片)、标签位置(左上角、左下角、右上角、右下角、居中、自定义坐标)。
具体结构体参数和使用方法如下:
xxxxxxxxxx
651//标签信息
2struct OsdInfo {
3 QString name; //名字唯一标识符(方便删除或更新)
4 bool visible; //是否可见
5 int fontSize; //字号大小
6 QString text; //文本文字
7
8 QColor color; //文本颜色
9 QImage image; //标签图片
10 QPoint point; //标签坐标(位置自定义时候使用)
11 OsdFormat format; //标签格式
12 OsdPosition position; //标签位置
13
14 OsdInfo() {
15 name = "osd";
16 visible = true;
17 fontSize = 12;
18 text = "视频标签";
19
20 color = "#FF0000";
21 image = QImage();
22 point = QPoint(0, 0);
23 format = OsdFormat_Text;
24 position = OsdPosition_LeftTop;
25 }
26};
27
@@ -708,7 +708,7 @@ header, .context-menu, .megamenu-content, footer{
12 GraphInfo() {
13 name = "graph";
14 borderWidth = 2;
15 borderColor = "#FF0000";
16 bgColor = QColor(255, 0, 0, 100);
17 }
18};
19
20public slots:
21 //设置图形
22 void setGraph(const GraphInfo &graph);
23 //添加图形
24 void appendGraph(const GraphInfo &graph);
25 //删除图形
26 void removeGraph(const QString &name);
27 //清空图形
28 void clearGraph();
29
30void DeviceVideoSmart::receiveRects(const QList<QRect> &rects)
31{
32 if (!widget || !widget->getIsRunning()) {
33 return;
34 }
35
-
36 widget->clearGraph();
37 foreach (QRect rect, rects) {
38 GraphInfo graph;
39 graph.borderColor = QColor(255, 0, 0);
40 graph.borderWidth = 3;
41 graph.rect = rect;
42 widget->appendGraph(graph);
43 }
44}
2.16 预置巡航
预置位功能,只对带有预置位的球机才起作用,有云台的球机未必有预置位,要仔细查看清楚,不清楚可以询问厂家或者查阅手册,在本模块中,可以获取预置位、添加预置位、调用预置位、删除预置位、调用起始位、设置起始位、开始巡航、停止巡航等。
获取预置位以后,会将获取到的预置位集合(一般有255个甚至更多)显示到列表中,前面是编号token,后面是预置位的别名name,别名可以是中文的,可以通过添加预置位的时候设置中文的名称。在每个预置位信息后面都有三个按钮:调用、添加、删除,直接单击即可执行相应的动作,拉伸子模块窗体对应名称列自动拉伸填充。
自动巡航目前采用的策略是通过勾选查询回来的预置位信息,勾选,然后定时器每隔一段时间调用一次对应的预置位来实现,每次正在执行哪个预置位会在列表中自动选中该预置位,后期如果有更好的处理方法会自动更新改进代码。
操作步骤:
左侧选中通道,前提是该通道的设备支持预置位,一般是球机才有预置位。
单击获取预置位,所有预置位信息会表格形式显示,每个预置位有唯一编号和名称,名称可以修改,编号改不了。
预置位表格中三个按钮依次为执行、更新、删除。
单击执行按钮(三角形状),会调用对应的预置位,设备会切换到对应预置位对应的位置。
单击更新按钮(加号形状),将当前设备停留的位置作为新的位置更新对应预置位。
单击删除按钮(删除形状),将当前选中的预置位信息删除,有部分设备仅仅是删除位置信息,预置位还会在,具体要看设备的支持。
输入预置位名称,调整画面到要新加的预置位置,单击添加预置位按钮,会新增加一个预置位。
调用起始位,一般是球机的默认开机后的位置,原始位置,单击调用起始位按钮后,会自动切换过去。
设置起始位,将当前位置设置为起始位置。
2.17 OSD配置
操作步骤:
左侧选中通道,前提是该通道的设备支持OSD的onvif协议设置,一般大厂的都会支持。
单击获取OSD,所有OSD的唯一标识自动列在列表框中。
选中一个OSD,会自动获取该OSD的详细信息然后填入在下面,比如坐标位置、字体大小、标签类型等。
单击添加OSD,会将填写好的对应唯一标识的OSD添加到设备中,一般摄像头会限制OSD的数量,如果已经存在了很多OSD,有可能添加会失败,很多设备会限制最大支持4个OSD。
添加OSD的时候未必是按照填写的唯一标识来添加,设备一般按照自己的命名规则,所以该字段默认即可,比如海康的OSD标识都是OsdToken字样开头。
修改OSD,一般支持的修改字段是坐标位置和文字内容,当然这两个也基本上是最常用的需要修改的字段,一般设备不支持将日期时间类型的OSD修改成文字文本类型的OSD,可以选择删除再添加的方式来实现。
很多设备会限制只支持1个日期时间的OSD和多个文字文本的OSD,所以如果你添加多个日期时间OSD的时候,可能会失败。
单击删除OSD会将当前选中的OSD删除,删除后会重新读取所有OSD信息。
在左侧通道上按下鼠标,会自动将鼠标按下处的位置对应的真实像素坐标发送到坐标位置文本框中,以便添加和修改OSD。
2.18 网络配置
操作步骤:
左侧选中通道,前提是该通道的设备支持onvif协议做网络设置,一般大厂的都会支持。
单击获取网络按钮,会自动获取网络信息,包括主机名称、网络地址、子网掩码等。
左侧填好信息后,单击设置网络,会将新的网络配置信息通过onvif协议下发给设备。
一般建议重新修改了设备网络地址后,摄像头管理那边也需要做相应的修改。
2.19 图文警情
如果开启了警情订阅,则触发报警后,会自动抓拍报警图片,和对应的警情内容和报警事件以图文卡片的形式展示在图文警情模块中。双击可以查看详细的报警图片,对应的警情信息存储的日志记录中,可以到日志记录中查询。
2.20 设备列表
设备列表通过读取录像机信息和摄像机信息,自动生成设备列表,每个摄像机都对应一个主码流和子码流。录像机用于生成父节点,相当于区域,录像机信息本身在整个系统中目前就一个作为设备列表的区域信息功能,用户可以自行拓展作为其他用途。
操作步骤:
双击顶层父节点,自动打开该分组下的所有摄像头。
双击摄像头节点,自动打开该摄像头,具体是子码流还是主码流,按照系统设置中的视频参数的码流类型来决定。
双击码流子节点,自动打开对应码流的地址。
按照节点拖曳到视频控件,自动打开对应视频流。
鼠标右键弹出菜单,目前可以刷新所有通道,其他功能菜单是演示。比如开始对讲功能,需要自行实现代码。
2.21 窗口信息
窗口信息负责显示一些打印信息,比如通道打开,摄像机是否异常,各种报警日志等,可以在系统设置中设置不同的文字颜色,窗口信息的信息条数自动计算,保证最大可能的适应高度。
3 视频回放
视频回放中有多个子模块,分别是不同的含义:
本地回放:回放存储在本地电脑的视频文件。
网络回放:通过sdk方式回放NVR上的存储录像(暂未实现,每个厂家不一样)。
远程回放:通用的rtsp取流形式的播放实时视频和回放录像文件,支持海康大华等厂家的NVR回放。
图片回放:查找对应文件夹下的所有通道图片,按照设定的间隔回复,类似视频效果,一般用在存储一堆图片序列的应用场景中。
视频上传:将查询的本地存储的视频文件上传到云端服务器。类似于将视频文件存储到服务器上,需要手动填写服务器地址和端口。
3.1 本地回放
3.1.1 视频查询
操作步骤:
选择设备通道(可以选择所有通道或者某个通道)。
选择视频类型(存储视频/报警视频),目前只有存储视频。
选择时间范围,考虑都范围大文件数量过多,默认限定查询60天内范围的视频。
单击查询按钮,符合条件的视频文件都会列出来,双击可以播放。
每个文件前面都有复选框,可以勾选用于下载和删除。
单击下载按钮,会将当前选中的文件拷贝到选择的目录。
单击删除按钮,会将当前选中的文件删除。
单击清空按钮,会将所有查询出来的文件全部删除。
播放过程中实时显示播放进度,可以单击或者拖动进度条切换进度。
默认播放完成一个会自动播放下一个,如果有下一个的话。
进度条左侧显示当前播放时长和文件总时长。
进度条右侧有三个按钮,分别是播放/暂停按钮、停止按钮、静音切换按钮。
右上角可以选择播放速度,播放过程中也会立即应用,可选0.5倍速、1.0倍速、2.0倍速、4.0倍速、8.0倍速等。
3.1.2 存储规则
默认存储主目录 video_normal。
主目录下按照日期目录存放(2025-10-01/2025-10-31)。
日期目录下是单个视频文件(ch01_2025-04-07-14-08-11.mp4/ch02_2025-04-07-14-08-11.mp4)。
拓展功能可以存储对应的数据文件比如经纬度数据和视频文件一个目录(名称一样并且拓展名可以是txt)。
3.2 网络回放
网络回放模块是通过sdk的形式回放远程网络中NVR设备上的录像文件,这个暂未实现,本系统主要是为了兼容性和通用性,通过具体sdk形式调用的处理都没有做,破坏了移植性,到了其他平台就没法使用了。
3.3 远程回放
远程回放模块主要是通过rtsp视频流的形式来拉取实时视频和回放视频,现在越来越多的NVR支持直接通过取流的形式来拉取实时视频流和回放视频,这样使用起来很方便,当然在拉取视频流的时候要传入用户信息,防止非法获取,现在越来越多的应用场景需要通过NVR来调取回放视频,传统的SDK的方式非常累厂家太多,而国标的形式太繁琐复杂,于是rtsp形式的最简单的方式应运而生,目前支持的厂家也越来越多,每个厂家格式的规则不一样,可以自行咨询厂家的规则,本程序默认实现了海康、大华的规则。
操作步骤:
选择设备厂家,不同厂家rtsp视频流格式不一样,内置支持了海康、大华、通用的。
选择视频类型,支持实时视频和回放视频两种,回放视频还要选择时间范围。
填写用户名称、用户密码,最后组成rtsp视频流字符串一起。
填写或者下拉选择设备地址,填写IP地址,默认会把录像机管理中添加的设备地址填充到下拉框。
选择设备通道,一个设备比如NVR可能有多个通道,摄像机一般只有1个通道。
选择码流类型,可以选择主码流、子码流、三码流。
选择时间范围,实时视频不用选,回放视频才需要。
左侧选中某个通道,单击开始播放按钮,会将对应参数组成的rtsp视频流地址打开。
单击关闭所有按钮,会一次性关闭4个通道。如果想要关闭单个通道,直接在视频控件悬浮条中单击右上角的关闭按钮。
勾选递增复选框,则播放完一个通道,通道下拉框会自动切换到下一个通道,这样只需要一直点开始播放按钮即可。
同步播放进度,勾选后,切换某一个通道的进度,其他几个通道也会自动切换到对应进度。
每个通道都有播放进度和总时长以及进度条,可以切换进度条切换对应的播放进度,也可以单击暂停按钮进行暂停和继续播放。
不是所有通道都支持切换播放进度,经过大量测试发现,哪个厂家的NVR只支持该厂家的IPC,比如大华的NVR,通道1添加的是海康的IPC,则该通道无法切换播放进度,通道2添加的是大华的IPC,则该通道可以切换播放进度。这样处理也是有一定道理的,毕竟厂家都希望你买的都是他们家的设备。
3.4 图片回放
3.4.1 图片查询
选择设备通道和时间范围,单击查询按钮,会将查询到的图片序列按照日期的形式作为一行添加到列表结果中,双击可以自动播放,可以调节播放速度。
3.4.2 存储规则
默认存储主目录 image_normal
主目录下按照日期目录存放(2025-10-01/2025-10-31)
日期目录下是单个图片文件(ch01_2025-04-07-14-08-11-222.jpg/ch02_2025-04-07-14-08-11-333.jpg)
拓展功能可以存储对应的数据文件比如警情文字和图片文件一个目录(名称一样并且拓展名可以是txt)
3.4.3 导出报告
这个功能专门演示导出图文警情的报警,可以自定义信息,封装好的类,传入图片队列,图片自适应等比例缩放显示,超过自动分页。
3.5 视频上传
+
36 widget->clearGraph();
37 foreach (QRect rect, rects) {
38 GraphInfo graph;
39 graph.borderColor = QColor(255, 0, 0);
40 graph.borderWidth = 3;
41 graph.rect = rect;
42 widget->appendGraph(graph);
43 }
44}
预置位功能,只对带有预置位的球机才起作用,有云台的球机未必有预置位,要仔细查看清楚,不清楚可以询问厂家或者查阅手册,在本模块中,可以获取预置位、添加预置位、调用预置位、删除预置位、调用起始位、设置起始位、开始巡航、停止巡航等。
获取预置位以后,会将获取到的预置位集合(一般有255个甚至更多)显示到列表中,前面是编号token,后面是预置位的别名name,别名可以是中文的,可以通过添加预置位的时候设置中文的名称。在每个预置位信息后面都有三个按钮:调用、添加、删除,直接单击即可执行相应的动作,拉伸子模块窗体对应名称列自动拉伸填充。
自动巡航目前采用的策略是通过勾选查询回来的预置位信息,勾选,然后定时器每隔一段时间调用一次对应的预置位来实现,每次正在执行哪个预置位会在列表中自动选中该预置位,后期如果有更好的处理方法会自动更新改进代码。
操作步骤:
左侧选中通道,前提是该通道的设备支持预置位,一般是球机才有预置位。
单击获取预置位,所有预置位信息会表格形式显示,每个预置位有唯一编号和名称,名称可以修改,编号改不了。
预置位表格中三个按钮依次为执行、更新、删除。
单击执行按钮(三角形状),会调用对应的预置位,设备会切换到对应预置位对应的位置。
单击更新按钮(加号形状),将当前设备停留的位置作为新的位置更新对应预置位。
单击删除按钮(删除形状),将当前选中的预置位信息删除,有部分设备仅仅是删除位置信息,预置位还会在,具体要看设备的支持。
输入预置位名称,调整画面到要新加的预置位置,单击添加预置位按钮,会新增加一个预置位。
调用起始位,一般是球机的默认开机后的位置,原始位置,单击调用起始位按钮后,会自动切换过去。
设置起始位,将当前位置设置为起始位置。
操作步骤:
左侧选中通道,前提是该通道的设备支持OSD的onvif协议设置,一般大厂的都会支持。
单击获取OSD,所有OSD的唯一标识自动列在列表框中。
选中一个OSD,会自动获取该OSD的详细信息然后填入在下面,比如坐标位置、字体大小、标签类型等。
单击添加OSD,会将填写好的对应唯一标识的OSD添加到设备中,一般摄像头会限制OSD的数量,如果已经存在了很多OSD,有可能添加会失败,很多设备会限制最大支持4个OSD。
添加OSD的时候未必是按照填写的唯一标识来添加,设备一般按照自己的命名规则,所以该字段默认即可,比如海康的OSD标识都是OsdToken字样开头。
修改OSD,一般支持的修改字段是坐标位置和文字内容,当然这两个也基本上是最常用的需要修改的字段,一般设备不支持将日期时间类型的OSD修改成文字文本类型的OSD,可以选择删除再添加的方式来实现。
很多设备会限制只支持1个日期时间的OSD和多个文字文本的OSD,所以如果你添加多个日期时间OSD的时候,可能会失败。
单击删除OSD会将当前选中的OSD删除,删除后会重新读取所有OSD信息。
在左侧通道上按下鼠标,会自动将鼠标按下处的位置对应的真实像素坐标发送到坐标位置文本框中,以便添加和修改OSD。
操作步骤:
左侧选中通道,前提是该通道的设备支持onvif协议做网络设置,一般大厂的都会支持。
单击获取网络按钮,会自动获取网络信息,包括主机名称、网络地址、子网掩码等。
左侧填好信息后,单击设置网络,会将新的网络配置信息通过onvif协议下发给设备。
一般建议重新修改了设备网络地址后,摄像头管理那边也需要做相应的修改。
如果开启了警情订阅,则触发报警后,会自动抓拍报警图片,和对应的警情内容和报警事件以图文卡片的形式展示在图文警情模块中。双击可以查看详细的报警图片,对应的警情信息存储的日志记录中,可以到日志记录中查询。
设备列表通过读取录像机信息和摄像机信息,自动生成设备列表,每个摄像机都对应一个主码流和子码流。录像机用于生成父节点,相当于区域,录像机信息本身在整个系统中目前就一个作为设备列表的区域信息功能,用户可以自行拓展作为其他用途。
操作步骤:
双击顶层父节点,自动打开该分组下的所有摄像头。
双击摄像头节点,自动打开该摄像头,具体是子码流还是主码流,按照系统设置中的视频参数的码流类型来决定。
双击码流子节点,自动打开对应码流的地址。
按照节点拖曳到视频控件,自动打开对应视频流。
鼠标右键弹出菜单,目前可以刷新所有通道,其他功能菜单是演示。比如开始对讲功能,需要自行实现代码。
窗口信息负责显示一些打印信息,比如通道打开,摄像机是否异常,各种报警日志等,可以在系统设置中设置不同的文字颜色,窗口信息的信息条数自动计算,保证最大可能的适应高度。
悬浮地图模块对应窗体类frmDeviceGps,用于显示一个地图,上面加载的摄像头设备,在摄像机管理中有个字段存储的设备的经纬度位置,经纬度位置可以在电子地图模块中修改。默认使用的百度地图,支持在线和离线,支持鼠标直接拖动和缩放。具体和飞行轨迹模块类似。所有悬浮模块都可以设置透明度值,透明度值在系统设置中调节。
飞行轨迹模块对应窗体类frmDeviceGps2,专为无人机系统打造的模块,也可以作为机器人移动模块,通过传入一个经纬度值,实时更新设备的位置和绘制轨迹,模块已经内置了接口进行处理,支持不同设备不同的轨迹颜色(这个功能好)。
本软件有多个右键菜单,在标题栏弹出的是模块控制的菜单,可以显示和隐藏各种子模块,以及复位布局。在视频窗体面板中弹出的是视频操作相关的菜单,对应初始化菜单在frmVideoPanel::initMenu()函数中。本类的设计非常巧妙,各种通用的布局和切换全部放在videobox视频盒子类中,比如需要新增加100通道布局,直接在videobox类中新增即可,其他地方不用做任何更改。
很多时候希望在这里的右键菜单增加一些自定义的菜单,比如切换全屏等操作,但是这个操作执行的代码肯定需要在主界面这边需要处理些什么,所以这种菜单对应的action必须在videobox类实现,所以通过传入一个menu指针到videobox类,然后videobox类负责加到主菜单下面作为子菜单。至于外部还需要增加什么菜单,videobox那边管不着,在实例化menu菜单类这边加上就好。比如可以增加一个一键推流到网页预览的子菜单到这里。
视频回放中有多个子模块,分别是不同的含义:
本地回放:回放存储在本地电脑的视频文件。
网络回放:通过sdk方式回放NVR上的存储录像(暂未实现,每个厂家不一样)。
远程回放:通用的rtsp取流形式的播放实时视频和回放录像文件,支持海康大华等厂家的NVR回放。
图片回放:查找对应文件夹下的所有通道图片,按照设定的间隔回复,类似视频效果,一般用在存储一堆图片序列的应用场景中。
视频上传:将查询的本地存储的视频文件上传到云端服务器。类似于将视频文件存储到服务器上,需要手动填写服务器地址和端口。
操作步骤:
选择设备通道(可以选择所有通道或者某个通道)。
选择视频类型(存储视频/报警视频),目前只有存储视频。
选择时间范围,考虑都范围大文件数量过多,默认限定查询60天内范围的视频。
单击查询按钮,符合条件的视频文件都会列出来,双击可以播放。
每个文件前面都有复选框,可以勾选用于下载和删除。
单击下载按钮,会将当前选中的文件拷贝到选择的目录。
单击删除按钮,会将当前选中的文件删除。
单击清空按钮,会将所有查询出来的文件全部删除。
播放过程中实时显示播放进度,可以单击或者拖动进度条切换进度。
默认播放完成一个会自动播放下一个,如果有下一个的话。
进度条左侧显示当前播放时长和文件总时长。
进度条右侧有三个按钮,分别是播放/暂停按钮、停止按钮、静音切换按钮。
右上角可以选择播放速度,播放过程中也会立即应用,可选0.5倍速、1.0倍速、2.0倍速、4.0倍速、8.0倍速等。
默认存储主目录 video_normal。
主目录下按照日期目录存放(2025-10-01/2025-10-31)。
日期目录下是单个视频文件(ch01_2025-04-07-14-08-11.mp4/ch02_2025-04-07-14-08-11.mp4)。
拓展功能可以存储对应的数据文件比如经纬度数据和视频文件一个目录(名称一样并且拓展名可以是txt)。
网络回放模块是通过sdk的形式回放远程网络中NVR设备上的录像文件,这个暂未实现,本系统主要是为了兼容性和通用性,通过具体sdk形式调用的处理都没有做,破坏了移植性,到了其他平台就没法使用了。
远程回放模块主要是通过rtsp视频流的形式来拉取实时视频和回放视频,现在越来越多的NVR支持直接通过取流的形式来拉取实时视频流和回放视频,这样使用起来很方便,当然在拉取视频流的时候要传入用户信息,防止非法获取,现在越来越多的应用场景需要通过NVR来调取回放视频,传统的SDK的方式非常累厂家太多,而国标的形式太繁琐复杂,于是rtsp形式的最简单的方式应运而生,目前支持的厂家也越来越多,每个厂家格式的规则不一样,可以自行咨询厂家的规则,本程序默认实现了海康、大华的规则。
操作步骤:
选择设备厂家,不同厂家rtsp视频流格式不一样,内置支持了海康、大华、通用的。
选择视频类型,支持实时视频和回放视频两种,回放视频还要选择时间范围。
填写用户名称、用户密码,最后组成rtsp视频流字符串一起。
填写或者下拉选择设备地址,填写IP地址,默认会把录像机管理中添加的设备地址填充到下拉框。
选择设备通道,一个设备比如NVR可能有多个通道,摄像机一般只有1个通道。
选择码流类型,可以选择主码流、子码流、三码流。
选择时间范围,实时视频不用选,回放视频才需要。
左侧选中某个通道,单击开始播放按钮,会将对应参数组成的rtsp视频流地址打开。
单击关闭所有按钮,会一次性关闭4个通道。如果想要关闭单个通道,直接在视频控件悬浮条中单击右上角的关闭按钮。
勾选递增复选框,则播放完一个通道,通道下拉框会自动切换到下一个通道,这样只需要一直点开始播放按钮即可。
同步播放进度,勾选后,切换某一个通道的进度,其他几个通道也会自动切换到对应进度。
每个通道都有播放进度和总时长以及进度条,可以切换进度条切换对应的播放进度,也可以单击暂停按钮进行暂停和继续播放。
不是所有通道都支持切换播放进度,经过大量测试发现,哪个厂家的NVR只支持该厂家的IPC,比如大华的NVR,通道1添加的是海康的IPC,则该通道无法切换播放进度,通道2添加的是大华的IPC,则该通道可以切换播放进度。这样处理也是有一定道理的,毕竟厂家都希望你买的都是他们家的设备。
选择设备通道和时间范围,单击查询按钮,会将查询到的图片序列按照日期的形式作为一行添加到列表结果中,双击可以自动播放,可以调节播放速度。
默认存储主目录 image_normal
主目录下按照日期目录存放(2025-10-01/2025-10-31)
日期目录下是单个图片文件(ch01_2025-04-07-14-08-11-222.jpg/ch02_2025-04-07-14-08-11-333.jpg)
拓展功能可以存储对应的数据文件比如警情文字和图片文件一个目录(名称一样并且拓展名可以是txt)
这个功能专门演示导出图文警情的报警,可以自定义信息,封装好的类,传入图片队列,图片自适应等比例缩放显示,超过自动分页。
视频上传功能主要用来将本地存储的视频文件(也可以是其他文件),通过网络传输(默认TCP)上传到其他地方比如服务器,服务器上要运行接收文件的程序,这样就相当于远程备份视频文件的功能,视频文件可以勾选需要上传哪一些。
本地只需要在视频监控系统客户端上切换到视频上传页面,然后选择要查询的日期范围,单击查询,会将视频文件查询出来显示在左边的表格中,可以勾选要上传的视频文件,右侧填写好服务器的IP和端口(默认6000),单击上传按钮,会多线程的形式上传文件。
远程需要放置文件传输工具,该工具完整源码如果购买了视频监控系统,可以赠送,该工具同时具备了发送端和接收端的功能,配套视频监控系统使用的是接收端,视频监控系统作为发送端,填好监听端口后,单击监听按钮,一旦有连接文件上传,会自动显示对应的接收进度,文件名称以上传的文件名为准。
默认文件传输过程采用了加密机制,意味着传输的数据是加密后的数据,接收到以后根据设置的秘钥进行解密重新生成文件,防止文件传输过程中被拦截,可自定义加密规则。
多线程收发文件,支持加密传输。
接收端支持监听端口接收文件和主动连接服务器接收文件两种方式。
按照 文件开始符+文件大小+文件内容+文件结束符 逐个分包接收。
可对接收的加密过的文件包进行解密输出。
如果采用连接服务器方式接收文件可指定请求文件。
接收端请求文件的形式可以作为通用的程序升级方案。
进度条实时更新收发文件的进度。
发送端可设置每个包最很大小即切片分包数量。
发送端可对文件的每个包进行加密传输。
发送端支持对包进行合并发送。
可指定目录对客户端发来的请求文件进行搜索。
每个功能独立的一个类,接口清晰友好,使用方便。
支持任意Qt版本、任意系统、任意编译器。
电子地图有多个子模块,分别不同的功能,在每个模块上,双击对应的摄像机,都可以弹出实时视频预览画面,支持多个画面同时打开,每个摄像机都一个画面窗体。
图片地图:摄像机分布在平面图上。
离线地图:默认采用百度离线瓦片地图,本地使用。
在线地图:默认采用百度地图,需要联网使用。
路径规划:指定起始点和终点经纬度坐标,查询最优路径并绘制路线,提取路线坐标集合,动态模拟轨迹,比如机器人和飞机轨迹。
图片地图的功能是为了方便直接提供图片文件,然后摄像机点位可直接拖动,更精确定位的场景,图片可以提供鸟瞰图这种,看起来更直观大气,有3D的感觉。
图片文件存放在可执行文件下的map文件夹下,如果需要增加或者删除,可以直接文件操作即可,比如复制新的图片文件到这个目录下即可。
具体摄像机对应哪张图片,可以在摄像机管理中设置,对应字段为地图,直接下拉选择对应的地图即可,默认选择无,就是该摄像机不属于任何地图。
功能和在线地图完全一致,唯一区别就是地图是离线的,不需要联网。离线的地图需要自己准备好,可以网上通过瓦片地图下载器来下载需要的地方的离线地图,一般离线地图比较大,他是一张张图片,所以建议离线地图只下载自己需要的即可,比如某个县的地图,而不是所有的,所有的起码有几十GB。
使用说明
默认系统提供的是上海市的地图。
下载地址在下面文章中,会自动更新地址。 https://blog.csdn.net/feiyangqingyun/article/details/104005917
请下载同目录下的bin_map_tiles.zip压缩包,解压到config目录下,最后config文件夹下会多出来tiles tiles_hybrid两个文件夹。
在摄像机管理的界面,可以添加经纬度信息,这样就可以在地图上显示对应的摄像机点位信息,如果发现位置不对,可以在右侧先选择摄像机设备,然后鼠标单击新的位置,右侧目标经度、目标纬度信息会自动更新,然后再单击更新经纬度值则会更新当前下拉选择的设备的经纬度信息,也可以在摄像机管理界面手动填入进行修改。
在右侧还有模拟运动轨迹、开始显示轨迹两个按钮,有可能后期还会增加其他功能,是为了演示如何在地图上实现地图的相关功能,开始显示轨迹采用的定时器来生成轨迹点数据,动态模拟运动轨迹,可以单击显示设备位置按钮还原最初的设备点位图。
功能特点
同时支持在线地图和离线地图两种模式。
同时支持webkit内核、webengine内核、IE内核。
支持设置多个标注点,信息包括名称、地址、经纬度。
可设置地图是否可单击、拖动、鼠标滚轮缩放。
可设置协议版本、秘钥、主题样式、中心坐标、中心城市、地理编码位置等。
可设置地图缩放比例和级别,缩略图、比例尺、路况信息等控件的可见。
支持地图交互,比如鼠标按下获取对应位置的经纬度。
支持查询路线,可设置起点位置、终点位置、路线模式、路线方式、路线方案(最少时间、最少换乘、最少步行、不乘地铁、最短距离、避开高速)。
可显示点线面工具,可直接在地图上划线、点、矩形、圆形等。
可设置行政区划,指定某个城市区域绘制图层,在线地图自动输出行政区划边界点集合到js文件给离线地图使用。
可静态或者动态添加多个覆盖物。支持点、折线、多边形、矩形、圆形、弧线、点聚合等。
函数接口友好和统一,使用简单方便,就一个类。
支持js动态交互添加点、删除点、清空点、重置点,不需要刷新页面。
支持任意Qt版本、任意系统、任意编译器。
基本步骤
输入起点坐标和终点坐标,也可以勾选地图选点,开启后直接在左侧的地图界面鼠标按下自动识别对应的经纬度坐标填入,单选框勾选的起点则填入起点坐标输入框中,勾选的终点就填入终点坐标输入框中。
选择路线方式,可选公交、驾车、步行、骑行等方式,默认选择步行。
选择路线方案,可选最少时间、最短距离、避开高速等。
输入关键点数,一般查询返回的路径的经纬度坐标点数非常密集,可能非常多,我们需要根据输入的关键点数来过滤,比如输入30,表示从所有经纬度数据中平均提取出来30个数据就行。点数合计,查询路线后自动返回所有经纬度坐标的数据个数。
单击查询路线,自动返回对应路径的所有经纬度坐标。
单击帅选数据,按照填入的关键点数进行数据帅选,在下方可以看到原始数据和最终数据,选中某个数据,自动在左侧生成点预览对应的位置。
单击模拟轨迹,会启动定时器,从第一个数据点开始,自动移动设备比如机器人、飞行器等,查看整个轨迹点路径是否正确。
本地日志存放的是本系统的操作日志,比如用户登录退出、记录删除、设备报警等操作,都会有对应的记录存放的数据库,可以在这里选择时间段和日志类型进行查询。查询后的日志记录可以翻页查看,还可以直接支持指定页码跳转,(此翻页组件超级牛逼,外观和功能分离,自动计算页码切换导航,具体可参见对应类的头文件功能描述),每页显示多少条记录在系统设置中可以设置。
可以按照多条件进行查询记录。
可以选择设备通道。
可以选择日志的类型:用户操作、运行日志、设备日志、报警日志。
可以选择时间范围。
在查询记录的时候,如果勾选了前面的复选框则表示启用该选择条件进行查询。
没有勾选,就算后面选择了类型等,也是按照where 1=1 条件查询的。
查询后的记录会自动分页显示,而不是一次性显示。
可以单击底部的翻页按钮进行翻页查看记录。
可以快速切换到第一页、末一页、上一页、下一页、显示的页码切换、指定的页码切换。
单击打印按钮,会将当前查询的记录打印出来,自动分页。打印前会弹出打印预览对话框,可以最后在这里调整边距、纸张等设置参数。
单击XLS按钮可以将表格中的内容导出到excel表格,独创的excel导出数据算法,极速导出,支持任意系统,无依赖。
单击删除按钮,会弹出时间范围选择对话框,选择要删除的记录的开始时间和结束时间,单击确定,会将该时间段内的记录全部删除,结束时间必须大于开始时间。
单击清空按钮会先弹出询问框提示是否需要清空数据,单击确定则自动清空所有的记录,清空后不能恢复。
如果开启了事件订阅,则报警后会自动抓拍报警图片,存储到对应的报警图片目录,对应日志记录行双击可以查看报警图片。
如果开启了事件订阅,则部分事件(可以自定义哪些警情需要保存录像)报警后,会自动开启报警录像存储,对应日志记录行双击可以查看报警录像,在弹出的页面可以切换播放进度和暂停播放等。
设备日志是指直接通过sdk协议,远程从NVR设备上拉取日志记录到本地显示,其余功能和本地日志一致,此功能未实现。
基本设置中有部分参数的切换会自动重启应用。
参数说明
开机运行:开启以后自动随着系统启动运行,默认开启。
自动登录:开启以后会自动以最后登录的用户信息登录到系统,默认关闭。
记住密码:开启以后会自动填入最后登录的用户信息到登录窗体,默认关闭。
中文标题:软件左上角标题栏的中文标题,改动立即应用。
英文标题:软件左上角标题栏的英文标题,改动立即应用。
版权所有:当前软件版权所有的公司,目前没有显示在哪里,备用。
调试日志:开启后会将打印日志输出到日志文件,默认关闭,日志文件存放在可执行文件夹下的log目录下。
运行时间:开启后会实时记录系统的运行时间,记录当前软件启动后运行了多久,运行时间文件存放在可执行文件夹下的log目录下。
工作模式:默认视频监控,可选机器人监控、无人机监控等。
导航样式:用于选择顶部导航栏和左侧导航栏的样式,上侧+左侧表示顶部导航栏上侧样式(图标在上面,文字在下面),左侧导航栏左侧样式(图标在左侧,文字在右侧)。
界面样式:系统自带17套皮肤,可以在这里自动换肤,默认视频黑。
软件图标:自动从logo文件夹读取,可以自行选择对应的logo文件。
全屏模式:开启以后,最大化显示自动全屏显示而不是最大化显示,默认关闭。
弹框时间:右下角弹出提示信息自动关闭时间,0秒表示常驻不关闭。
报警声音:0表示不启用,其余表示报警后播放的声音次数。
鼠标隐藏:主界面多久鼠标没有操作过会自动隐藏鼠标指针,一般在全屏轮询的时候需要设置,效果会更好。
自动全屏:经过多久以后鼠标没有操作过自动全屏,0表示不启用。
播放记录:如果开启在软件打开后会自动读取上一次的播放记录并自动打开,不需要可以关闭。
图文警情:图文警情模块消息行数,0表示自动计算填满,不产生滚动条。
窗口消息:窗口消息模块消息行数,0表示自动计算填满,不产生滚动条。
透明度值:停靠窗体的透明度值,可调节,动态应用。
参数说明
共享解码:开启后相同地址的通道会复用之前已经打开的通道,这样可以大大节省网络流量和解码压力。
播放音频:开启以后可以播放声音,有时候不需要声音的时候可以关闭,节省资源。
保存视频:录像计划的总开关,开启以后自动存储录像文件,目录在可执行文件目录video_normal。
通道交换:默认开启,开启后在主界面视频面板可以拖曳交换通道。有时候希望禁用这个功能则关闭即可。
人工智能:用于演示绘制osd标签和添加各种图形绘制到视频图片上。
事件订阅:开启以后会用onvif的机制订阅报警事件。
自动校时:开启后摄像机上线立即同步本地时间到设备。
离线检测:默认关闭,开启后会定时检测添加的摄像机是否在线,不在线则对应设备树状列表那边可以看到离线状态。
打印信息:这个开关控制音视频组件中是否打印组件中的各种信息,在摄像头很多的时候,如果想要专注监控系统中非组件相关的功能打印,可以关闭,这样就不会显示组件的打印信息,能够快速方便的追踪自己程序的打印信息。
画面显示:可选自动调整、等比缩放、拉伸填充三种图片显示策略。
显示模式:可选句柄、绘制、GPU三种模式,在ffmpeg内核下句柄和GPU都是同一种处理。
视频边框:视频控件边框大小,用户根据实际需要选择即可。
悬浮工具:视频控件悬浮工具栏的位置,默认在顶部。可选择上下左右四个位置。
硬件加速:会根据不同的内核以及不同的系统自动显示不同的可用的加速器名称,默认none表示不启用硬件加速,ffmpeg可选dxva2和d3d11va,建议用dxva2。
通信方式:视频流采用何种通信方式,默认TCP(可靠连接,不会丢包,缺点就是慢),可选UDP(不可靠连接,容易丢包,但是速度快)。
解码策略:ffmpeg内核专用,可选速度优先、质量优先、均衡处理、最快速度,如果对实时视频流rtsp有实时性要求建议选择最快速度,可以看到无论是打开加载视频流还是响应都是最快的。
编码策略:ffmpeg内核专用,可选不做处理、自动转码、强转264、强转265,如果选择强转265,则不管视频源头是什么编码,统一转成265格式存储。
缓存大小:如果摄像机那边是2k/4k这种分辨率,建议这个值设置大一点。
默认码流:双击设备树状列表打开通道的视频,选择用主码流还是子码流地址去打开。
读取超时:读取视频流过程的超时时间,可选不处理或者具体的秒数,不处理则一直等待直到系统层通知读取失败,选择的话可以加快速度跳出并立即通知失败,建议设置5s,在网络环境不好或者网络中断的情况下能够快速识别到掉线。
连接超时:对于视频流地址可用,先探测对应的地址是否通,不通则不用继续,加载很慢的一些网络地址需要把时间设置大一些,可以尝试用vlc等第三方播放器打开地址对比速度,如果确实很慢,这个值可以设置大一些。
设备双击:可选最后空白通道、最后按下通道,就是双击设备子节点的时候,是在哪个通道打开视频,如果选择的是最后空白通道,则会从通道1开始遍历找到第一个空白的通道打开视频,如果选择的是最后按下通道,则对按下的通道先删除再打开视频。
分组双击:可选最后空白通道、从头清空通道,就是双击设备父节点的时候,是从哪个通道开始打开,如果选择的是最后空白通道,则会从通道1开始遍历找到第一个空白的通道依次打开,如果选择的是从头清空通道,则每次都是全部清空再从通道1开始打开。
最大数量:在双击分组打开的时候,是以当前画面数量作为最大数量,还是以整个系统可用的通道数量作为最大数量。比如有的时候我们切换在16通道画面,双击了一个设备分组,而该分组有100个设备,如果最大数量选择当前通道数量,则只打开16个设备,后面的不会打开,这样可以节约很多时间和系统资源,因为很多时候我们只是希望测试下这个分组是否正常,前面的能打开就行。
表格策略:摄像机管理中,对应表格是按下进入编辑状态还是双击进入编辑状态。
报警视频:视频报警后,存储报警视频的时长。
通道文字:视频控件显示的背景文字字样规则,可以选择显示对应的设备名称。
音柱位置:音柱可以显示在多个位置,也可以不显示音柱。默认禁用就是不显示。如果要显示,建议选择悬浮位置,更美观。
音柱尺寸:音柱的尺寸大小,如果选择自动调整,则视频控件尺寸越大音柱尺寸越大。也可以选择固定的尺寸。
悬浮透明:悬浮条的透明度值,建议半透明。
音柱透明:音柱的透明度值,建议全透明。
参数说明
远程同步:开启后将会启用云端数据同步功能,将本地数据实时同步到远程数据库中。
主机类型:和本地数据库设置一样,可选多种。
数据库名:对应数据库的数据库名称,一个数据库系统中可以有多个数据库实例。
主机地址:数据库所在的网络地址,可以是IP地址或者网址。
通信端口:数据库开放通信的端口,不同数据库默认端口不同,比如mysql是3306,postgres是5432,sqlserver是1433。
用户名称:登录到网络数据库对应的用户名称,所有的网络型数据库都需要用户认证。sqlite是文件型数据库一般不需要认证。
用户密码:登录到网络数据库对应的用户密码,所有的网络型数据库都需要用户认证。sqlite是文件型数据库一般不需要认证。
连接测试:单击后主动连接一次当前填入的数据库信息,连接成功与失败都会弹框提示。
初始数据:单击后会执行sql脚本文件,重置数据库,会将原来的数据一并清空。务必记得只有需要的时候才执行。
其他说明
默认提供了数据库脚本文件(源码下的file/db/video_system.sql)。
单击初始化数据按钮可以对整个数据库进行新建和重置,相当于恢复出厂。
系统支持多种数据库,默认sqlite(Qt内置的数据库,无需安装),可选mysql、postgresql、oracle、人大金仓等。
具体还需要对应Qt版本有数据库插件支持,没有插件支持可以自行编译对应缺失的插件比如mysql,也可选直接通过万能的ODBC来连接。
除了sqlite数据库外,其余数据库都需要输入数据库名称、主机地址、通信端口、用户名称、用户密码信息,输入好以后可以单击连接测试按钮测试下是否正常。
默认提供的是mysql的动态库libmysql.dll,需要放到可执行文件同一目录,严格区分32位和64位的动态库。
xxxxxxxxxx
381//数据库类型枚举
2enum DbType {
3 DbType_ODBC = 0, //odbc数据源
4 DbType_Sqlite = 1, //sqlite数据库
5 DbType_MySql = 2, //mysql数据库
6 DbType_PostgreSQL = 3, //postgresql数据库
7 DbType_SqlServer = 4, //sqlserver数据库
8 DbType_Oracle = 5, //oracle数据库
9 DbType_KingBase = 6, //人大金仓数据库
10 DbType_Other = 255 //其他数据库
11};
12
13//自动切换默认数据库端口
14void DbHelper::getDbDefaultInfo(const QString &dbType, QString &hostPort,
15 QString &userName, QString &userPwd)
16{
17 if (dbType == "MYSQL") {
18 hostPort = "3306";
19 userName = "root";
20 userPwd = "root";
21 } else if (dbType == "SQLSERVER") {
22 hostPort = "1433";
23 userName = "sa";
24 userPwd = "123456";
25 } else if (dbType == "POSTGRESQL") {
26 hostPort = "5432";
27 userName = "postgres";
28 userPwd = "123456";
29 } else if (dbType == "ORACLE") {
30 hostPort = "1521";
31 userName = "system";
32 userPwd = "123456";
33 } else if (dbType == "KINGBASE") {
34 hostPort = "54321";
35 userName = "SYSTEM";
36 userPwd = "123456";
37 }
38}
可以设置不同的场景不同的颜色,比如正常的系统消息显示白色,异常消息红色。
参数说明
勾选则表示启用。
可以对各种分屏进行功能激活。
可以对各种模块进行功能激活。
可以勾选悬浮条要显示哪些信息。
分屏和模块功能激活需要重启应用。
没有勾选的,不会显示对应的菜单切换和分屏快捷按钮。
多个子界面模块也可以选择显示或者隐藏,以便将不需要的模块隐藏掉,碍眼。
本系统所用的录像机信息,并没有实际的作用,也就是不一定要填写实际的录像机信息,留作备用后期使用,目前仅仅是作为生成设备的树状列表使用(类似于区域或分组),如果一个录像机都没有填写,则会自动生成一个默认的录像机信息。
字段说明
设备编号:录像机的编号,唯一字段。
设备名称:录像机的别名,建议不要重复。
设备类型:录像机的厂家类型,可选海康、大华、宇视、其他等。
设备地址:录像机的IP地址。
用户姓名:录像机的登录用户名称。
用户密码:录像机的登录用户密码。
启用状态:录像机设备是否启用。
安装位置:录像机的安装位置。
单击添加按钮,会自动规则生成默认的信息,直接表格中修改即可,修改好以后单击保存按钮保存所有的信息。
如果要删除某个录像机信息,需要先选中该行,然后单击删除按钮,删除后会自动保存。
单击清空按钮会对整个表进行清空操作,清空后数据不能恢复,慎用。
单击导入按钮,可以选择之前导出的csv格式的文件导入数据。
单击导出按钮,将表格数据导出到csv格式的文件,用户可以打开文件编辑,然后再次导入,这样可以作为简易的备份机制使用,也可将繁琐的基础数据录入交给小姑娘去做。
单击打印按钮可以将表格中的内容打印出来,打印前会弹出打印预览界面,可以自行做边距的调整等,可以查看等待打印的内容,翻页切换。
单击导出按钮可以将表格中的内容导出到excel表格,独创的excel导出数据算法,极速导出,支持任意系统,无依赖。
摄像机表信息,是整个系统中最核心的表,这里管理的所有的摄像机信息,并不是所有的字段都显示出来了,比如onvif地址、云台地址等都是隐藏的,因为无需添加更改,需要搜索自动添加的。
字段说明
设备编号:摄像机的唯一编号。
设备名称:摄像机的别名,建议不要重复。
录 像 机:该摄像机对应所属的录像机,随便选择一个就行。
设备厂家:摄像机的厂家类型,通过onvif搜索会自动有厂家信息,没有的就选择其他。
主码流地址:摄像机的主码流地址。
子码流地址:摄像机的子码流地址。
经 纬 度:摄像机的经纬度信息,用来地图上显示位置,中间用 | 隔开。
背景地图:摄像机对应的平面地图,下拉选择,默认从可执行文件下的map目录下读取图片文件列表生成。
用户姓名:摄像机登录的用户名称。
用户密码:摄像机登录的用户密码。
启用状态:摄像机是否启用。
安装位置:摄像机的安装位置。
单击添加按钮,会自动规则生成默认的信息,直接表格中修改即可,修改好以后单击保存按钮保存所有的信息。
如果要删除某个摄像机信息,需要先选中该行,然后单击删除按钮,删除后会自动保存。
单击清空按钮会对整个表进行清空操作,清空后数据不能恢复,慎用。
单击导入按钮,可以选择之前导出的csv格式的文件导入数据。
单击导出按钮,将表格数据导出到csv格式的文件,用户可以打开文件编辑,然后再次导入,这样可以作为简易的备份机制使用,也可将繁琐的基础数据录入交给小姑娘去做。
单击打印按钮可以将表格中的内容打印出来,打印前会弹出打印预览界面,可以自行做边距的调整等,可以查看等待打印的内容,翻页切换。
单击导出按钮可以将表格中的内容导出到excel表格,独创的excel导出数据算法,极速导出,支持任意系统,无依赖。
如果摄像机已经添加过,则搜索出来的摄像机对应行禁用不可选中。
基本步骤
第一步:单击广播搜索按钮,搜索到的设备会显示在左侧表格中。
第二步:输入onvif用户名和密码,注意是onvif的用户信息,一个摄像机可能有多种用户,比如登录用户,远程用户,onvif用户,务必记得要用onvif用户信息,可参阅说明书的末尾 海康大华onvif设置。
第三步:单击获取所有,会自动以填写的onvif用户信息,去拉取具体摄像机的码流地址、云台地址等信息,可以拉动底部的横向滚动条查看具体是否获取到信息。
第四步:单击添加选中按钮将所有勾选了复选框的设备添加到摄像机信息表中。
特别说明
如果没有码流地址,是添加不了的,必须有码流地址才能添加。
一般一个项目上的摄像机都是同一个品牌的,onvif用户信息也都一样,所以单击获取所有可以把所有摄像机的信息获取到。
可以填入不同的onvif用户信息,单击获取当前按钮来指定摄像机获取onvif信息。
如果有些设备不支持广播,只支持单播(比如不是同一网段的设备,但是路由器设置过,是通的),则指定设备右侧填写好IP地址或者onvif地址,再单击单播搜索即可。
一台电脑可能多个网卡和IP网段,可以选择不同的网卡进行搜索,相当于不同的网段。
录像机信息和摄像机信息的更改,是自动应用的,无需重启。
搜索后的设备信息自动添加到表格中,按照IP地址升序排序,支持跨网段排序,自动将IP地址转为quint32整型进行排序,而不是取IP地址末尾。
参数说明
用户姓名:onvif用户的名称,默认admin。
用户密码:onvif用户的密码,默认admin。
选择网卡:选择对应电脑的网卡IP,可能有多个网段,onvif只能同一个网段。
指定设备:对指定的IP地址或者onvif地址进行onvif搜索。
过滤设备:对返回的onvif地址进行过滤,一种厂家的类别的设备地址格式一样。
搜索间隔:默认onvif搜索指令有好几种,会重发几次,指定发送的间隔。
请求超时:在获取rtsp地址等信息的时候是发送的http请求,有些网络环境中需要将超时时间设置大一点,以便保证可以收到应答数据。超时时间越大,意味着这个一键获取信息过程时间越久,可以综合考虑。
搜索策略:默认自动清空,每次都重新添加搜索到的设备,如果选择设备累加则多次搜索后只会将新增加的设备加到设备列表,这个非常有用,在很多设备现场建议用设备累加策略而不是自动清空,因为onvif协议是udp协议,在大量数据的情况下会导致丢包,需要多次搜索,取最终的设备集合。
广播搜索:广播搜索指定网卡的所有onvif设备。
单播搜索:对指定设备进行单个搜索。
获取所有:按照当前填入的用户姓名和密码,填充到onvif请求鉴权中对所有搜索的设备进行媒体地址的获取、云台控制地址的获取、视频流地址的获取等。
获取当前:很多时候并不是所有的设备onvif用户信息一样,对于不一样的,可以先选中设备所在行,然后输入不同的用户信息,单击获取当前即可,会对当前选中的设备重新获取onvif信息。
添加选中:搜索到的设备前面都有个复选框,单击添加选中以后会对所有打钩的设备批量添加到摄像机信息表中,会自动过滤已经添加过的设备以及没有视频流地址的设备。
添加当前:对应获取当前,一般来说单个添加用户信息不一样的设备,因为批量添加不了,他的信息需要单独获取。
除了可以单个添加或者搜索添加,还支持批量添加功能。为了统一窗体,本地音视频设备比如本地摄像头和桌面的添加也在此界面中。本功能和轮询管理中的批量添加共用。
地址格式:可选文件、海康、大华等,切换后会自动生成地址模板格式在左侧,生成后可以手动修改。
地址数量:要批量添加多少个地址。如果是要添加NVR上的通道,则一般这里选择16。
起始地址:文件名的标识开始地址。
通道递增:勾选的话,则表示当前准备批量添加一台NVR下的所有通道,起始地址填NVR的地址。
批量生成:单击该按钮,自动批量添加。
视频输入设备:自动罗列本地视频设备名称,包括桌面,如果有多个屏幕,全部会获取。
音频输入设备:自动罗列本地音频设备名称,就是麦克风设备,也可以有本地内置音频输出设备,俗称内录音频设备。
轮询点管理界面,上侧是轮询点信息表,可以直接添加、删除、修改、清空轮询点信息,下侧是摄像机信息表,会自动加载,当摄像机信息变动后,这里会自动加载最新的数据。右下角是批量生成轮询点和轮询分组管理。
轮询点的添加有三种方式:手动添加、单个添加、批量添加。允许重复添加,没有过滤机制。
如果要删除某个轮询点信息,需要先选中该行,然后单击删除按钮,删除后会自动保存。
单击清空按钮会对整个表进行清空操作,清空后数据不能恢复,慎用。
单击导入按钮,可以选择之前导出的csv格式的文件导入数据。
单击导出按钮,将表格数据导出到csv格式的文件,用户可以打开文件编辑,然后再次导入,这样可以作为简易的备份机制使用,也可将繁琐的基础数据录入交给小姑娘去做。
单击打印按钮可以将表格中的内容打印出来,打印前会弹出打印预览界面,可以自行做边距的调整等,可以查看等待打印的内容,翻页切换。
单击导出按钮可以将表格中的内容导出到excel表格,独创的excel导出数据算法,极速导出,支持任意系统,无依赖。
和摄像机管理中的批量添加功能完全一致,具体参见上面的操作说明。
可添加、删除、修改、清空轮询分组名称,相当于轮询预案。
用户管理是后面增加的一个模块,用于设置不同的用户不同的类型+权限,可以细分到每个模块的权限,勾选表示具有该权限,内置了7种权限选择,后期还可以在此基础上增加其他权限等。
单击添加按钮,会自动规则生成默认的信息,直接表格中修改即可,修改好以后单击保存按钮保存所有的信息。
如果要删除某个用户信息,需要先选中该行,然后单击删除按钮,删除后会自动保存。不允许删除内置的admin用户。
单击清空按钮会对整个表进行清空操作,清空后数据不能恢复,慎用。
单击导入按钮,可以选择之前导出的csv格式的文件导入数据。
单击导出按钮,将表格数据导出到csv格式的文件,用户可以打开文件编辑,然后再次导入,这样可以作为简易的备份机制使用,也可将繁琐的基础数据录入交给小姑娘去做。
diff --git a/docs/video_system/snap/2-22-1.jpg b/docs/video_system/snap/2-22-1.jpg new file mode 100644 index 0000000..c737bdb Binary files /dev/null and b/docs/video_system/snap/2-22-1.jpg differ diff --git a/docs/video_system/snap/2-23-1.jpg b/docs/video_system/snap/2-23-1.jpg new file mode 100644 index 0000000..cf49da6 Binary files /dev/null and b/docs/video_system/snap/2-23-1.jpg differ diff --git a/docs/video_system/snap/2-24-1.jpg b/docs/video_system/snap/2-24-1.jpg new file mode 100644 index 0000000..e4160c2 Binary files /dev/null and b/docs/video_system/snap/2-24-1.jpg differ