.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.pswp.cn/news/281796.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/281796.shtml
英文地址,請注明出處:http://en.pswp.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…