Go语言开源库实现Onvif协议客户端设备搜索

目录
  • 1、前言
  • 2、设备搜索思路
  • 3、搜索设备Go源码
  • 4、问题

1、前言

之前我们已经简单介绍过use-go的开源方案,其也是通过其它的开源方案进行的封装,提供了初步的接口,我们这里利用对onvif协议的学习,然后结合该开源库进行设备发现、设备IP设置、Profiles token获取、流媒体Uri地址获取、PTZ云台控制、预置点设置等功能进行进一步的实现和封装,以此加深对Onvif协议的了解和加深Go语言的使用。

2、设备搜索思路

这个不清楚原理的再去看一下我们Onvif学习时的设备搜索那里的内容,主要是通过WS-Discovery实现设备的搜索,你可以简单理解为局域网广播和组播说:我在找符合Onvif协议的设置,然后设备回复说:我是,并且会发送相关的设备ip等信息给到客户端。

这里我们使用的Go开源方案提供了对应接口用于搜索设备,我们直接使用就好了。

3、搜索设备Go源码

package client
import (
	"fmt"
	"github.com/beevik/etree"
	goonvif "github.com/use-go/onvif"
	"github.com/use-go/onvif/device"
	"github.com/use-go/onvif/gosoap"
	"github.com/use-go/onvif/media"
	"github.com/use-go/onvif/ptz"
	"github.com/use-go/onvif/xsd"
	"github.com/use-go/onvif/xsd/onvif"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)
type Code int32
const (
	OK				Code = 0
	SearchErr		Code = -1
	ConnectErr 		Code = -2
	CreateUserErr	Code = -20
	GetProfilesErr	Code = -30
	GetStreamUriErr Code = -40
	PTZErr			Code = -50
	SetPresetErr	Code = -70
	GotoPresetErr	Code = -71
	RemovePresetErr	Code = -72
	GetSnapShotUriErr	Code = -100
)
type returnInfo struct {
	//状态码
	Code Code
	//错误或者返回信息
	ErrInfo string
}
/**
 * @Description: 搜索设备,返回搜索到的设备列表
 * @Author:ZY
 * @time: 2021-03-25 14:23:04
 * @receiver client
 * @return returnInfo
 */
func (client *GoOnvifClient) SearchDevice() returnInfo {
	devices := goonvif.GetAvailableDevicesAtSpecificEthernetInterface("eth0")
	if devices == nil {
		return returnInfo{SearchErr, "search devices failed."}
	}
	client.Devices = devices
	return returnInfo{OK, "search device success"}
}

client是我们定义的调用者,是一个包含我们需要传递的各类信息的结构体,模拟面向对象思想创建的Onvif客户端,即创建一个Onvif客户端,客户端来处理外部调用参数和内部处理库的数据交互,简化对外展现的接口参数。

4、问题

一个主要问题就是当我们搜索到多个符合Onvif协议的设备后如何进行区分,目前我们先采用暴力轮询的方式对每个设备进行设备信息获取,然后解析返回的XML信息结合我们传递的搜索条件(比如设备类型、设备mac地址等)进行进一步的区分。

以上就是Go语言Onvif协议客户端设备搜索示例实现的详细内容,更多关于Onvif客户端设备搜索的资料请关注我们其它相关文章!

(0)

