前几天跟大家聊了一些关于ONVIF的一些基础知识,它的工作原理以及优势。今天安徽思蔷信息科技为带大家了解一下simpleonvif

百度云盘下载地址:链接:https://pan.baidu.com/s/1xMkeXRZjrVCyiTbivedCxA

提取码:8hx3

1.SimpleOnvif的功能

提供支持Windows、Linux、arm、Android、iOS等各种平台的SDK库,方便集成,二次开发。

2.onvif的搜索实现

std::map<std::string, std::string> OnvifService::GetDiscoveryDevices()

{

std::map<std::string, std::string> devs;

SimpleMutex lock(&mutex_);

std::map<std::string, ONVIF_DEVICE*>::iterator it = OnvifDeviceMap_.begin();

while (it != OnvifDeviceMap_.end())

{

ONVIF_DEVICE* dev = it->second;

char url[256] = {0};

snprintf(url, 255, "%s://%s:%d%s", dev->binfo.XAddr.https ? "https" : "http", dev->binfo.XAddr.host, dev->binfo.XAddr.port, dev->binfo.XAddr.url);

devs.insert(std::make_pair(dev->binfo.XAddr.host, url));

it++;

}

return devs;

}

3.onvif ptz实现

bool OnvifService::StartPtz(SimplePTZCMDType command, unsigned int speed, const std::string& host, const std::string& username, const std::string& password, const std::string& deviceUrl)

