赞
踩
在安防视频监控行业,Onvif作为国际标准,几乎主要的厂商都支持,不仅包含了国内的厂商,也包括主要的国际厂商,由于有了这个标准的存在,使得不同设备不同安防平台之间,能够接入各个厂家的硬件设备,互通有无,你中有我我中有你,实现良性竞争。ONVIF是一个全球性的开放式行业协议,其目标是促进开发和使用基于物理IP的安全产品接口的全球开放标准。ONVIF创建了一个视频监控和其他物理安全领域的IP产品如何进行相互通信的标准。
公众号:Qt实战,各种开源作品、经验整理、项目实战技巧,专注Qt/C++软件开发,视频监控、物联网、工业控制、嵌入式软件、国产化系统应用软件开发。
公众号:Qt入门和进阶,专门介绍Qt/C++相关知识点学习,帮助Qt开发者更好的深入学习Qt。多位Qt元婴期大神,一步步带你从入门到进阶,走上财务自由之路。
这里需要特别强调的是,onvif只是个文本协议,并不包括视频流的传输,onvif协议可以拿到视频流地址比如rtsp地址,至于rtsp如何传输这是其他的事情,你可以用ffmpeg或者live555去做解析。本人在接触和使用了众多的相关监控设备后,总结的onvif的主要功能如下:
主要处理流程:
本组件代码使用说明:
//实例化搜索对象并关联信号槽 OnvifSearch *search = new OnvifSearch(this); connect(search, SIGNAL(receiveDevice(OnvifDeviceInfo)), this, SLOT(receiveDevice(OnvifDeviceInfo))); //参数1是网卡地址/参数2指定地址则表示单播 search->search("192.168.0.110", ""); void frmSimple::receiveDevice(const OnvifDeviceInfo &deviceInfo) { QString msg = QString("收到设备: %1").arg(deviceInfo.onvifAddr); ui->textEdit->append(msg); QListWidgetItem *item = new QListWidgetItem; item->setText(deviceInfo.deviceIp); item->setData(Qt::UserRole, deviceInfo.onvifAddr); ui->listWidget->addItem(item); }
//实例化onvif对象实例 OnvifDevice *device = new OnvifDevice(this); //设置用户信息用于请求的时候认证用 device->setUserInfo("admin", "123456"); //设置请求地址 device->setOnvifAddr("http://192.168.0.64/onvif/device_service"); //先获取服务文件 device->getServices(); //可能为空需要按照另一种方式获取 if (device->getMediaUrl().isEmpty()) { device->getCapabilities(); } //获取配置文件 QList<OnvifProfileInfo> profiles = device->getProfiles(); foreach (OnvifProfileInfo profile, profiles) { ui->cboxProfiles->addItem(profile.token); } //对指定的配置文件获取视频地址 QString token = ui->cboxProfiles->currentText(); QString url = device->getStreamUri(token); ui->txtStreamUri->setText(url);
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。