相关推荐

  • go语言实现http服务端与客户端的例子

    go语言的net/http包的使用非常的简单优雅 (1)服务端 package main import ( "flag" "fmt" "net/http" ) func main() { host := flag.String("host", "127.0.0.1", "listen host") port := flag.String("port", "8

  • Go语言的http/2服务器功能及客户端使用

    前言 大家都知道,Go的标准库HTTP服务器默认支持HTTP/2.那么,在这篇文章中,我们将首先展示Go的http/2服务器功能,并解释如何将它们作为客户端使用. 在这篇文章中,我们将首先展示Go的http/2服务器功能,并解释如何将它们作为客户端使用.Go的标准库HTTP服务器默认支持HTTP/2. 下面话不多说了,来一起看看详细的介绍吧 HTTP/2 服务器 首先,让我们在Go中创建一个http/2服务器!根据http/2文档,所有东西都是为我们自动配置的,我们甚至不需要导入Go的标准库ht

  • Go语言服务器开发之简易TCP客户端与服务端实现方法

    本文实例讲述了Go语言服务器开发之简易TCP客户端与服务端实现方法.分享给大家供大家参考.具体实现方法如下: Go语言具备强大的服务器开发支持,这里示范了最基础的服务器开发:通过TCP协议实现客户端与服务器的通讯. 一 服务端,为每个客户端新开一个goroutine 复制代码 代码如下: func ServerBase() {      fmt.Println("Starting the server...")      //create listener      listener,

  • Go语言开源库实现Onvif协议客户端设备搜索

    目录 1.前言 2.设备搜索思路 3.搜索设备Go源码 4.问题 1.前言 之前我们已经简单介绍过use-go的开源方案,其也是通过其它的开源方案进行的封装,提供了初步的接口,我们这里利用对onvif协议的学习,然后结合该开源库进行设备发现.设备IP设置.Profiles token获取.流媒体Uri地址获取.PTZ云台控制.预置点设置等功能进行进一步的实现和封装,以此加深对Onvif协议的了解和加深Go语言的使用. 2.设备搜索思路 这个不清楚原理的再去看一下我们Onvif学习时的设备搜索那里

  • Java常用开源库汇总

    Java的经久不衰,很大程度上得益于Java的生态好.在日常开发中,我们也会经常使用到各种开源库和工具类,为了避免重复造轮子,本文将贴出工作及学习中会用到的部分开源库和工具类.Java的生态实在太大,这里只能列举一部分.如果你对此感兴趣,不妨去读读他们的源码. HTML解析器jsoup 1.1 介绍 jsoup(GitHub地址.中文文档)是一款Java 的HTML解析器,可直接解析某个URL地址.HTML文本内容.它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方

  • C++调用libcurl开源库实现邮件的发送功能流程详解

    目录 1.为啥要选择libcurl库去实现邮件的发送 2.调用libcurl库的API接口实现邮件发送 3.构造待发送的邮件内容 4.开通163发送邮件账号的SMTP服务 5.排查接收的邮件内容为空的问题 libcurl中封装了支持这些协议的网络通信模块,支持跨平台,支持Windows,Unix,Linux等多个操作系统.libcurl提供了一套统一样式的API接口,我们不用关注各种协议下网络通信的实现细节,只需要调用这些API就能轻松地实现基于这些协议的数据通信.本文将简单地讲述一下使用lib

  • Go语言Zap库Logger的定制化和封装详解

    目录 前言 Go 语言原生的Logger Go 语言原生Logger的缺点 Zap 日志库 Zap 的使用方法 安装zap 设置 Logger 定制 Zap 的 Logger 日志切割 封装 Logger 总结 前言 日志无论对于程序还是程序员都非常重要,有多重要呢,想要长期在公司健健康康的干下去就得学会阶段性划水,阶段性划水的一大关键的就是干活快过预期但是装作...不对,这个开头不对劲,下面重来. 日志无论对于程序还是程序员都非常重要,程序员解决问题的快慢除了经验外,就是看日志能不能有效地记录

  • C#实现WebSocket协议客户端和服务器websocket sharp组件实例解析

    看到这篇文章的题目,估计很多人都会问,这个组件是不是有些显的无聊了,说到web通信,很多人都会想到ASP.NET SignalR,或者Nodejs等等,实现web的网络实时通讯.有关于web实时通信的相关概念问题,在这里就不再做具体的介绍了,有兴趣的可以自行百度. 下面我们介绍一款WebSocket组件websocket-sharp的相关内容. 一.websocket-sharp组件概述 websocket-sharp是一个C#实现websocket协议客户端和服务端,websocket-sha

  • 推荐技术人员一款Python开源库(造数据神器)

    1. 背景 在软件需求.开发.测试过程中,有时候需要使用一些测试数据,针对这种情况,我们一般要么使用已有的系统数据,要么需要手动制造一些数据.由于现在的业务系统数据多种多样,千变万化.在手动制造数据的过程中,可能需要花费大量精力和工作量,此项工作既繁复又容易出错,比如要构造一批用户三要素(姓名.手机号.身份证).构造一批银行卡数据.或构造一批地址通讯录等. 这时候,人们常常为了偷懒快捷,测试数据大多数可能是类似这样子的: 测试, 1300000 000123456 张三, 1310000 000

  • 基于C语言的库封装发布技术详解

    目录 1. C动态链接库是一种即成标准 2. 用C++制作C的库 2.1 使用void * 作为句柄 2.2 导出这些方法 3. 使用库 4. 经典的范例:libuhd 总结 每年实验课,总有同学问我,如何生成DLL.如何导出类,如何不花很多时间精力,就设计出一个给别人用的爽的功能库呢?结合这些年的实践,我们今天就来聊一聊动态链接库的封装发布.您也可以直接跳到文章最后,去github查看C++/C混合库的经典案例--Ettus uhd 要让自己的库好用,又通用,该怎么办?重要的事情说前面: 不要

  • 解决Java 结构化数据处理开源库 SPL的问题

    目录 前言介绍: 1. 集合运算能力 2.Lambda语法 3. 在Lambda语法中直接引用字段 4. 动态数据结构 5. 解释型语言 前言介绍: 现代Java应用架构越来越强调数据存储和处理分离,以获得更好的可维护性.可扩展性以及可移植性,比如火热的微服务就是一种典型.这种架构通常要求业务逻辑要在Java程序中实现,而不是像传统应用架构中放在数据库中. 应用中的业务逻辑大都会涉及结构化数据处理.数据库(SQL)中对这类任务有较丰富的支持,可以相对简易地实现业务逻辑.但Java却一直缺乏这类基

  • Go语言测试库testify使用学习

    目录 简介 准备工作 assert Contains DirExists ElementsMatch Empty EqualError EqualValues Error ErrorAs ErrorIs 逆断言 Assertions 对象 require mock suite 测试 HTTP 服务器 总结 简介 testify可以说是最流行的(从 GitHub star 数来看)Go 语言测试库了.testify提供了很多方便的函数帮助我们做assert和错误信息输出.使用标准库testing,

随机推荐