1. 程式人生 > >視訊監控安防平臺-GB28181-exosip協議棧系統重新整理訂閱

視訊監控安防平臺-GB28181-exosip協議棧系統重新整理訂閱

視訊監控安防平臺-GB28181-exosip協議棧重新整理訂閱

由於之前的sip協議棧是自己寫的所以對傳送訂閱訊息和相應規定都是自己組裝,這次嘗試使用exosip來進行訂閱,發現不能單純的呼叫訂閱,必須呼叫協議棧裡面的初始化訂閱和重新整理訂閱,理解好之後,構造程式碼測試,發現還是不通,以為是協議棧不支援重新整理訂閱,就一步一步的除錯,跟到協議棧內部發現不是這麼簡單,是exosip協議棧有問題,明明根據sid找到相應的訂閱資訊,但是返回的時候還是null, 發現是協議棧的問題,修改協議棧原始碼,重新編譯。那麼採用exosip重新整理訂閱的問題就迎刃而解。

        下面講解下解決問題的思路:

採用eXosip_subscribe_build_refresh_request來進行重新整理訂閱,在除錯程式碼的發現eXosip_subscribe_dialog_find這個函式返回出來的jd == NULL始終是錯誤的,下面就跟到int eXosip_subscribe_dialog_find(int sid, eXosip_subscribe_t ** js, eXosip_dialog_t ** jd)這個函式,發現通過 sid能找到相應的eXosip_subscribe_t,問題出現在

if ((*js)->s_id == sid)
return OSIP_SUCCESS;


不難看出找到sid之後直接返回成功,那麼現在就是解決問題,需要把eXosip_dialog_t ** jd這個引數返回出去,下面就是修改原始碼:

//if ((*js)->s_id == sid)
//return OSIP_SUCCESS;
// modify by songxw 2017-12-01
if ((*js)->s_id == sid)
{
*jd = (*js)->s_dialogs;
return OSIP_SUCCESS;
}

紅色部分為修改內容。這樣重新整理訂閱就沒問題了。

下面貼上下訂閱和重新整理訂閱的程式碼,提供一段系統目錄訂閱的函式:

