背景介紹
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