首页 > 编程语言 >.NET Core Onvif协议C#教程系列之XiaoFeng.Onvif组件库

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

时间:2022-10-20 18:23:53浏览次数:46  
标签:Core onvifUTCDateTime C# ip await user pass 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]);
//设置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点个个小星星,以此激励一下小编!

标签:Core,onvifUTCDateTime,C#,ip,await,user,pass,Onvif
From: https://www.cnblogs.com/zhaocici/p/16810806.html

相关文章

  • HttpContext学习
    https://www.cnblogs.com/wujy/p/3264475.html一:HttpContext理论知识:1:HttpContext类它对Request、Respose、Server等等都进行了封装,并保证在整个请求周期内都可以随时随......
  • java的decode_Java decode机试题
    java的decode_Javadecode机试题/****java编写encode方法和decode方法,机试题请你用java,c,c++*中任何一种语言实现两个函数encode()和decode(),分别实现对字符串的变......
  • nginx config
    #usernobody;worker_processes1;#error_loglogs/error.log;#error_loglogs/error.lognotice;#error_loglogs/error.loginfo;#pidlogs/nginx......
  • 一道笔试题:给定编码规则,实现decode()方法
    一道笔试题:给定编码规则,实现decode()方法publicclassCodeDecode{   /*变换函数encode()顺序考察已知字符串的字符,按以下规则逐组生成新字符串:     (1......
  • spline-spark-agent收集Iceberg(Spark程序)血缘
    一、背景使用Spark操作Iceberg(HiveCataLog的方式),使用Spline-Agent收集Spark作业的血缘。二、编译1、下载源码包:https://github.com/AbsaOSS/spline-spark-agent.git......
  • 上位机通过模块链接plc
    报文格式读报文:0103 E00D 0001ABCD01是设备地址默认都是01;03是功能码,参考modbus功能码;E00D是操作的PLC地址,是由10进制的PLC地址转换为16进制得到,此处对应的......
  • JavaScript使用WebUploader做大文件的分块和断点续传
    ​ 之前仿造uploadify写了一个HTML5版的文件上传插件,没看过的朋友可以点此先看一下~得到了不少朋友的好评,我自己也用在了项目中,不论是用户头像上传,还是各种媒体文件的上......
  • EasyExcel导出多个文件并直接打包成zip下载
    EasyExcel导出多个文件并直接打包成zip下载StringzipName="xxx.zip";try{response.addHeader("Content-Disposition","attachment;filename="+URLEncoder.......
  • 项目开发神器VsCode配置指南!(含C++、Python、Java环境配置)
    作者:吴忠强,东北大学,Datawhale成员本篇文章虽然是VsCode挂名,但其实介绍了两款神器:Vscode和Vim,这两个结合起来,开发效率蹭蹭蹭!!!之前接触过VsCode但很少用。总感觉写Python......
  • 作者解读ICML接收论文:如何使用不止一个数据集训练神经网络模型?
    作者:欧明锋,浙江大学导读:在实际的深度学习项目中,难免遇到多个相似数据集,这时一次仅用单个数据集训练模型,难免造成局限。是否存在利用多个数据集训练的可能性?本文带来解读。01......