EasyNVR網頁攝像機無插件H五、谷歌Chrome直播方案-Onvif(一)使用Onvif協議進行設備發現以及指定設備信息探測

背景分析

衆所周知,EasyNVR不拘泥、不受限於攝像機的品牌廠商及其配套平臺,只要是網絡監控攝像機IPC、硬盤錄像機NVR、且設備支持標準的RTSP/Onvif協議,均可以接入實時視頻流進入EasyNVR系統進行直播、錄像、檢索與回放服務。關於EasyNVR,能夠移步基於EasyNVR實現RTSP/Onvif監控攝像頭Web無插件化直播監控具體瞭解。同時EasyNVR支持使用onvif協議進行設備發現、雲臺控制、onvif地址獲取等功能。服務器

本篇博文着重對EasyNVR如何進行設備發現進行說明網絡

1.準備階段

首先,咱們要了解Onvif協議(https://www.onvif.org/),關於如何使用gsoap進行onvif客戶端的開發前文已經探討,gsoap的onvif框架生成請自行google。Onvif協議的功能有不少,本文只探討安防監控直播經常使用的幾種功能。架構

2.發現原理

Onvif協議要求實現Onvif協議服務的設備支持設備發現以及設備探測,也就是discovery和probe。discovery,客戶端向網段內的組播地址爲239.255.255.250,端口爲3702發送廣播消息,等待網內Onvif協議設備響應。響應消息的設備會返回本身的IP、UUID、EP Address、Type等,最重要的會返回設備的Device Service Address,格式如: http://192.168.1.2:8080/onvif/devices ,此地址就是爲設備提供Onvif服務的服務地址,咱們須要使用此地址進行其餘的操做。框架

  • 使用gsoap進行discover devices
SOAP_ENV__Header header;
    soap_default_SOAP_ENV__Header(soap_, &header);

    header.wsa__MessageID = const_cast<char*>(soap_wsa_rand_uuid(soap_));
    header.wsa__To = "urn:schemas-xmlsoap-org:ws:2005:04:discovery";
    header.wsa__Action = "http://schemas.xmlsoap.org/ws/2005/04/discovery/Probe";
    soap_->header = &header;

    wsdd__ScopesType scopesType;
    soap_default_wsdd__ScopesType(soap_, &scopesType);
    scopesType.__item = "";
    wsdd__ProbeType probeType;
    soap_default_wsdd__ProbeType(soap_, &probeType);
    probeType.Scopes = &scopesType;
    probeType.Types = "";

    __wsdd__ProbeMatches probeMatches;
    int result = soap_send___wsdd__Probe(soap_, "soap.udp://239.255.255.250:3702", NULL, &probeType);
    if (result == SOAP_OK)
    {
	  do
	{
		result = soap_recv___wsdd__ProbeMatches(soap_, &probeMatches);
		if (result == SOAP_OK)
		{
			//處理接收到的響應消息,提取設備信息
			//這裏咱們一般須要IP、Device Service Address
			//IP: soap_->ip
			//Address: probeMatches.wsdd__ProbeMatches->ProbeMatch->XAddrs 
		}
		else
		{
			break;
		}
	} while (true);
    }

3.想要更多

上述操做咱們能夠發現到統一網段內的設備,或者能夠廣播到的設備,可是,一旦咱們出現了跨網段沒法廣播到的設備,咱們如何進行設備信息獲取呢?運維

  • 首先,咱們須要知道這個設備的IP地址,不然仍是無從下手,若是你不知道,無力繼續…分佈式

  • 在知道設備的IP地址時,同理,咱們能夠向此設備進行探測,也就是咱們說的probeui

目前能查到的說明Onvif如何獲取指定設備信息的,估計也只有我這一篇了google

SOAP_ENV__Header header;
    soap_default_SOAP_ENV__Header(soap_, &header);

    header.wsa__MessageID = const_cast<char*>(soap_wsa_rand_uuid(soap_));
    header.wsa__To = "urn:schemas-xmlsoap-org:ws:2005:04:discovery";
    header.wsa__Action = "http://schemas.xmlsoap.org/ws/2005/04/discovery/Probe";
    soap_->header = &header;

    wsdd__ScopesType scopesType;
    soap_default_wsdd__ScopesType(soap_, &scopesType);
    scopesType.__item = "";
    wsdd__ProbeType probeType;
    soap_default_wsdd__ProbeType(soap_, &probeType);
    probeType.Scopes = &scopesType;
    probeType.Types = "";

    __wsdd__ProbeMatches probeMatches;
    std::string soapAddress(Format("soap.udp://%s:3702", host));
    if (soap_send___wsdd__Probe(soap_, soapAddress.c_str(), NULL, &probeType) == SOAP_OK)
    {
	    if (soap_recv___wsdd__ProbeMatches(soap_, &probeMatches) == SOAP_OK)
		//Address: probeMatches.wsdd__ProbeMatches->ProbeMatch->XAddrs
    }

EasyNVS雲管理平臺(無償使用)

EasyNVS雲管理平臺是新一代基於創新的超融合和技術構建,具有完整的視頻流媒體服務能力和運維管理服務能力的雲架構平臺,可將分佈在不一樣區域和網絡環境下的多套EasyNVR設備,統一接口進行登記和管理,藉助雲端的寬帶資源解決單路設備在雲直播中多路分發觀看所需的上行寬帶問題,及分佈式存儲在雲端的回放問題。url

客戶端經過EasyNVS雲管理平臺上的EasyNVR列表以及每一個網絡攝像頭的在線狀態和快照,獲取對應攝像頭的視頻流數據遠程運維,同時實現按需直播,下降網絡寬帶及服務器壓力。spa

EasyNVS

EasyNVR應用場景

EasyNVR能夠說已經成爲國內視頻互聯網化基礎建設的排頭兵,幾乎各個民生行業都已經有了EasyNVR視頻能力輸出的身影,EasyNVR多年服務於各行各業視頻基礎建設,EasyNVR的可靠性、完整性、穩定性已經受到了業界的普遍承認!

EasyNVR穩定可靠
EasyNVR場景一

平安工地

EasyNVR場景二

智慧校園

關於EasyNVR

EasyNVR是一款擁有完整、自主、可控知識產權,同時又可以具有軟硬一體功能的安防互聯網化流媒體服務器,可以經過簡單的網絡攝像機通道配置,將傳統監控行業裏面的高清網絡攝像機IP Camera、NVR等具備RTSP、Onvif協議輸出的設備接入到EasyNVR,EasyNVR可以將這些視頻源的音視頻數據進行拉取,轉換爲RTMP/HLS,進行全平臺終端H5直播(Web、Android、iOS),而且EasyNVR可以將視頻源的直播數據對接到第三方CDN網絡,實現互聯網級別的直播分發。詳情可訪問EasyNVR官網:http://www.easynvr.com

相關文章
相關標籤/搜索