ONVIF协议客户端
前几天跟大家聊了一些关于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协议客户端的更多相关文章
- C#实现视频监控客户端onvif协议一
前言 最近做的项目是监控方面的,需要对接各种摄像头,之前的方案是把各个厂家的SDK都集成到系统中,然后让用户进行切换,后来知道了Onvif (自行百度具体概念)这个东西.原来早就有人一统江湖了. on ...
- ONVIF协议学习笔记
一.理解 1.1 技术理解 ONVIF = 服务端 + 客户端 =(Web Services + RTSP)+ 客户端 = ((WSDL + SOAP) + RTSP) + 客户端 WSDL是服务端用 ...
- 基于ONVIF协议的摄像头开发总结
<什么是ONVIF协议> 2008年5月,由安讯士(AXIS)联合博世(BOSCH)及索尼(SONY)公司三方宣布携手共同成立一个国际开放型网络视频产品标准网络接口开发论坛,取名为 ...
- onvif 协议
1.ONVIF 协议解读 https://www.onvif.org 一.什么是ONVIF? 1.1形成 2008年5月,由安讯士(AXIS)联合博世(BOSCH)及索尼(SONY)公司三方宣布携手共 ...
- EasyNVR网页摄像机无插件H5、谷歌Chrome直播方案-Onvif(一)使用Onvif协议进行设备发现以及指定设备信息探测
背景分析 众所周知,EasyNVR不拘泥.不受限于摄像机的品牌厂商及其配套平台,只要是网络监控摄像机IPC.硬盘录像机NVR.且设备支持标准的RTSP/Onvif协议,都可以接入实时视频流进入Easy ...
- Onvif协议及其在Android下的实现
好久没有写博客,今天将前段时间做的Onvif协议在Android上的实现分享给大家. 首先,我们先来了解一下什么是Onvif协议:ONVIF 协议是由Open Network Video Interf ...
- Atitit onvif协议获取rtsp地址播放java语言 attilx总结
Atitit onvif协议获取rtsp地址播放java语言 attilx总结 1.1. 获取rtsp地址的算法与流程1 1.2. Onvif摄像头的发现,ws的发现机制,使用xcf类库1 2. 调用 ...
- Atitit onvif 协议截图 getSnapshotUri 使用java
Atitit onvif 协议截图 getSnapshotUri 使用java 1.1. ONVIF Device Test Tool1 1.2. 源码2 1.3. 直接浏览器访问http://192 ...
- 开源的C#实现WebSocket协议客户端和服务器websocket-sharp组件解析
很久没有写博客了(至少自己感觉很长时间没有写了),没办法啊,楼主也是需要生活的人啊,这段一直都在找工作什么的.(整天催我代码的人,还望多多谅解啊,我会坚持写我们的项目的,还是需要相信我的,毕竟这是一个 ...
随机推荐
- mongodb linux基本启动 基础增删改 mysql语法的对比
一.主流数据源类型 还存在自定义数据源以及REST接口数据,共6中数据源. 二.linux下启动连接数据库 进去mongodb的目录启动服务:mongo --host 192.168.320.826 ...
- html正文提取工具goose的安装及简单使用Demo
1.git clone https://github.com/grangier/python-goose.git 2.cd python-goose 3.sudo pip install -r req ...
- Python就业方向
0.WEB开发 Python拥有很多免费数据函数库.免费web网页模板系统.以及与web服务器进行交互的库,可以实现web开发,搭建web框架,目前比较有名气的Python web框架为Django. ...
- 『GoLang』语法基础
标识符 字母或下划线开头 之后只能出现数字.字母.下划线 大小写敏感 Go语言关键字 break default func interface select case defer go map str ...
- 入坑Java的自学之路
# 入坑Java的自学之路 ## 基础知识 - 编程语言:Java python c- 基本算法- 基本网络知识 tcp/ip http/https- 基本的设计模式 ------ ## 工具方面 - ...
- P2490-[SDOI2011]黑白棋【博弈论,dp】
正题 题目链接:https://www.luogu.com.cn/problem/P2490 题目大意 一个长度为\(n\)的棋盘上放下\(k\)个棋子. 第一个要是白色,下一个要是黑色,在下一个是白 ...
- GitHub 和 Gitee 开源免费 10 个超赞后台管理面板,看完惊呆了!
软件工程师在实际项目开发中不可避免需要依赖一些前后端的后台管理系统框架,而不是从零开始一点点的搭建,浪费人力.目前市面上有很多开放源码.且免费的后台管理面板,样式色彩也比较丰富美观. 今天整理 ...
- Fiddler抓HTTPS接口数据,安装证书并不复杂,超详细的图文解说,不信你看!
@ 目录 前言 安装环境 配置网络 IP 端口 配置网络 浏览器打开下载链接 下载证书 安装证书 证书安装坑 前言 抓包是我测试工作中必须要学会的一个工具,我们都知道,抓取HTTPS接口里需要安装证书 ...
- 01 ASP.NET Core 3 启动过程(一)
ASP.NET Core 3 启动过程(一) 最近又忙于各种扯淡,今天来一个需求,明天又来一个需求,后天需求又变了,这可能是很多人遇到的情况.正在紧张的忙碌着,突然一个信息把所有计划打乱了," ...
- video 适配通屏展示、针对不同分辨率 禁止变形处理
CSS object-fit 属性 object-fit: fill|contain|cover|scale-down|none|initial|inherit; 样式上 video{ height: ...