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")
}

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