EasyNVR網頁攝像機無插件H5、谷歌Chrome直播方案-Onvif(二)使用Onvif協議進行設備RTSP地址獲取

背景介紹

EasyNVR最大的優勢就是兼容性,通過RTSP協議接入傳統網絡攝像機、NVR、編碼器等,使用RTSP協議接入能兼容市面上絕大多數網絡攝像機等源設備,最大程度的提高整體方案的硬件設備的兼容性,有效的避免採用各個硬件廠家SDK定製的繁瑣以及不通用問題;上一篇我們詳細說明如何發現網內Onvif設備,還有如何探測特定設備的信息EasyNVR-Onvif(一)使用Onvif協議進行設備發現以及指定設備信息探測

本文主要說明如何進行很重要的信息獲取,就是設備的流地址(RTSP地址)

1.流程

要獲取設備的RTSP地址,首先需要獲取到設備的Device Service Address,也就是上一篇提到的。如果需要獲取更進一步的信息,還需要知道此設備的用戶名和密碼,不然無法進行下一步操作。

  • 獲取設備能力Capabilities

獲取設備的能力,並且可以獲取到Media和PTZ的URL,使用這兩個URL可以進行流和PTZ操作


    _tds__GetCapabilities* capabilities = soap_new__tds__GetCapabilities(proxyDevice, -1);    
     
    tt__CapabilityCategory* category = new tt__CapabilityCategory;
    capabilities->Category = category;
    *(capabilities->Category) = tt__CapabilityCategory__All;
    _tds__GetCapabilitiesResponse* response = soap_new__tds__GetCapabilitiesResponse(proxyDevice, -1);
    if (SOAP_OK == proxyDevice->GetCapabilities(capabilities, response))
    {
	    if (response->Capabilities)
	{
		//Media URI: response->Capabilities->Media->XAddr;
		//PTZ URI: response->Capabilities->PTZ->XAddr;
	   }
    }

  • 獲取Media Profile

使用上一步獲取到的Media URI獲取設備的Media Profile


    _trt__GetProfiles* getProfiles = soap_new__trt__GetProfiles(proxyMedia, -1);
    _trt__GetProfilesResponse* response = soap_new__trt__GetProfilesResponse(proxyMedia, -1);
    if (SOAP_OK == proxyMedia->GetProfiles(getProfiles, response))
    {
	    int size = response->__sizeProfiles;
	    for (int i = 0; i < size; ++i)
	    {
		  if (response->Profiles[i])
		  {
			//Media Profile Token: response->Profiles[i]->token;
			//一般設備包含多個Profile Token,包含主碼流、子碼流、第三碼流
		 }
	   }
    }

  • 獲取Media Uri

使用獲取的Media URI和Media Profile Token獲取對應的Media Uri,也就是RTSP地址


    MediaBindingProxy* proxyMedia = new MediaBindingProxy;
    proxyMedia->soap_endpoint = mediaUrl.c_str();
    _trt__GetStreamUri* getStreamUri = soap_new__trt__GetStreamUri(proxyMedia, -1);
    tt__StreamSetup* streamSetup = soap_new_tt__StreamSetup(proxyMedia, -1);
    getStreamUri->StreamSetup = streamSetup;
    getStreamUri->StreamSetup->Stream = tt__StreamType__RTP_Unicast;
    tt__Transport* transport = soap_new_tt__Transport(proxyMedia, -1);
    getStreamUri->StreamSetup->Transport = transport;
    getStreamUri->StreamSetup->Transport->Protocol = tt__TransportProtocol__RTSP;
    _trt__GetStreamUriResponse* response = soap_new__trt__GetStreamUriResponse(proxyMedia, -1);

    if (!profile.empty())
    {
	    getStreamUri->ProfileToken = const_cast<char*>(profile.c_str());
	    if (security(proxyMedia, username, password))
	    {
		     if (proxyMedia->GetStreamUri(getStreamUri, response) == SOAP_OK)
		    {
			    //RTSP地址: response->MediaUri->Uri
		    }
	    }
    }

獲取到RTSP地址就可以進行拉流操作了

專業團隊

爲了保障我們的服務器正常穩定運作,EasyNVR有專業的運維(售前支撐、商務諮詢、售後維護)團隊,隨時對客戶各種突發情況快速響應處理,保證互聯網直播的順利進行。我們也希望實現“0延時”,但理想豐滿,現實骨感。每一個完美的直播背後都需要設備、網絡、併發量等流程配合完成,正所謂“蝴蝶效應”,任何一個小環節都會對直播延時產生影響,EasyNVR團隊要做的就是不斷完善開發互聯網直播系統,保證直播的低延時、穩定性,同時視頻播放高清流暢。
專業團隊

EasyNVR安防攝像機網頁流媒體服務

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

智慧城市

EasyNVR應用場景

經典案例
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章