EasyNVR RTSP摄像机转HLS直播服务器中使用Onvif协议控制预置位-程序员宅基地

技术标签: 移动开发  

EasyNVR支持预置位控制,包括转到指定预置位,设置指定预置位,删除指定预置位

预置位在安防领域有较为普遍的应用,可以进行很多既定位置的跳转,很方便

之前我们说过如何用Onvif协议进行设备的发现,探测,以及云台控制等,今天我们来说一下如何使用Onvif进行预置位的操作

流程

获取设备能力Capabilities

获取设备的能力,并且可以获取到Media和PTZ的URI,使用这两个URL可以进行流和预置位操作,这里如果PTZ URI获取不到意味着这个设备无法支持预置位控制

_tds__GetCapabilities* capabilities = soap_new__tds__GetCapabilities(proxyDevice, -1);
tt__CapabilityCategory* category = new tt__CapabilityCategory;
capabilities->Category = category;
*(capabilities->Category) = tt__CapabilityCategory__All;
_tds__GetCapabilitiesResponse* response = soap_new__tds__GetCapabilitiesResponse(proxyDevice, -1);
if (SOAP_OK == proxyDevice->GetCapabilities(capabilities, response))
{
    if (response->Capabilities)
    {
        //Media URI: response->Capabilities->Media->XAddr;
        //PTZ URI: response->Capabilities->PTZ->XAddr;
    }
}

获取Media Profile

_trt__GetProfiles* getProfiles = soap_new__trt__GetProfiles(proxyMedia, -1);
_trt__GetProfilesResponse* response = soap_new__trt__GetProfilesResponse(proxyMedia, -1);
if (SOAP_OK == proxyMedia->GetProfiles(getProfiles, response))
{
    int size = response->__sizeProfiles;
    for (int i = 0; i < size; ++i)
    {
        if (response->Profiles[i])
        {
            //Media Profile Token: response->Profiles[i]->token;
            //一般设备包含多个Profile Token,包含主码流、子码流、第三码流
        }
    }
}

预置位控制

bool result = false;

   PTZBindingProxy* ptzProxy = new PTZBindingProxy;
   ptzProxy->soap_endpoint = ptzUrl.c_str();

   if (!security(ptzProxy, username, password))
   {
       delete ptzProxy;
       return result;
   }

   char presetToken[8];
   itoa(index, presetToken, 10);

   if (command == PRESET_GOTO)
   {
       _tptz__GotoPreset* preset = soap_new__tptz__GotoPreset(ptzProxy, -1);
       _tptz__GotoPresetResponse* response = soap_new__tptz__GotoPresetResponse(ptzProxy, -1);
       preset->ProfileToken = const_cast<char*>(profile.c_str());
       preset->PresetToken = presetToken;

       if (SOAP_OK == ptzProxy->GotoPreset(preset, response))
           result = true;

       if (response)
           soap_delete__tptz__GotoPresetResponse(ptzProxy, response);

       if (preset)
           soap_delete__tptz__GotoPreset(ptzProxy, preset);
   }
   else if (command == PRESET_SET)
   {
       _tptz__SetPreset* preset = soap_new__tptz__SetPreset(ptzProxy, -1);
       _tptz__SetPresetResponse* response = soap_new__tptz__SetPresetResponse(ptzProxy, -1);
       preset->ProfileToken = const_cast<char*>(profile.c_str());
       preset->PresetToken = presetToken;

       if (SOAP_OK == ptzProxy->SetPreset(preset, response))
           result = true;

       if (response)
           soap_delete__tptz__SetPresetResponse(ptzProxy, response);

       if (preset)
           soap_delete__tptz__SetPreset(ptzProxy, preset);
   }
   else if (command == PRESET_REMOVE)
   {
       _tptz__RemovePreset* preset = soap_new__tptz__RemovePreset(ptzProxy, -1);
       _tptz__RemovePresetResponse* response = soap_new__tptz__RemovePresetResponse(ptzProxy, -1);
       preset->ProfileToken = const_cast<char*>(profile.c_str());
       preset->PresetToken = presetToken;

       if (SOAP_OK == ptzProxy->RemovePreset(preset, response))
           result = true;

       if (response)
           soap_delete__tptz__RemovePresetResponse(ptzProxy, response);

       if (preset)
           soap_delete__tptz__RemovePreset(ptzProxy, preset);
   }

   delete ptzProxy;

   return result;

关于EasyNVR

EasyNVR能够通过简单的网络摄像机通道配置,将传统监控行业里面的高清网络摄像机IP Camera、NVR等具有RTSP协议输出的设备接入到EasyNVR,EasyNVR能够将这些视频源的音视频数据进行拉取,转换为RTMP/HLS,进行全平台终端H5直播(Web、Android、iOS),并且EasyNVR能够将视频源的直播数据对接到第三方CDN网络,实现互联网级别的直播分发;

详细说明:http://www.easydarwin.org/easynvr/

点击链接加入群【EasyNVR解决方案】:383501345

获取更多信息

邮件:[email protected]

WEB:www.EasyDarwin.org

Copyright EasyDarwin.org 2012-2017

EasyDarwin

转载于:https://www.cnblogs.com/babosa/p/7702421.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_30483495/article/details/97686708

智能推荐

浅谈web应用的负载均衡、集群、高可用(HA)解决方案-程序员宅基地

