千家信息网

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

发表于:2025-11-09 作者:千家信息网编辑
千家信息网最后更新 2025年11月09日,这篇文章主要讲解了"Go语言开源库怎么实现Onvif协议客户端设备搜索",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Go语言开源库怎么实现Onvif协
千家信息网最后更新 2025年11月09日Go语言开源库怎么实现Onvif协议客户端设备搜索

这篇文章主要讲解了"Go语言开源库怎么实现Onvif协议客户端设备搜索",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Go语言开源库怎么实现Onvif协议客户端设备搜索"吧!

1、前言

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

2、设备搜索思路

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

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

3、搜索设备Go源码

package clientimport (        "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 int32const (        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协议客户端设备搜索"的内容了,经过本文的学习后,相信大家对Go语言开源库怎么实现Onvif协议客户端设备搜索这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

0