会议网站建设方案,制作公司网站要多少费用呢,聊城 网站建设,网站微信建设一、前言说明 在视频监控系统中#xff0c;除了提供onvif搜索设备方式添加地址外#xff0c;还提供了批量添加的功能#xff0c;比如一个厂区有几百个摄像头#xff0c;都是同一个品牌#xff0c;IP地址也是按照递增的顺序配置好了#xff0c;在不同网段无法使用onvif组…一、前言说明在视频监控系统中除了提供onvif搜索设备方式添加地址外还提供了批量添加的功能比如一个厂区有几百个摄像头都是同一个品牌IP地址也是按照递增的顺序配置好了在不同网段无法使用onvif组播的情况下就需要手动添加地址而同一个厂家的设备基本上rtsp地址的格式是一样的唯一区别就是IP地址变化如果是手动一个个添加也很麻烦是否可以提供一个起始IP地址和结束IP地址然后一键批量添加这样极大提高效率用户只需要选择不同的品牌即可比如海康大华宇视华为天地伟业等都有自己的固定的格式。只是添加摄像头设备还是不够的有时候需要添加NVR下多个摄像头这样只需要增加添加的数量和NVR的IP地址即可其实一台NVR下面不同的摄像头的rtsp地址只是通道位置标识变了IP地址都是一样的。这样就可以很方便的自动生成多个不同厂家的NVR的通道流地址。随着用户的增加现场需求环境的变化后面又把本地设备的识别和添加也放进来了有些用户是现场采集本地插的多个USB摄像头进行采集并不是网络监控摄像头最好是能够自动识别本地存在的摄像头设备获取后还可以获取到支持的分辨率帧率等参数按照设定的帧率分辨率参数进行采集自此目前所有遇到过的需求都增加进来了。打完收工非常完美。二、效果图三、相关地址国内站点https://gitee.com/feiyangqingyun国际站点https://github.com/feiyangqingyun个人作品https://blog.csdn.net/feiyangqingyun/article/details/97565652文件地址https://pan.baidu.com/s/1d7TH_GEYl5nOecuNlWJJ7g 提取码01jf 名称bin_video_system四、功能特点4.1 软件模块视频监控模块各种停靠小窗体子模块包括设备列表、图文警情、窗口信息、云台控制、预置巡航、视频轮询、设备控制、悬浮地图、网页浏览等。视频回放模块包括本地回放、网络回放、远程回放、图片回放、视频上传等。电子地图模块包括图片地图、设备地图、设备移动、轨迹回放等。日志查询模块包括本地日志、设备日志等。系统设置模块包括系统设置基本设置、视频参数、数据库设置、颜色配置、功能激活等、录像机管理、摄像机管理、轮询配置、录像计划、用户管理、其他设置等。4.2 基础功能支持各种音视频流rtsp、rtmp、http、srt、ws等、音视频文件mp4、rmvb、avi等、本地设备本地摄像头、麦克风、桌面。支持多画面切换包括1、4、6、8、9、13、16、25、36、64画面切换。支持全屏切换多种切换方式包括鼠标右键菜单、工具栏按钮、快捷键altenter全屏esc退出全屏。支持视频轮询包括1、4、9、16画面轮询可设置轮询分组轮询预案、轮询间隔、码流类型等。支持onvif协议包括设备搜索、云台控制、预置位管理、设备控制图片参数、校对时间、系统重启、抓拍图片、OSD配置、网络配置等。支持权限管理不同的用户可以对应不同的模块权限比如删除日志、关闭系统等。数据库支持多种包括sqlite、mysql、sqlserver、postgresql、oracle、人大金仓等。支持本地设备采集比如本地桌面和摄像头支持设置分辨率、帧率等参数支持多屏幕。所有停靠模块都自动生成对应的菜单用来控制显示和隐藏在标题栏右键可以弹出。支持显示所有模块、隐藏所有模块、复位普通布局、复位全屏布局。支持图片地图和网页地图上双击设备图标弹出实时预览。摄像机节点拖曳到对应窗体播放视频同时支持拖曳本地文件直接播放。设备树双击分组打开对应分组下的所有视频双击设备子节点直接打开对应设备视频流。自动加载最后展开的节点。设备树支持自定义配置可以添加分组、删除分组、修改分组任意层级设置。设备树可以开启是否放大字体显示、是否显示主码流子码流节点、是否隐藏空组没有设备的分组自动隐藏。删除视频支持鼠标右键删除、悬浮条关闭删除、拖曳到视频监控面板外删除等多种方式。图片地图上设备按钮可自由拖动自动保存位置信息。地图上可以鼠标单击获取经纬度信息用来更新设备位置。视频监控面板窗体中任意通道支持拖曳交换瞬间响应。网页地图支持视图切换、运动轨迹显示、设备点位鼠标按下获取经纬度等。双击节点、拖曳节点、拖曳窗体交换位置等操作均自动更新保存最后的播放地址下次软件打开自动应用。右下角音量条控件失去焦点自动隐藏音量条带静音图标自动记忆最后的音量及静音状态。支持视频截图可指定单个或者对所有通道截图底部小工具栏也有截图按钮每个视频控件悬浮条也有抓拍按钮。支持辅屏预览可以打开多个在多个屏幕分别打开64通道按需显示视频。支持超时自动隐藏鼠标指针、自动全屏机制。支持onvif云台控制可上下左右移动云台摄像机包括复位和焦距调整等。支持onvif预置位可以添加、删除、修改预置位可以调用起始位。支持OSD增删改查可以通过onvif协议添加及修改OSD信息。支持onvif图像参数设置包括明亮度、对比度、饱和度、尖锐度等。支持onvif其他操作包括抓图、网络设置、校时、重启、事件订阅等。支持任意onvif摄像机包括但不限于海康、大华、宇视、天地伟业、华为等。可保存视频可通过录像计划存储也可在悬浮条手动切换开始录像和停止录像。可设置视频流通信方式tcp或udp可设置视频解码是速度优先、质量优先、均衡处理、最快速度等。可设置软件中文名称、英文名称、LOGO图标等。存储的视频文件支持导出到指定目录支持批量上传到服务器。完善的录像计划设置支持每个通道7 * 24小时每半小时设置是否存储录像。音视频同步显示以及音视频同步存储到MP4文件。4.3 特色功能主界面采用停靠窗体模式各种组件以小模块的形式加入可自定义任意模块加入。停靠模块可拖动任意位置嵌入和悬浮支持最大化全屏支持多屏幕。双重布局文件存储机制正常模式、全屏模式都对应不同的布局方案自动切换和保存比如全屏模式可以突出几个模块透明显示在指定位置更具科幻感现代化。原创onvif协议机制采用底层协议解析udp广播搜索http请求执行命令更轻量易懂易学习拓展不依赖任何第三方组件比如gsoap。原创数据导入、导出、打印机制跨平台不依赖任何组件瞬间导出数据。内置多个原创组件宇宙超值超级牛逼包括数据导入导出组件导出到xls、pdf、打印、数据库组件数据库管理线程、自动清理数据线程、万能分页、数据请求等、地图组件、视频监控组件、文件多线程收发组件、onvif通信组件、通用浏览器内核组件等。自定义信息框、错误框、询问框、右下角提示框包含多种格式等。精美换肤高达20套皮肤样式随意更换所有样式全部统一包括菜单等。选中通道对应设备树节点高亮选中通道节点对应视频控件高亮方便查看当前通道信息。视频控件悬浮条可以自行增加多个按钮监控界面底部小工具栏也可自行增加按钮。双击摄像机节点自动播放视频双击节点自动依次添加视频会自动跳到下一个双击父节点自动添加该节点下的所有视频。可选主码流、子码流。录像机管理、摄像机管理可添加删除修改导入导出打印信息立即应用新的设备信息生成树状列表不需重启。摄像机搜索支持一键搜索和批量添加支持onvif的NVR一键添加子设备可以手动设置开始地址和数量一键生成摄像机信息。可选多种内核自由切换ffmpeg、vlc、mpv等均可在pro中设置。推荐用ffmpeg跨平台最多默认提供好了linux和mac平台上编译好的库。支持windows、linux、macos等系统硬解码还支持嵌入式linux RKMPP硬解码可设置硬解码类型dxva2、d3d11va、vaapi、vdpau等。各种模块可以勾选是否激活方便根据实际需求搭配各种组合比如隐藏电子地图模块隐藏远程回放模块只保留本地回放等。尽最大化可能将常用的功能封装接口全局静态函数调用极其容易使用提供各种使用示例方便用户二开。默认采用opengl绘制视频超低的CPU资源占用支持yuyv和nv12两种格式绘制性能爆表。标签和图形信息支持三种绘制方式绘制到遮罩层、绘制到图片、源头绘制对应信息可以存储到文件。包括但不限于视频监控内核组件的所有功能可参阅说明书中功能介绍 [视频监控内核](###8.1 视频监控内核)。高度可定制化用户可以很方便的在此基础上衍生自己的功能比如增加自定义模块增加运行模式、机器人监控、无人机监控、挖掘机监控、广播监控等。支持xp、win7、win10、win11、linux、mac、各种国产系统UOS、中标麒麟、银河麒麟等、嵌入式linux等系统。注释完整项目结构清晰超级详细完整的使用开发手册精确到每个代码文件的功能说明不断持续迭代版本。五、相关代码#includefrmconfigaddplus.h#includeui_frmconfigaddplus.h#includeqthelper.h#includeurlhelper.h#includedeviceinfohelper.hSINGLETON_IMPL(frmConfigAddPlus)frmConfigAddPlus::frmConfigAddPlus(QWidget*parent):QWidget(parent),ui(newUi::frmConfigAddPlus){ui-setupUi(this);this-initForm();this-initConfig();}frmConfigAddPlus::~frmConfigAddPlus(){deleteui;}voidfrmConfigAddPlus::showEvent(QShowEvent*){staticboolisLoadfalse;if(!isLoad){isLoadtrue;on_btnGetDevice_clicked();QtHelper::setFormInCenter(this);}}voidfrmConfigAddPlus::initForm(){this-setWindowTitle(批量添加);this-setWindowFlags(this-windowFlags()|Qt::WindowStaysOnTopHint);this-setFixedSize(this-size());ui-line-setFixedHeight(1);}voidfrmConfigAddPlus::initConfig(){UrlHelper::loadCompany(ui-cboxPlusType,true);ui-cboxPlusType-setCurrentIndex(ui-cboxPlusType-findData(BaseConfig::PlusType));connect(ui-cboxPlusType,SIGNAL(currentIndexChanged(int)),this,SLOT(saveConfig()));ui-sboxPlusNumber-setValue(BaseConfig::PlusNumber);connect(ui-sboxPlusNumber,SIGNAL(valueChanged(int)),this,SLOT(saveConfig()));ui-ckPlusNvr-setChecked(BaseConfig::PlusNvr);connect(ui-ckPlusNvr,SIGNAL(stateChanged(int)),this,SLOT(saveConfig()));ui-txtPlusAddr-setText(BaseConfig::PlusAddr);connect(ui-txtPlusAddr,SIGNAL(textEdited(QString)),this,SLOT(saveConfig()));ui-txtPlusMain-setText(BaseConfig::PlusMain);connect(ui-txtPlusMain,SIGNAL(textChanged(QString)),this,SLOT(saveConfig()));ui-txtPlusSub-setText(BaseConfig::PlusSub);connect(ui-txtPlusSub,SIGNAL(textChanged(QString)),this,SLOT(saveConfig()));}voidfrmConfigAddPlus::saveConfig(){BaseConfig::PlusTypeui-cboxPlusType-itemData(ui-cboxPlusType-currentIndex()).toInt();BaseConfig::PlusNumberui-sboxPlusNumber-value();BaseConfig::PlusNvrui-ckPlusNvr-isChecked();BaseConfig::PlusAddrui-txtPlusAddr-text().trimmed();BaseConfig::PlusMainui-txtPlusMain-text().trimmed();BaseConfig::PlusSubui-txtPlusSub-text().trimmed();BaseConfig::writeConfig();}voidfrmConfigAddPlus::addTitle(constQStringtitle){ui-cboxTitleDevice-addItem(title);}voidfrmConfigAddPlus::on_btnAddPlus_clicked(){//提前取出IP地址末尾数intnumber;QString head;QStringList listBaseConfig::PlusAddr.split(.);if(list.count()4){headQString(%1.%2.%3).arg(list.at(0)).arg(list.at(1)).arg(list.at(2));numberlist.at(3).toInt();}//替换对应的地址并自动递增QStringList rtspMains,rtspSubs;CompanyType type(CompanyType)BaseConfig::PlusType;for(inti0;iBaseConfig::PlusNumber;i){QString targetBaseConfig::PlusAddr;QString rtspMainBaseConfig::PlusMain;QString rtspSubBaseConfig::PlusSub;intindexDbData::NvrInfo_NvrIP.indexOf(target);if(typeCompanyType_File){targetQString::number(iBaseConfig::PlusAddr.toInt());}elseif(BaseConfig::PlusNvr){//通道递增是另外格式/只递增通道不递增地址intchanneli;QString userName,userPwd;if(index0){userNameDbData::NvrInfo_UserName.at(index);userPwdDbData::NvrInfo_UserPwd.at(index);}else{UrlHelper::getUserInfo(rtspMain,userName,userPwd);}CompanyType companyType(CompanyType)BaseConfig::PlusType;rtspMainUrlHelper::getRtspUrl(companyType,userName,userPwd,channel,0);rtspSubUrlHelper::getRtspUrl(companyType,userName,userPwd,channel,1);}else{intaddrinumber;targetQString(%1.%2).arg(head).arg(addr);if(addr255){break;}}rtspMain.replace([Addr],target);rtspSub.replace([Addr],target);rtspMainsrtspMain;rtspSubsrtspSub;}emitaddPlus(rtspMains,rtspSubs);}voidfrmConfigAddPlus::on_btnAddDevice_clicked(){QString audioDeviceui-cboxAudioDevice-currentText();QString videoDeviceui-cboxVideoDevice-currentText();QString titleDeviceui-cboxTitleDevice-itemData(ui-cboxTitleDevice-currentIndex()).toString();//如果设备参数那边有下拉选择/则还需要添加分辨率帧率等参数QString optionui-cboxDeviceOption-currentText();QString urlDeviceInfoHelper::getOptionUrl(audioDevice,videoDevice,titleDevice,option);if(url.isEmpty()){return;}QStringList addrsQStringList()url;emitaddPlus(addrs,addrs);}voidfrmConfigAddPlus::on_btnGetDevice_clicked(){DeviceInfoHelper::initInputDevices(ui-cboxAudioDevice,ui-cboxVideoDevice,ui-cboxTitleDevice);}voidfrmConfigAddPlus::on_btnGetOption_clicked(){DeviceInfoHelper::initInputOptions(ui-cboxAudioDevice,ui-cboxVideoDevice,ui-cboxDeviceOption);}voidfrmConfigAddPlus::on_cboxVideoDevice_currentIndexChanged(intindex){ui-cboxDeviceOption-clear();}voidfrmConfigAddPlus::on_cboxPlusType_currentIndexChanged(intindex){//切换类型自动填入对应的格式(可以自行增加其他格式)CompanyType companyType(CompanyType)ui-cboxPlusType-itemData(index).toInt();QString rtspMainUrlHelper::getRtspUrl(companyType,admin,123456,0,0);QString rtspSubUrlHelper::getRtspUrl(companyType,admin,123456,0,1);ui-txtPlusMain-setText(rtspMain);ui-txtPlusSub-setText(rtspSub);}