文章浏览阅读759次。 声明:以下仅为个人的一些总结和随写,如有不对之处,还请看到的网友指出,以免误导。 (详细的配置方案请google,这里只说解决方案。) 1、熟悉几个组件1.1、apache —— 它是Apache软件基金会的一个开放源代码的跨平台的网页服务器,属于老牌的web服务器了,支持基于Ip或者域名的虚拟主机,支持代理服务器,支持安全Socket层(SSL)等等,目..._ha:/鉁攃nlnxx5m

debian 10 安装_如何在Debian 10上安装和使用Composer-程序员宅基地

文章浏览阅读997次。debian10 安装 介绍 (Introduction)Composer is a popular dependency management tool for PHP, created mainly to facilitate installation and updates for project dependencies. It will check which other packag..._debian -bash: curl: command not found

在jsp里使用在线编辑器ckeditor-程序员宅基地

文章浏览阅读902次。jsp中标签内引入js文件在body里面使用页面即可显示在线编辑器了在计算中使用CKEDITOR.instances.replyBody.getData()即可取到在线编辑器中的内容下面附上ckeditor编辑器的使用api连接ckeditor api

librdkafka问题总结_rdkafka::topic::partition_ua-程序员宅基地

文章浏览阅读1.5w次。librdkafka问题总结librdkafka是kafka官方推荐的c client端开源库。本文基于librdkafka_0.8, 对该库作简要介绍,同时对使用过程中遇到的一些问题做个总结一、模块介绍librdkafka主要分为config,topic,produce,consume几个模块config依据kafka相应的config文件字段定义 先通过默认配置文件创建confg对象,再通过c_rdkafka::topic::partition_ua

寒假水108——搜索【广搜】_解救小哈-程序员宅基地

文章浏览阅读148次。 Farmer John has been informed of the location of a fugitive cow and wants to catch her immediately. He starts at a point N (0 ≤ N ≤ 100,000) on a number line and the cow is at a point K (0 ≤ K ≤ 10..._解救小哈

js递归循环数组-程序员宅基地

文章浏览阅读1.8k次。当我们从后台获取回来的数据是一个数组时,而且每个元素是一个对象,对象的层级不确定,需要使用递归循环遍历所有的子元素var tdata=[  {    "code": "has Value Domain Member",    "value": "未婚",    "properties": [      {        "code": "MDM VD Member PKID",   ..._js递归循环数组

随便推点

Zhong__Linux系统安装MongoDB数据库_linux系统(rpm包)如何安装mongodb-程序员宅基地

文章浏览阅读139次。QQ交流群:121160124关注微信公众号:邂逅最美的时光在Linux(CentOS7)上安装MongoDB的社区版安装MongoDB可以rpm方式和tar包方式安装一、使用.rpm包(推荐)1.配置包管理系统(yum)。创建一个/etc/yum.repos.d/mongodb-org-4.0.repo文件,以便您可以使用yum以下命令直接安装MongoDB:vi..._linux系统(rpm包)如何安装mongodb

Boot Loader_bootload能输出打印吗?-程序员宅基地

文章浏览阅读664次。Boot Loader 是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。通常,Boot Loader 是严重地依赖于硬件而实现的,特别是在嵌入式世界。因此,在嵌入式世界里建立一个通用的 Boot Loader 几乎是不可能的。尽管如此,我们仍然可以对 B_bootload能输出打印吗?

centos6.4安装mysql5.5_server version: 5.5.58-程序员宅基地

文章浏览阅读1.3k次。LVM管理磁盘创建pv[root@owenz ~]# pvcreate /dev/sdb Physical volume "/dev/sdb" successfully created[root@owenz ~]# pvcreate /dev/sdc Physical volume "/dev/sdc" successfully created_server version: 5.5.58

Android开发笔记(七十三)代码混淆与反破解_android packageinfo混淆-程序员宅基地

文章浏览阅读4.7k次。代码混淆ProGuard是ADT自带的apk混淆器,它的用途有:1、压缩apk包的大小,能删除无用的代码,并简化部分类名和方法名。2、加大破解源码的难度,因为部分类名和方法名被重命名,使得程序逻辑变得难以理解。代码混淆的规则在proguard-project.txt中编写,然后在project.properties补充规则文件的路径,如下所示:proguard.conf_android packageinfo混淆

父子组件通信-程序员宅基地

文章浏览阅读1k次。父子组件通信根组件data传子组件根组件data传子组件在子组件使用props属性,然后在使用组件标签时绑定props里的属性到根组件的data数据,这样就可以在模板里使用props的属性当作根组件的data数据使用了<head> <meta charset="utf-8"> <title></title> <script src="https://cdn.staticfile.org/vue/2.4.2/vue.min.js"><_父子组件通信

LED驱动程序设计_keyled驱动程序设计-程序员宅基地

文章浏览阅读1.3k次。S3C2440 GPIO通用输入输出接口的简称,S2440一共有130个GPIO口,分为A~J共9组:GPA,GPB,GPC……GPJ;通过设置相应的寄存器,可以选择某个GPIO口是用于输入,输出还是特定其他特殊功能。例如可以设置GPH6口用于输入输出,或者是串口;每组GPIO(GPA-GPJ),都可以通过3个寄存器来控制与访问,这三个寄存器分别是GPxCON:GPIO配置寄存器----..._keyled驱动程序设计