前几天跟大家聊了一些关于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. pyqt5无边框拖动

    from PyQt5.QtWidgets import * from PyQt5.QtCore import * from PyQt5.QtGui import * import sys class ...

  2. 虚拟机安装配置centos7

    安装 https://blog.csdn.net/babyxue/article/details/80970526 主机环境预设 更换国内yum源 epel源 https://www.cnblogs. ...

  3. P3703-[SDOI2017]树点涂色【LCT,线段树】

    正题 题目链接:https://www.luogu.com.cn/problem/P3703 题目大意 \(n\)个点的一棵树开始所有点有不同的颜色,\(m\)次操作 将根节点到\(x\)节点的路径上 ...

  4. 【vue】生成接口模拟数据

    目录 方案一:自定义模拟数据 Step1 创建json文件 Step2 在 vue.config.js 中配置 Step3 在组件中使用 (方式一) Step3 封装api (方式二) Step4 在 ...

  5. 前端VUE基于gitlab的CI_CD

    目录 CI 1.Gitlab的CI 1.1 GitLab-Runner 1.2 .gitlab-ci.yml 1.3 配置.gitlab-ci.yml 1.3.1 Pipeline概念 1.3.2 S ...

  6. 关于使用antd-vue的卡片无法设置avatar图标/头像问题的解决方案

    在使用antd-vue的卡片a-card时,遇到无法添加avatar图标/头像的问题,原因出在a-avatar,他不支持webpack图片打包. 上代码:       <a-card hover ...

  7. Linux 下 xargs 命令

    xargs 常常被大家忽略的一个命令,对它的一些用法很多人可能不熟悉,其实它是一个功能强大的命令,特别是在结合管道进行批量处理方面 语法 xargs 语法格式如下 xargs [OPTION]... ...

  8. IDEA Web渲染插件开发(一)— 使用JCEF

    目前网上已经有了很多关于IDEA(IntelliJ平台)的插件开发教程了,本人觉得简书上这位作者秋水畏寒的关于插件开发的文章很不错,在我进行插件开发的过程中指导了我很多.但是综合下来看,在IDEA上加 ...

  9. Python技法2:函数参数的进阶用法

    1.关键字参数(positional argument)和位置参数(keyword argument) Python函数的参数根据函数在调用时(注意,不是函数定义时)传参的形式分为关键字参数和位置参数 ...

  10. 一个关于MySQL指定编码实现的小坑

    写在前面 环境:MySQL5.7+,MySQL数据库字符编码实现为utf8,表也为utf8 场景:微信授权获取用户信息(包括昵称)并保存到数据库,有的用户成功了,少数用户却失败了 那么为什么会失败呢? ...