欢迎光临外链购买平台,轻松为你获得外链购买的成功案例,友链相关事宜咨询:18978701720,黄经理

外链购买,专注打造匠心好平台

一个好的外链购买,可以为你轻松解决获客难题

Qt编程安全视频监控系统32-ONVIF信息采集

作者:jcmp      发布时间:2021-05-08      浏览量:1
1。最后一篇文章写的是ONVIF设备搜索

1。最后一篇文章

写的是ONVIF设备搜索。找到这些设备后,首先要获取设备信息,如获取视频流地址、配置套件信息、码流信息、分辨率等。毕竟,大部分信息很可能无法获得。按需编码始终是第一条原则,第二条原则是考虑扩展性和稳定性,如果基本要求不能达到,它不是一个真正的软件,无论有多大的可扩展性和稳定性都是徒劳的,严重的是所有编程语言都是垃圾,可以解决实际需求,实现就是王者!

ONVIF设备信息获取需要注意的是,目前市场上的大多数相机都有密码认证的限制,无论是管理员还是默认的12345,至少有一个用户认证机制,这相对安全得多,否则任何人也可以通过ONVIF协议获得相应的信息,没有安全可言,记住几年前海康暴露了一个漏洞。结果很多监控摄像头都被泄露了,所以海康目前的相机默认的ONVIF关闭了,当密码打开的时候啊,如果你想要更安全的话,就得牺牲方便,我不知道谁能想出一个完美的办法来处理它。

ONVIF主要的功能

ONVIF的处理流程

OnvifDevice::DeviceInfo*OnvifDevice::getDeviceInfo(){DeviceInfo*deviceInfo=0;QStringfile=OnvifHelper::getFile(“:/send/getDeviceInfo.xml”);file=file.arg(Request&>;getToken());QBytedataSend=file.toUtf 8();QNetworkReply*Reply=Request->;auth(deviceUrl,dataSend);发出sendData(dataSend,deviceUrl);QByteArray数据接收;bool ok=校验数据(应答,数据接收,“获取能力文件”);if(Ok){OnvifQuery查询;query.Data(DataRecare);QStringWSDL=query.getDeviceWsdl();QStringname_path=QString(“//%1:GetDeviceInformationResponse/%1:Manufacturer”).arg(wsdl);QString mod_path=QString(“//%1:GetDeviceInformationResponse/%1:Model”).arg(wsdl);qStringver_path=QString(“//%1:GetDeviceInformationResponse/%1:FirmwareVersion”).Arg(Wsdl);qStringser_path=QString(“//%1:GetDeviceInformationResponse/%1:SerialNumber”).arg(wsdl);qStringhard_path=QString(“//%1:GetDeviceInformationResponse/%1:HardwareId”).arg(wsdl);//包广播搜索的设备信息以及deviceInfo=新的DeviceInfo;deviceInfo->addr=this->deviceInfo.value(“addr”);deviceInfo->ip=this->deviceInfo.value(“IP”);deviceInfo->;name=this->;name=this>;name=this>;DeviceInfo.value(“name”);deviceInfo->;Location=this->;deviceInfo.value(“Location”);deviceInfo->;硬件=this->;deviceInfo.value(“硬件”);deviceInfo->;制造商=query.getValue(Name_Path);deviceInfo->;model=query.getValue(Mod_Path);deviceInfo->;固件Version=query.getValue(Ver_Path);deviceInfo->;序列化Number=query.getValue(Ser_Path);deviceInfo->;hardwareId=query。GetValue(Hard_Path);}返回deviceInfo;}bool OnvifDevice::getCapability(){qStringfile=OnvifHelper::getFile(“:/send/getCapabilities.xml”);QByteArray dataSend=file.toUtf 8();QNetworkReply*Reply=Request->;POST(deviceUrl,dataSend);发出sendData(dataSend,deviceUrl);QByteArray数据接收;bool ok=校验数据(答复,dataRecept,“获取能力文件”);如果(Ok){OnvifQuery查询;QStringschema=query.getSchema();QStringschema=query.getSchema();QStringPATH=QString(“//%1:GetCapabilitiesResponse/%1:Capabilities/%2:Media/%2:XAddr”).arg(wsdl).arg(schema);QStringPTZ_PATH=QString(“//%1:GetCapabilitiesResponse/%1:Capabilities/%2:PTZ/%2:XAddr”).arg(wsdl).arg(schema);MediaUrl=query.getValue(Med_Path);ptzUrl=query.getValue(PTZ_Path);}返回ok;}bool OnvifDevice::getServices(){QString file=OnvifHelper::getFile(“:/send/getServices)。XML“);QByteArray dataSend=file.toUtf 8();QNetworkReply*Reply=Request->;POST(deviceUrl,dataSend);发出sendData(dataSend,deviceUrl);QByteArray数据接收;bool ok=校验数据(Reply,dataRecept,”获取服务文件“);if(Ok){OnvifServices服务;services.setData(dataRec难);mediaUrl=services.getMediaUrl();pUrtzl=services.getPtzUrl();}back ok;}QStringList OnvifDevice::getMedia(){QStringList令牌;qStringfile=OnvifHelper::getFile(“:/send/getProfiles.xml”);file=file.arg(请求>;getUserToken();QByteArray dataSend=file.toUtf 8();QNetworkReply*Reply=Request->;auth(mediaUrl,dataSend));发出sendData(dataSend,mediaUrl);If(Ok){OnvifMedia onvifMedia;onvifMedia.setData(DataRecept);Tokens=onvifMedia.getTokens();if(Tokens.count()>;0){profile=Tokens。返回令牌;}返回令牌;}QString OnvifDevice::getProfile(){//如果为空则先执行获取一次if(this->;profile.isempty()){getMedia();}返回此->;配置文件;}QString OnvifDevice::getRtspURI(ConstQString&;profileToken){QStringfile=OnvifHelper::getFile(“:/send/getStreamUri.xml”);file=file.arg(请求>;GetUserToken().arg(ProfileToken);QByteArray dataSend=file.toUtf 8();QNetworkReply*Reply=Request->;auth(mediaUrl,dataSend);发送sendData(dataSend,mediaUrl);QByteArray dataRecept;bool ok=checkData(应答,dataRecare,“获取视频地址”);if(Ok){OnvifQuery查询;query.setData(DataRecture);rtspUrl=query.getRtspUrl();}返回rtspUrl;}。