? ? ? ?物聯網IOT大背景下音視頻領域的Onvif 協議在2008年成為全球性的開放接口標準。于是一批開發者涌入該技術領域使用各種編程語言對其改造升級封裝。
? ? ? ?因為是國際標準,所以規范內容比較多,物聯網領域涉及又廣,所以研究協議是一個很耗時間的一項工作,讀懂協議,代碼操作就變得相對簡單。
? ? ? ? 本人有幸涉及物聯網領域,剛好是研究Onvif協議,又剛好本人是擅長c#編程的,于是就搜集了一些c#對Onvif封裝的區域性調查,發現幾乎都是使用微軟的wcf調用服務引用,動態生成的Onvif類庫,雖然可用,但是在數據流轉上,就變得相對笨拙,接口超時,數據出錯就很難處理。就是鑒于以上情況,本人決定使用原生的XML語言,對Onvif進行精簡封裝。相關代碼也都進行了開源。
地址:https://github.com/zhuovi/XiaoFeng.Onvif
下面我就簡單介紹一下我做的Onvif 開源項目吧
? ? ? ?XiaoFeng.Onvif 基于.NET平臺使用C#封裝Onvif常用接口、設備、媒體、云臺等功能, 拒絕WCF服務引用動態代理生成wsdl類文件 , 使用原生XML擴展標記語言封裝參數,所有的數據流向都可控。
? ? ? ?剛開源幾天,該有的功能都有了,可能不夠完善,不夠好,希望同道朋友一起來完善.NET社區的音視頻領域的技術。
具體使用方法很簡單。
安裝nuget包:XiaoFeng.Onvif
using XiaoFeng.Onvif;var ip = "192.168.12.2";
var user = "onvif";
var pass = "123456";//設備掃描
var resu = await DeviceService.DiscoveryOnvif(3);
//設備時間
var onvifUTCDateTime = await DeviceService.GetSystemDateAndTime(ip);
//設備信息
var info = await DeviceService.GetDeviceInformation(ip, user, pass, onvifUTCDateTime);
//設備能力
var abilities= await DeviceService.GetCapabilities(ip);
//token信息
var tokens = await MediaService.GetProfiles(ip, user, pass, onvifUTCDateTime);
//流地址
var streamUri = await MediaService.GetStreamUri(ip, user, pass, onvifUTCDateTime, tokens[0]);
//快照地址
var img = await MediaService.GetSnapshotUri(ip, user, pass, onvifUTCDateTime, tokens[0]);
//云臺狀態
await PTZService.GetStatus(ip, user, pass, onvifUTCDateTime, tokens[0]);
//設置home
await PTZService.SetHomePosition(ip, user, pass, onvifUTCDateTime, tokens[0]);
//絕對移動
await PTZService.AbsoluteMove(ip, user, pass, onvifUTCDateTime, tokens[0], 0, 0);
//繼續移動
await PTZService.ContinuousMove(ip, user, pass, onvifUTCDateTime, tokens[0], 0.6, 0.2, 1);
//相對移動
await PTZService.RelativeMove(ip, user, pass, onvifUTCDateTime, tokens[0], 0.8, 0.5, 0.5);
//回歸home
await PTZService.GotoHomePosition(ip, user, pass, onvifUTCDateTime, tokens[0], 0.3, 1, 1);
以上基本功能列表,需要數據組裝,取到各個接口數據,進行組裝拼接就可以了。寫代碼很簡單,主要是要讀懂協議,理解協議,玩轉協議,這是研究物聯網的最困難的地方。開源不易,路過的小伙伴可以給小編在github點個個小星星,以此激勵一下小編!