{

ONVIF_DEVICE manualDevice;

ONVIF_DEVICE* device = getDevice(&manualDevice, host, username, password, deviceUrl);

BOOL ret = false;

if (!device)

{

printf("==%s==Line:%d >> Get device Fail continue to find Device!!!\n", __FUNCTION__,__LINE__);

//return false;

}

else

{

onvif_SetAuthInfo(device, username.c_str(), password.c_str());

}

ContinuousMove_REQ req;

memset(&req, 0, sizeof(req));

#ifdef Simple_ONVIF_SPEED

float onvif_speed = 0.0;

if ((speed > 100) || (speed < 0))

{

printf("==%s==Line:%d >> Speed=%d,out of the range\n", __FUNCTION__, __LINE__, speed);

return false;

}

onvif_speed = float(speed / 100.0);

#endif

switch (command)

{

case Simple_PTZ_CMD_TYPE_LEFT:

req.Velocity.PanTiltFlag = 1;

#ifdef Simple_ONVIF_SPEED

req.Velocity.PanTilt.x = -(onvif_speed);

#else

req.Velocity.PanTilt.x = -1;

#endif // Simple_ONVIF_SPEED

req.Velocity.PanTilt.y = 0;

break;

case Simple_PTZ_CMD_TYPE_RIGHT:

req.Velocity.PanTiltFlag = 1;

#ifdef Simple_ONVIF_SPEED

req.Velocity.PanTilt.x = onvif_speed;

#else

req.Velocity.PanTilt.x = 1;

#endif

req.Velocity.PanTilt.y = 0;

break;

case Simple_PTZ_CMD_TYPE_UP:

req.Velocity.PanTiltFlag = 1;

req.Velocity.PanTilt.x = 0;

#ifdef Simple_ONVIF_SPEED

req.Velocity.PanTilt.y = onvif_speed;

#else

req.Velocity.PanTilt.y = 1;

#endif

break;

case Simple_PTZ_CMD_TYPE_DOWN:

req.Velocity.PanTiltFlag = 1;

req.Velocity.PanTilt.x = 0;

#ifdef Simple_ONVIF_SPEED

req.Velocity.PanTilt.y = -(onvif_speed);

#else

req.Velocity.PanTilt.y = -1;

#endif

break;

case Simple_PTZ_CMD_TYPE_ZOOMIN:

req.Velocity.ZoomFlag = 1;

#ifdef Simple_ONVIF_SPEED

req.Velocity.Zoom.x = -(onvif_speed);

#else

req.Velocity.Zoom.x = -1;

#endif

break;

case Simple_PTZ_CMD_TYPE_ZOOMOUT:

req.Velocity.ZoomFlag = 1;

#ifdef Simple_ONVIF_SPEED

req.Velocity.Zoom.x = onvif_speed;

#else

req.Velocity.Zoom.x = 1;

#endif

break;

default:

if(manualDevice.local_ip != 0)

{

onvif_free_device(device);

device = NULL;

}

return false;

}

// printf("==%s==Line:%d >>:PTZ info: Speed=[%d],PanTiltFlag=[%d],PanTilt.x=[%f],PanTilt.y=[%f],onvif_speed=[%f]\n", __FUNCTION__,__LINE__, speed, req.Velocity.PanTiltFlag, req.Velocity.PanTilt.x, req.Velocity.PanTilt.y,onvif_speed);

if (device && device->profiles && strlen(device->profiles->token) > 0)

{

strcpy(req.ProfileToken, device->profiles->token);

printf("==%s==Line%d >>:Start to Move device token=%s,name:%s\n", __FUNCTION__,__LINE__, device->profiles->token, device->profiles->name);

ret = onvif_ContinuousMove(device, &req, NULL);

printf("==%s==Line%d >>:Move device End ret=[%d].token:[%s],name:[%s].\n", __FUNCTION__, __LINE__, ret, device->profiles->token, device->profiles->name);

}

else

{

ONVIF_DEVICE* device_find = NULL;

if (OnvifDeviceMap_.find(host) != OnvifDeviceMap_.end())

{

SimpleMutex lock(&mutex_);

device_find = OnvifDeviceMap_[host];

}

if (!device_find)

{

printf("==%s==Line:%d>> Find device Failed PTZ start Failed End!!!!\n", __FUNCTION__,__LINE__);

return false;

}

onvif_SetAuthInfo(device_find, username.c_str(), password.c_str());

BOOL getCapabilities = false;

getCapabilities = GetCapabilities(device_find);

printf("==%s==:Line:%d >> dev ip:[%s] getCapabilities = %d\n", __FUNCTION__, __LINE__, device_find->binfo.XAddr.host, getCapabilities);

if (!getCapabilities)

{

getCapabilities = GetServices(device_find);

printf("==%s==:Line:%d >> dev ip:[%s] GetServices = %d\n", __FUNCTION__, __LINE__, device_find->binfo.XAddr.host, getCapabilities);

}

if (getCapabilities && GetProfiles(device_find) )

{

printf("==%s==:Line:%d >> dev ip:[%s] GetProfiles Success\n", __FUNCTION__, __LINE__, device_find->binfo.XAddr.host);

if (device_find->profiles && strlen(device_find->profiles->token) > 0)

{

strcpy(req.ProfileToken, device_find->profiles->token);

printf("==%s==Line%d >>:Start to Move find_device token:[%s],name:[%s]\n", __FUNCTION__, __LINE__, device_find->profiles->token, device_find->profiles->name);

ret = onvif_ContinuousMove(device_find, &req, NULL);

printf("==%s==Line%d >>:Move device End ret=[%d].token:[%s],name:[%s].\n", __FUNCTION__, __LINE__, ret,device_find->profiles->token, device_find->profiles->name);

}

}

else

{

ret = false;

printf("%s:Line:%d dev ip:[%s] GetProfiles Failed, Failed to Move\n", __FUNCTION__, __LINE__, device_find->binfo.XAddr.host);

}

}

if (manualDevice.local_ip != 0)

{

onvif_free_device(device);

}

return ret;

}

