Go語言開源庫實現(xiàn)Onvif協(xié)議客戶端設備搜索
1、前言
之前我們已經(jīng)簡單介紹過use-go的開源方案,其也是通過其它的開源方案進行的封裝,提供了初步的接口,我們這里利用對onvif協(xié)議的學習,然后結(jié)合該開源庫進行設備發(fā)現(xiàn)、設備IP設置、Profiles token獲取、流媒體Uri地址獲取、PTZ云臺控制、預置點設置等功能進行進一步的實現(xiàn)和封裝,以此加深對Onvif協(xié)議的了解和加深Go語言的使用。
2、設備搜索思路
這個不清楚原理的再去看一下我們Onvif學習時的設備搜索那里的內(nèi)容,主要是通過WS-Discovery實現(xiàn)設備的搜索,你可以簡單理解為局域網(wǎng)廣播和組播說:我在找符合Onvif協(xié)議的設置,然后設備回復說:我是,并且會發(fā)送相關(guān)的設備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 {
//狀態(tài)碼
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是我們定義的調(diào)用者,是一個包含我們需要傳遞的各類信息的結(jié)構(gòu)體,模擬面向?qū)ο笏枷雱?chuàng)建的Onvif客戶端,即創(chuàng)建一個Onvif客戶端,客戶端來處理外部調(diào)用參數(shù)和內(nèi)部處理庫的數(shù)據(jù)交互,簡化對外展現(xiàn)的接口參數(shù)。
4、問題
一個主要問題就是當我們搜索到多個符合Onvif協(xié)議的設備后如何進行區(qū)分,目前我們先采用暴力輪詢的方式對每個設備進行設備信息獲取,然后解析返回的XML信息結(jié)合我們傳遞的搜索條件(比如設備類型、設備mac地址等)進行進一步的區(qū)分。
以上就是Go語言Onvif協(xié)議客戶端設備搜索示例實現(xiàn)的詳細內(nèi)容,更多關(guān)于Onvif客戶端設備搜索的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
GoLang并發(fā)機制探究goroutine原理詳細講解
goroutine是Go語言提供的語言級別的輕量級線程,在我們需要使用并發(fā)時,我們只需要通過 go 關(guān)鍵字來開啟 goroutine 即可。這篇文章主要介紹了GoLang并發(fā)機制goroutine原理,感興趣的可以了解一下2022-12-12
golang實現(xiàn)單點登錄系統(tǒng)(go-sso)
這篇文章主要介紹了golang實現(xiàn)單點登錄系統(tǒng)(go-sso),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-06-06
go本地環(huán)境配置及vscode go插件安裝的詳細教程
這篇文章主要介紹了go本地環(huán)境配置及vscode go插件安裝的詳細教程,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-05-05

