Onvif协议-设备搜索

导读

本人通过百度查找相关资料发现,网上实现Onvif的搜索多过于复杂,同时发现没有人使用“RemoteDiscoveryBindingProxy” 这个类实现相关的搜索功能(个人查找结论)。RomoteDiscoveryBindingProxy类是通过 gsoap生成c++的版本

补充知识

ws-discovery

实现步骤

1.通过gsoap生成“RomoteDiscoveryBindingProxy”

@ gsoap的详细使用过程(生成的是C++版本):

@ 生成“RomoteDiscoveryBindingProxy”生成命令(本人采用本地文件*.xml和*.wsdl文件内容完全一样):

wsdl2h -o Remote.h -n web -y -t "./typemap.dat" Onvif\wsdl\remotediscovery.xml 
soapcpp2 -i -I IMPORT -L -C -w -x -y Remote.h

@ 将生成的文件*.nsmap,*.h,*.cpp 和 stdsoap2.h,stdsoap2.cpp 一同copy到自己的工程中

@编写搜索功能:


 #include "soapRemoteDiscoveryBindingProxy.h"
 #include "onvif-gsoap/wsdd.nsmap"
 #include "string"
int main()
{
    char *was_To = "urn:schemas-xmlsoap-org:ws:2005:04:discovery";  
    char *was_Action = "http://schemas.xmlsoap.org/ws/2005/04/discovery/Probe";  
    //这个就是传递过去的组播的ip地址和对应的端口发送广播信息      
    const char *soap_endpoint = "soap.udp://239.255.255.250:3702"; 

    wsdd__HelloType helloType;
    wsdd__ResolveType resolveType;

    wsdd__ProbeType req; 
    wsdd__ProbeMatchesType resp;
    //UUID 好最后是变化的否则 onvif 组播服务可能只回复一次
    std::string guid_string = "uuid:68749E8A-2EDD-49C0-ABF8-45E0733911BF";

    //这样是默认一个网卡Ip发送组播
    RemoteDiscoveryBindingProxy remote(soap_endpoint);
    //等待数据返回超时时间
    remote.recv_timeout = 3;

    //初始化soap_header的相关内容。
    //第一种方法。
    remote.soap_header((char*)guid_string.c_str(),nullptr,nullptr,nullptr,nullptr,was_To,was_Action,nullptr);
    //第二种方法(这种方法是C语言的方法)
    /*
    SOAP_ENV__Header header;
    soap_default_SOAP_ENV__Header(&remote,&header);
    header.wsa__MessageID = (char *)guid_string.c_str();
    header.wsa__To = was_To;
    header.wsa__Action = was_Action;
    remote.header = &header;
    */
    //第三种
    /*
    remote.header->wsa__MessageID = (char *)guid_string.c_str();
    remote.header->wsa__To = was_To;
    remote.header->wsa__Action = was_Action;
    */

    soap_default_wsdd__ProbeType(&remote, &req);
    req.Types = "dn:NetworkVideoTransmitter";

    remote.Probe(req,resp);

}

### 回答1: onvif-java-1.0-snapshot.jar是一个使用Java编写的开放网络视频接口(ONVIF)库文件。ONVIF是一个全球开放的标准化协议,旨在实现不同厂商的IP视频设备之间的互操作性。 该jar文件是为开发人员提供的一个软件包,用于在Java应用程序中实现与ONVIF兼容设备的通信和交互。它包含了一系列的类和方法,以简化与ONVIF设备的连接、配置和控制。 使用onvif-java-1.0-snapshot.jar,开发人员可以轻松地实现对视频流的实时监控、设备配置、事件管理等功能。它提供了与ONVIF设备进行网络发现、设备管理、媒体传输、图像设置等操作的API。 此外,该库文件还提供了与ONVIF设备进行通信的示例代码,方便开发人员学习和参考。 总之,onvif-java-1.0-snapshot.jar是一个有助于在Java应用程序中实现与ONVIF设备交互的工具包,它简化了与设备的连接和控制,并提供了一系列的API和示例代码。这使得开发人员能够快速、方便地集成ONVIF兼容设备的功能到自己的应用程序中。 ### 回答2: onvif-java-1.0-snapshot.jar 是一个Java库文件,用于与ONVIF协议兼容的网络摄像机进行通信。ONVIF(开放网络视频接口)是一个全球性的开放性标准,旨在促进不同制造商的网络摄像机和其他物联网设备之间的互操作性。 该库文件提供了一系列的API和工具类,使开发人员可以轻松地与ONVIF兼容的设备进行通信。它包括了与设备进行连接、发送命令、获取设备信息、实时视频流等操作所需的功能。 通过使用onvif-java-1.0-snapshot.jar,开发人员可以轻松地实现以下操作: 1. 连接设备:通过提供设备的IP地址、用户名和密码,可以建立与ONVIF兼容设备的连接。 2. 发送命令:可以发送不同类型的命令,如搜索设备、获取设备信息、设置预置位、控制摄像头的移动等。 3. 获取设备信息:可以获取设备的基础信息,如型号、序列号、厂商等。 4. 实时视频流:可以获取实时视频流,以便实时查看网络摄像机的图像。 该库文件的使用需要有一定的Java编程知识,开发人员需要按照对应的文档和示例代码进行操作。使用该库可以简化与ONVIF兼容设备进行通信的过程,提高开发效率。 ### 回答3: onvif-java-1.0-snapshot.jar是一个Java开发工具包,用于与ONVIF兼容的设备进行交互和控制。ONVIF是一个全球领先的开放标准,旨在提供网络视频监控设备之间的互操作性。 这个jar文件包含了一系列的Java类和方法,让开发人员能够轻松地与ONVIF设备进行通信。它提供了一组API,用于发现设备、获取设备信息、控制设备的摄像头和图像设置以及进行视频流的传输和录制。 使用这个jar文件,开发人员可以编写Java程序来实现各种与ONVIF设备相关的功能。例如,他们可以通过使用jar中提供的方法来搜索局域网中的所有ONVIF设备,并获取每个设备的基本信息,如设备名称、型号、厂商等。他们还可以使用这个工具包来控制设备的摄像头,例如调整焦距、变焦、旋转角度等。另外,该jar文件还支持视频流的传输和录制,使开发人员可以捕捉和保存来自ONVIF摄像头的实时视频。 总之,onvif-java-1.0-snapshot.jar为开发人员提供了一种方便快捷的方式来集成和控制ONVIF兼容设备。无论是开发自己的监控应用程序,还是集成ONVIF设备到一个现有的平台,这个工具包都可以帮助开发人员快速实现他们的需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值