Go語言開源庫實現(xiàn)Onvif協(xié)議客戶端設(shè)備搜索
1、前言
之前我們已經(jīng)簡單介紹過use-go的開源方案,其也是通過其它的開源方案進行的封裝,提供了初步的接口,我們這里利用對onvif協(xié)議的學(xué)習(xí),然后結(jié)合該開源庫進行設(shè)備發(fā)現(xiàn)、設(shè)備IP設(shè)置、Profiles token獲取、流媒體Uri地址獲取、PTZ云臺控制、預(yù)置點設(shè)置等功能進行進一步的實現(xiàn)和封裝,以此加深對Onvif協(xié)議的了解和加深Go語言的使用。
2、設(shè)備搜索思路
這個不清楚原理的再去看一下我們Onvif學(xué)習(xí)時的設(shè)備搜索那里的內(nèi)容,主要是通過WS-Discovery實現(xiàn)設(shè)備的搜索,你可以簡單理解為局域網(wǎng)廣播和組播說:我在找符合Onvif協(xié)議的設(shè)置,然后設(shè)備回復(fù)說:我是,并且會發(fā)送相關(guān)的設(shè)備ip等信息給到客戶端。
這里我們使用的Go開源方案提供了對應(yīng)接口用于搜索設(shè)備,我們直接使用就好了。
3、搜索設(shè)備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: 搜索設(shè)備,返回搜索到的設(shè)備列表
* @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、問題
一個主要問題就是當(dāng)我們搜索到多個符合Onvif協(xié)議的設(shè)備后如何進行區(qū)分,目前我們先采用暴力輪詢的方式對每個設(shè)備進行設(shè)備信息獲取,然后解析返回的XML信息結(jié)合我們傳遞的搜索條件(比如設(shè)備類型、設(shè)備mac地址等)進行進一步的區(qū)分。
以上就是Go語言O(shè)nvif協(xié)議客戶端設(shè)備搜索示例實現(xiàn)的詳細內(nèi)容,更多關(guān)于Onvif客戶端設(shè)備搜索的資料請關(guān)注腳本之家其它相關(guān)文章!