//send subscribe
int CSExtRegister::SendSubSribe(void)
{
	//構建目錄訂閱程式碼
	string strSubXml = "";
	TCatalogSubscriReq CatalogSubscriReq;
	CatalogSubscriReq.nSn = GetSipBodySN();
	CatalogSubscriReq.strDevId = Username;
	CatalogSubscriReq.strBeginTime = "";
	CatalogSubscriReq.strEndTime = ""; 
	BuildMsg(E_PT_CATALOG_SUBCRI_REQ,&CatalogSubscriReq, strSubXml, E_TRANPRO_SUBSCRIBE);

	int iRet = -1;
	osip_message_t* pSubScribeMsg = NULL; 
	if (m_SubCatalogTid <= 0)
	{
		//構建to地址
		char PToStr[128] = "";
		sprintf(PToStr,"sip:%
[email protected]
%s:%d", Username, EpReg.TvsAddr.OutIpAddr, EpReg.TvsAddr.OutPort); char Proxy[SIP_AOR_MAX_SIZE+1] = ""; snprintf(Proxy,SIP_AOR_MAX_SIZE, "sip:%[email protected]%s:%d",Username, EpReg.TvsAddr.OutIpAddr, EpReg.TvsAddr.OutPort); char Contact[SIP_AOR_MAX_SIZE+1] = ""; snprintf(Contact, SIP_AOR_MAX_SIZE, "sip:%[email protected]%s:%d", CSBase::m_SipSvrPubID, CSBase::m_MyIpAddr, CSBase::m_MyPort); //第一次構造subscribe iRet = eXosip_subscribe_build_initial_request(&pSubScribeMsg, PToStr, CSBase::m_From, Proxy, "presence", m_SubCatalogTime); if (iRet != OSIP_SUCCESS || pSubScribeMsg == NULL) { DBGPrint(M_SipUA, ERROR_LEVEL, "%s: build initial subscribe error for <%s>, iRet<%d>!", __FUNCTION__, Username, iRet); return -1; } osip_message_set_content_type(pSubScribeMsg, "Application/MANSCDP+xml"); osip_message_set_body(pSubScribeMsg, strSubXml.c_str(), strlen(strSubXml.c_str())); //osip_message_set_contact(pSubScribeMsg, TmpBuf); m_SubCatalogTid = eXosip_subscribe_send_initial_request(pSubScribeMsg); if (m_SubCatalogTid <= 0) { DBGPrint(M_SipUA, ERROR_LEVEL, "%s: send subscribe error for <%s>, m_SubCatalogTid<%d>!", __FUNCTION__, Username, m_SubCatalogTid); return -1; } } else { //重新整理構建subscrbe iRet = eXosip_subscribe_build_refresh_request(m_SubCatalogTid, &pSubScribeMsg); if (iRet != OSIP_SUCCESS || pSubScribeMsg == NULL) { DBGPrint(M_SipUA, ERROR_LEVEL, "%s: build refresh subscribe error for <%s>, iRet<%d>!", __FUNCTION__, Username, iRet); return -1; } char TmpBuf[CLIP_BUFFER_SIZE+1] = {0}; snprintf(TmpBuf, CLIP_BUFFER_SIZE, "%d", m_SubCatalogTime); osip_message_set_expires(pSubScribeMsg, TmpBuf); osip_message_set_content_type(pSubScribeMsg, "Application/MANSCDP+xml"); osip_message_set_body(pSubScribeMsg, strSubXml.c_str(), strlen(strSubXml.c_str())); if (eXosip_subscribe_send_refresh_request(m_SubCatalogTid, pSubScribeMsg) != OSIP_SUCCESS) { DBGPrint(M_SipUA, ERROR_LEVEL, "%s: send refresh subscribe error for <%s>, iRet<%d>!", __FUNCTION__, Username, iRet); return -1; } } return 0; }



相關推薦

視訊監控平臺-GB28181-exosip協議系統重新整理訂閱

視訊監控安防平臺-GB28181-exosip協議棧重新整理訂閱 由於之前的sip協議棧是自己寫的所以對傳送訂閱訊息和相應規定都是自己組裝,這次嘗試使用exosip來進行訂閱,發現不能單純的呼叫訂閱,必須呼叫協議棧裡面的初始化訂閱和重新整理訂閱,理解好之後,構造程式碼測試,

視訊監控平臺-國標28181(GB28181)平臺通過http請求獲取HLS、RTMP和RTSP地址(HTTP服務轉GB28181

        視訊監控安防平臺-國標28181(GB28181)平臺通過http請求獲取HLS、RTMP和RTSP地址(HTTP服務轉GB28181)   最近抽時間完善了HTTP服務接入GB28181的小平臺,支援HLS、RTMP、RTS

視訊監控平臺-國標GB28181轉RTSP和RTMP推流進行H5(RTMP/HLS)直播(支援GB28181-2016版本、支援公網碼流傳輸)

          視訊監控安防平臺-國標GB28181轉RTSP、RTMP和HLS管理平臺(支援GB28181-2016版本、支援公網碼流傳輸)       最近抽了點時間把國標GB28181轉RTSP、RTMP和HLS管理平臺做了簡單的整理,把相應的Demo也整理好了,

視訊監控平臺-國標28181 2016-GB28181 2016版檢測經歷 (平臺上聯和下聯檢測)

國標28181 2016-GB28181 2016版本的檢測,檢測專案大體分為:上聯和下聯  (需要檢測文件和檢測結果截圖的聯絡QQ:123011785(註明新增原因)) 人員:控制元件開發人員1個、後臺伺服器開發人員1個 檢測時間:2天 (第一天前半天基本在除錯前端裝置)

視訊監控平臺--國標28181-2016版本TCP碼流沾包流程

視訊安防監控平臺-國標28181-2016版本TCP碼流沾包流程 (如需交流可聯絡QQ:123011785) 由於28181規定tcp碼流要使用RFC4571,通俗點就是每個包的格式為 長度(2個位元組)+RTP頭(12個位元組)+資料模式,然後自己在根據這個格式進行沾包處

視訊平臺-MP4檔案儲存和讀取的封裝

#ifndef __LIBMP4_H_ #define __LIBMP4_H_ #ifndef _MP4V2_H_ #define _MP4V2_H_ #include "mp4v2/mp4v2.h" #include <vector> #endif using namespace std;

Osip2和eXosip協議的簡析

時序 發送 nis 角度 then 協議 script style 層次 Osip2是一個開放源代碼的sip協議棧,是開源代碼中不多使用C語言寫的協議棧之一,它具有短小簡潔的特點,專註於sip底層解析使得它的效率比較高。 eXosip是Osip2的一個擴展協議集,它部分封

WebRTC實時音視訊技術基礎:基本架構和協議

概述 本文主要介紹WebRTC的架構和協議棧。 最基本的三角形WebRTC架構 為了便於理解,我們來看一個最基本的三角形WebRTC架構(見下圖): 在這個架構中,行動電話用“瀏覽器M”表示,膝上型電腦用“瀏覽器L”表示,通過Web伺服器將它們連線起來。要建立

Zstack協議--系統時鐘定時器

   HalTimerConfig (OSAL_TIMER,                        // 8bit timer2                  HAL_TIMER_MODE_CTC,                 // Clear Timer on Compare        

視訊監控解決方案

雲視訊安防監控解決方案 概述  隨著各地現代化建設和經濟的快速發展,構建和諧社會的必要性與日俱增,安防監控系統作為保障居民人生財產安全的基本工具,已成為社會和諧發展的重要組成部分。 寬頻網路的提速降費、3G/4G行動網路的普及,大大改善了當前的網際網路環境,智慧手機以及各種智慧

【轉】視訊監控平臺-GB28181-語音對講功能

視訊監控平臺-GB28181-2016語音對講功能 很多人在問我,語音對講是怎麼流程, 實現了怎麼去測試,語音對講是在2014版本提出來的,我這裡詳細寫一遍國標28181-2016語音對講的功能介紹。(如需交流可聯絡QQ:123011785) 提前先把GB28181檢測需要注意的事項說一下:

視訊監控產業鏈

安防視訊監控產業鏈(附今年50強企業)     和去年一樣,仍然令人意外的是中國安防企業宇視科技、東方網力等沒有上榜。小編記得去年的榜單出爐後,引起了較大爭議,A&S給出了進一步解釋: 全球安防50強是以全球市場的銷售額作為考衡,並以自願提供具有註冊

手把手教你使用ffmpeg及nginx實現直播、點播、監控-單點-專題視訊課程

手把手教你使用ffmpeg及nginx實現直播、點播、安防監控—6人已學習 課程介紹        手把手教你使用ffmpeg及nginx實現直播、點播、安防監控課程收益    講師介紹    單點更多

Qt編寫視訊監控系統2-視訊播放

一、前言 視訊播放功能是核心功能之一,為了統一管理介面,統一封裝成一個控制元件,對外提供seturl open close方法即可

Qt編寫視訊監控系統3-通道交換

一、前言 最開始寫通道交換的功能的時候,走了很多彎路,比如最開始用最初級的辦法,觸發交換的時候,先關閉視訊,然後設定新的url重新

Qt編寫視訊監控系統4-刪除視訊

一、前言 一般會有兩種處理方式來刪除視訊,一種是滑鼠右鍵選單,刪除當前視訊或者刪除所有視訊,一種是直接按住當前視訊,移到視訊通道介

Qt編寫視訊監控系統5-視訊回放

一、前言 一般視訊回放都會採用GB28181國標來處理,這樣可以保證相容國內各大廠家的NVR,畢竟在同一的國家標準下,大家都會統一

Qt編寫視訊監控系統12-異形佈局

一、前言 視訊監控系統中,除了常規的1畫面、4畫面、9畫面、16畫面以外,還有幾個佈局比較另類,比如6畫面、8畫面、13畫面,有些

Qt編寫視訊監控系統11-動態換膚

一、前言 Qt中的動態換膚技術是非常一流的,直接呼叫qApp->setStyleSheet(qss);就可以對整個應用程式進

監控如何做到“天網恢恢、疏而不漏”?

安全監控安防監控系統自問世以來就迅速的進入了人們的生活中,視頻監控系統在一定程度上助力中國邁向了最“安全”國家的道路。前不久,“外國人眼中的中國有多安全?”這一熱點火了一段時間,也讓身處在“安全”中的國人深深的自豪了一把。比起國外經常會出現的槍擊案、恐怖襲擊除了國情因素,安防監控系統可是幫了不少的忙。從視屏監