.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]);
//设置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点个个小星星,以此激励一下小编!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/281796.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php异常处理的深入

引出 如果你调一个类,调用时数据验证时报了个错,你会以什么方式返回 数组,布尔值? 数组这个可以带错误原因回来,那布尔值呢? 返回了个 false, 报错时把错误放在类变量里?还是专门用一个获取错误…

C# 跨平台的支付类库ICanPay

随着微软的开源,越来越多的项目支持跨平台,但是各种支付平台提供的类库,又老又不支持跨平台,吐槽下,尤其是微信,还有好多坑,于是ICanPay诞生了,今天就来讲ICanPay是什么,…

.NET CORE 下收发邮件之 MAILKIT

背景利用代码发送邮件在工作中还是比较常见的,相信大家都用过SmtpClient来处理发送邮件的操作,不过这个类以及被标记已过时,所以介绍一个微软推荐的库MailKit来处理。MailKit开源地址:https://github.com/jstedfast/MailKit需要邮…

【20181026T2】**图【最小瓶颈路+非旋Treap+启发式合并】

题面 【错解】 最大最小?最小生成树嘛 蛤?还要求和? 点分治? 不可做啊 写了个MST暴力LCA,30pts,140多行 事后发现30分是给dijkstra的 woc 【正解】 树上计数问题:①并查集②启发式合并③点分治 …

java实现关键词云_Java synchronized 关键词详细说明

Java synchronized 关键词详细说明外置专业技能点系统进程和进程的定义进程建立方法进程的情况情况变换线程安全的定义synchronized 关键词的几类使用方法装饰非静态数据组员方式synchronized public void sync(){}装饰静态数据组员方式synchronized public static void sync()…

损失函数(Loss function) 和 代价函数(Cost function)

1损失函数和代价函数的区别: 损失函数(Loss function):指单个训练样本进行预测的结果与实际结果的误差。 代价函数(Cost function):整个训练集,所有样本误差总和(所有损失函数总和)的平均值。(这一步体现在propagate()…

Hadoop/HDFS命令

Hadoop中文手册:http://hadoop.apache.org/docs/r1.0.4/cn/commands_manual.html 英文手册:http://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/CommandsManual.html Hadoop fs命令 hadoop fs: 该命令可以用于其他文件系统&#x…

《Node.js 入门系列》—— 一些简单的排错方法(一)

目录 TypeError: undefined is not a functionTypeError: Cannot read property xxx of undefined 或者 TypeError: Cannot read property xxx of null检查变量是未赋值检查函数是否有返回值检查变量是否引用了某个对象不存在的属性检查调用函数时是否未该传递参数俗话说“常在…

内置IOC容器ServiceCollection

.NetCore内置IOC容器ServiceCollection一、IOC介绍IOC:全名(Inversion of Control)-控制反转IOC意味着我们将对象的创建控制权交给了外部容器,我们不管它是如何创建的,我们只需要知道,当我们想要某个实例时,我们可以直…

java中 有没有方法将浏览器标签栏去掉_用JS去掉IE窗口的标题栏,工具栏,地址栏...

前言:经常上网的朋友可能会到过这样一些网站,一进入首页立刻会弹出一个窗口,或者按一个连接或按钮弹出,通常在这个窗口里会显示一些注意事项、版权信息 、警告、欢迎光顾之类的话或者作者想要特别提示的信息。其实制作这样的页面效果非常的容…

React+Redux仿Web追书神器

引言 由于 10 月份做的 React Native 项目没有使用到 Redux 等库,写了一段时间想深入学习 React,有个想法想做个 demo 练手下,那时候其实还没想好要做哪一个类型的,也看了些动漫的,小说阅读,聚合资源的开源…

【算法】LeetCode算法题-Maximum Subarray

这是悦乐书的第154次更新,第156篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第13题(顺位题号是53)。给定一个整数数组nums,找出一个最大和,此和是由数组中索引连续的元素组成,至少包含一个…

windows配置solr5.5.2(不通过tomcat,使用内置jetty)

一、windows下配置solr5.5.2(不通过tomcat,使用内置jetty) 第一步:安装Jdk1.7 Solr5.5好像只支持Jdk1.7及以上的版本,没亲测,solr6.0是只支持jdk1.8及以上的,下图为启动solr时的截图: 如何在windows环境下配置jdk及验证…

java起源英文_Abbreviation 英文词组缩写(来源:南阳理工大学ACM)java

As we know, we often use a short sequence of characters in place of some words with a very long name. For example, ACM is an abbreviation of “Association for Computing Machinery”. Now we are using an acronymic method to get the abbreviation. An acronym i…

【C# Personal Handbook】运行环境

一、CLR、CLI、CTS、CLS、BCL、FCL简介CLI(公共语言基础)CLI是微软公司向ECMA提交的一份语言和数据格式规范,CLR是目前为止唯一一个公共语言基础的实现版本。CLI包括了公共类型系统(CTS)、公共中间语言(CIL…

如何完善自己的知识结构

★领域 (本来想用“学科”这个词,后来觉得“学科”的范畴还是偏小,就改用“领域”)  按照传统的习惯,通常会把知识归类到不同的领域(比如:文学、数学、计算机、烹调、等等)。 ◇领…

MATLAB编程与应用系列-关于MATLAB编程入门教程的总体编写安排

本系列教程来源于出版设计《基于MATLAB编程基础与典型应用书籍》,如涉及版权问题,请联系:156204968qq.com。 出版社:人民邮电出版社, 页数:525。 本系列教程目前基于MATLABR2006a,可能对于更高级…

python语言特性-------python2.7教程学习【廖雪峰版】(一)

开始学习廖雪峰的py2.7教程: 2017年6月5日12:54:28 笔记: 廖雪峰python2.7教程1.用任何编程语言来开发程序,都是为了让计算机干活。 2.Python是一种相当高级的语言。代码少还不好?代码少的代价是运行速度慢。3.用Python可以做什么…

java调c++代码_Java中调用C++代码的实现 | 学步园

JNI为 Java Native Interface 即Java本地接口,使用此种方式可以对C/C代码进行调用,其在本质上是对C/C生成的动态库进行调用而不是直接对C/C代码进行调用Java代码如下:public class TestJNI{//JNI在本质上是调用C/C的动态库来实现的&#xff…

jeesite1.X 集成多数据源

2019独角兽企业重金招聘Python工程师标准>>> 网上看了几个例子,都是相同数据源的动态切换,如果不是同一种数据库类型,分页查询就出问题。经过研究解决问题。 jeesite.properties配置多数数据源地址,这里以mysql5.7和sqlserver2008…