golang进行onvif请求,包含PTZ、preset等
Golang Onvif使用golang进行onvif请求,主要完成 PTZ, Media, Snap, preset操作。录像在目前项目用不上,暂时不做package mainimport ("fmt""github.com/yakovlevdmv/goonvif""github.com/yakovlevdmv/goonvif/PTZ""github.com/yakov...
·
Golang Onvif
使用golang进行onvif请求,主要完成 PTZ, Media, Snap, preset操作。
录像在目前项目用不上,暂时不做
package main
import (
"fmt"
"github.com/yakovlevdmv/goonvif"
"github.com/yakovlevdmv/goonvif/PTZ"
"github.com/yakovlevdmv/goonvif/xsd"
"github.com/yakovlevdmv/goonvif/xsd/onvif"
"io/ioutil"
"net/http"
)
func readResponse(resp *http.Response) string {
b, err := ioutil.ReadAll(resp.Body)
if err != nil {
panic(err)
}
return string(b)
}
func main() {
fmt.Println("Onvif test")
dev, err := goonvif.NewDevice("192.168.50.182:80")
if err != nil {
fmt.Println("init device error:", err)
return
}
dev.Authenticate("admin", "xxxxx")
var tmp string
//fmt.Println("call GetSystemDateAndTime")
//m_tm_req := Device.GetSystemDateAndTime{}
//m_tm_resp, err := dev.CallMethod(m_tm_req)
//if err != nil {
// fmt.Println("resp error!", err)
// return
//}
//tmp = readResponse(m_tm_resp)
//fmt.Println(tmp)
//fmt.Println("call GetProfiles")
//m_media_profiles_req := Media.GetProfiles{}
//m_media_profiles_resp, err := dev.CallMethod(m_media_profiles_req)
//if err != nil {
// fmt.Println("resp error!", err)
// return
//}
//tmp = readResponse(m_media_profiles_resp)
//fmt.Println(tmp)
//fmt.Println("call GetStreamUri")
//m_media_url_req := Media.GetStreamUri{
// ProfileToken: "Profile_101",
//}
//m_media_url_resp, err := dev.CallMethod(m_media_url_req)
//if err == nil {
// fmt.Println("resp:", readResponse(m_media_url_resp))
//}
//fmt.Println("call RelativeMove")
//m_ptz_rel_req := PTZ.RelativeMove{
// ProfileToken: "Profile_101",
// Translation: onvif.PTZVector{
// PanTilt: onvif.Vector2D{
// X: -1.0,
// Y: -1.0,
// Space: xsd.AnyURI("http://www.onvif.org/ver10/tptz/PanTiltSpaces/TranslationGenericSpace"),
// },
// Zoom: onvif.Vector1D{
// X: -1.0, // -1.0 -> 1.0
// Space: xsd.AnyURI("http://www.onvif.org/ver10/tptz/ZoomSpaces/TranslationGenericSpace"),
// },
// },
// Speed: onvif.PTZSpeed{
// PanTilt: onvif.Vector2D{
// X: 0.0,
// Y: 0.0,
// Space: xsd.AnyURI("http://www.onvif.org/ver10/tptz/PanTiltSpaces/GenericSpeedSpace"),
// },
// Zoom: onvif.Vector1D{
// X: 0.0,
// Space: xsd.AnyURI("http://www.onvif.org/ver10/tptz/ZoomSpaces/ZoomGenericSpeedSpace"),
// },
// },
//}
//m_ptz_rel_resp, err := dev.CallMethod(m_ptz_rel_req)
//if err != nil {
// fmt.Println("resp error!", err)
// return
//}
//tmp = readResponse(m_ptz_rel_resp)
//fmt.Println(tmp)
//fmt.Println("call GetStatus")
//m_ptz_stat_req := PTZ.GetStatus{
// ProfileToken: "Profile_101",
//}
//m_ptz_stat_resp, err := dev.CallMethod(m_ptz_stat_req)
//if err != nil {
// fmt.Println("resp error!", err)
// return
//}
//tmp = readResponse(m_ptz_stat_resp)
//fmt.Println(tmp) // x,y,zoom
//fmt.Println("call AbsoluteMove")
//m_ptz_abs_req := PTZ.AbsoluteMove{
// ProfileToken: "Profile_101",
// Position: onvif.PTZVector{
// PanTilt: onvif.Vector2D{
// X: -1.0,
// Y: -1.0,
// Space: xsd.AnyURI("http://www.onvif.org/ver10/tptz/PanTiltSpaces/PositionGenericSpace"),
// },
// Zoom: onvif.Vector1D{
// X: 0.0, // 0.0 -> 1.0
// Space: xsd.AnyURI("http://www.onvif.org/ver10/tptz/ZoomSpaces/PositionGenericSpace"),
// },
// },
// Speed: onvif.PTZSpeed{
// PanTilt: onvif.Vector2D{
// X: 0.0,
// Y: 0.0,
// Space: xsd.AnyURI("http://www.onvif.org/ver10/tptz/PanTiltSpaces/GenericSpeedSpace"),
// },
// Zoom: onvif.Vector1D{
// X: 0.0,
// Space: xsd.AnyURI("http://www.onvif.org/ver10/tptz/ZoomSpaces/ZoomGenericSpeedSpace"),
// },
// },
//}
//m_ptz_abs_resp, err := dev.CallMethod(m_ptz_abs_req)
//if err != nil {
// fmt.Println("resp error!", err)
// return
//}
//tmp = readResponse(m_ptz_abs_resp)
//fmt.Println(tmp)
//fmt.Println("call GetSnapshotUri")
//m_ptz_snap_req := Media.GetSnapshotUri{
// ProfileToken: "Profile_101",
//}
//m_ptz_snap_resp, err := dev.CallMethod(m_ptz_snap_req)
//if err != nil {
// fmt.Println("resp error!", err)
// return
//}
//tmp = readResponse(m_ptz_snap_resp)
//fmt.Println(tmp)
fmt.Println("call GotoPreset")
m_ptz_preset_req := PTZ.GotoPreset{
ProfileToken: "Profile_101",
PresetToken: "2",
Speed: onvif.PTZSpeed{
PanTilt: onvif.Vector2D{
X: 0.0,
Y: 0.0,
Space: xsd.AnyURI("http://www.onvif.org/ver10/tptz/PanTiltSpaces/GenericSpeedSpace"),
},
Zoom: onvif.Vector1D{
X: 0.0,
Space: xsd.AnyURI("http://www.onvif.org/ver10/tptz/ZoomSpaces/ZoomGenericSpeedSpace"),
},
},
}
m_ptz_preset_resp, err := dev.CallMethod(m_ptz_preset_req)
if err != nil {
fmt.Println("resp error!", err)
return
}
tmp = readResponse(m_ptz_preset_resp)
fmt.Println(tmp)
// 就差录视频,onvif不提供
fmt.Println("over")
}
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献4条内容
所有评论(0)