.NET Core Onvif协议C#教程系列之XiaoFeng.Onvif组件库

物联网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]);//设置homeawait 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);//回归homeawait PTZService.GotoHomePosition(ip, user, pass, onvifUTCDateTime, tokens[0], 0.3, 1, 1);
以上基本功能列表,需要数据组装,取到各个接口数据,进行组装拼接就可以了。写代码很简单,主要是要读懂协议,理解协议,玩转协议,这是研究物联网的最困难的地方。开源不易,路过的小伙伴可以给小编在github点个个小星星,以此激励一下小编!