












这个工具完善了十几年,从2014年开始就写了,从最开始只有搜索功能,后面加了云台控制,后面又有预置位,然后图片参数调节,再到后面加了OSD管理等,一直不断的迭代功能,满足现场用户实际需求,包括后面还做了手机安卓版本,也是方便某些用户做简便的调试使用。这个工具发布到如今,本意是给程序员尤其是qt开发者做二开用的,实际有超过半数的用户是非程序员,他们主要是工程人员,都是现场调试使用。那就有疑问了,本来就有个国际onvif工具odm,全称ONVIF Device Manager,功能也挺强大,但是不支持跨网段搜索,而且不支持265视频显示,云台也不支持左上角右下角,也没有OSD管理功能,总之工程人员用下来比较嫌弃,对比我这个工具用下来,都觉得我这个绿色版双击开箱即用非常好,满足了实际现场所有可能的情况。
近期在写监控设备模拟器过程中调试发现,收发数据的打印放在表格中,非常直观好用,之前打印在文本框中,尽管有不同颜色显示,也用换行隔开了,但是由于每个数据包很大很多内容,导致经常滚动条拉很久,要找到自己想要的数据,非常困难,而现场调试对于这个数据很敏感,查问题经常就需要这个原始的收发数据,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);
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。