ONVIF协议客户端的更多相关文章

  1. C#实现视频监控客户端onvif协议一

    前言 最近做的项目是监控方面的,需要对接各种摄像头,之前的方案是把各个厂家的SDK都集成到系统中,然后让用户进行切换,后来知道了Onvif (自行百度具体概念)这个东西.原来早就有人一统江湖了. on ...

  2. ONVIF协议学习笔记

    一.理解 1.1 技术理解 ONVIF = 服务端 + 客户端 =(Web Services + RTSP)+ 客户端 = ((WSDL + SOAP) + RTSP) + 客户端 WSDL是服务端用 ...

  3. 基于ONVIF协议的摄像头开发总结

    <什么是ONVIF协议>     2008年5月,由安讯士(AXIS)联合博世(BOSCH)及索尼(SONY)公司三方宣布携手共同成立一个国际开放型网络视频产品标准网络接口开发论坛,取名为 ...

  4. onvif 协议

    1.ONVIF 协议解读 https://www.onvif.org 一.什么是ONVIF? 1.1形成 2008年5月,由安讯士(AXIS)联合博世(BOSCH)及索尼(SONY)公司三方宣布携手共 ...

  5. EasyNVR网页摄像机无插件H5、谷歌Chrome直播方案-Onvif(一)使用Onvif协议进行设备发现以及指定设备信息探测

    背景分析 众所周知,EasyNVR不拘泥.不受限于摄像机的品牌厂商及其配套平台,只要是网络监控摄像机IPC.硬盘录像机NVR.且设备支持标准的RTSP/Onvif协议,都可以接入实时视频流进入Easy ...

  6. Onvif协议及其在Android下的实现

    好久没有写博客,今天将前段时间做的Onvif协议在Android上的实现分享给大家. 首先,我们先来了解一下什么是Onvif协议:ONVIF 协议是由Open Network Video Interf ...

  7. Atitit onvif协议获取rtsp地址播放java语言 attilx总结

    Atitit onvif协议获取rtsp地址播放java语言 attilx总结 1.1. 获取rtsp地址的算法与流程1 1.2. Onvif摄像头的发现,ws的发现机制,使用xcf类库1 2. 调用 ...

  8. Atitit onvif 协议截图 getSnapshotUri 使用java

    Atitit onvif 协议截图 getSnapshotUri 使用java 1.1. ONVIF Device Test Tool1 1.2. 源码2 1.3. 直接浏览器访问http://192 ...

  9. 开源的C#实现WebSocket协议客户端和服务器websocket-sharp组件解析

    很久没有写博客了(至少自己感觉很长时间没有写了),没办法啊,楼主也是需要生活的人啊,这段一直都在找工作什么的.(整天催我代码的人,还望多多谅解啊,我会坚持写我们的项目的,还是需要相信我的,毕竟这是一个 ...

随机推荐

  1. Java面向对象系列(12)- Static关键字讲解

    场景一:静态变量 package oop.demo07; public class Student { private static int age;//静态的变量 一般多线程用的比较多 privat ...

  2. python 深度学习 库文件安装出错汇总

    Cython_bbox FairMOT | win10下cython-bbox安装的心酸之路_是阳阳呀的博客-CSDN博客 swig 安装polyiou.py https://blog.csdn.ne ...

  3. 事项同步事项编码(mt_code)长度超过数据库限制的varchar(32)线上问题

    改下长度限制重新同步下,可以恢复正常!

  4. 鸿蒙内核源码分析(工作模式篇) | CPU是韦小宝,七个老婆 | 百篇博客分析OpenHarmony源码 | v36.04

    百篇博客系列篇.本篇为: v36.xx 鸿蒙内核源码分析(工作模式篇) | CPU是韦小宝,七个老婆 | 51.c.h .o 硬件架构相关篇为: v22.xx 鸿蒙内核源码分析(汇编基础篇) | CP ...

  5. 系统设计实践(03)- Instagram社交服务

    前言 系统设计实践篇的文章将会根据<系统设计面试的万金油>为前置模板,讲解数十个常见系统的设计思路. 前置阅读: <系统设计面试的万金油> 系统设计实践(01) - 短链服务 ...

  6. MySQL的本地事务、全局事务、分布式事务

    本地事务 事务特性:ACID,其中C一致性是目的,AID是手段. 实现隔离性 写锁:数据加了写锁,其他事务不能写也不能读. 读锁:数据加了读锁,其他事务不能加写锁可以加读锁,可以允许自己升级为写锁. ...

  7. java SE(未完结)

    数据类型与运算符 数据类型 基础数据类型 数值型 正整型 byte short int long 结尾加(l/L) 浮点型 float 结尾加(f/F) double 字符型 char 只能存储一个字 ...

  8. 8.3 MHA 搭建

    操作步骤 1.配置主从 1.1 master /etc/my.cnf server-id log-bin skip-name-resolve 1.2 master 建立repl用户 grant rep ...

  9. 题解 「HDU6403」卡片游戏

    link Description 桌面上摊开着一些卡牌,这是她平时很爱玩的一个游戏.如今卡牌还在,她却不在我身边.不知不觉,我翻开了卡牌,回忆起了当时一起玩卡牌的那段时间. 每张卡牌的正面与反面都各有 ...

  10. 洛谷3783 SDOI2017 天才黑客(最短路+虚树+边转点+线段树优化建图)

    成功又一次自闭了 怕不是猪国杀之后最自闭的一次 一看到最短路径. 我们就能推测这应该是个最短路题 现在考虑怎么建图 根据题目的意思,我们可以发现,在本题中,边与边之间存在一些转换关系,但是点与点之间并 ...