一種通過在服務(wù)器端建立動態(tài)內(nèi)存去網(wǎng)絡(luò)抖動的方法_第1頁
一種通過在服務(wù)器端建立動態(tài)內(nèi)存去網(wǎng)絡(luò)抖動的方法_第2頁
一種通過在服務(wù)器端建立動態(tài)內(nèi)存去網(wǎng)絡(luò)抖動的方法_第3頁
一種通過在服務(wù)器端建立動態(tài)內(nèi)存去網(wǎng)絡(luò)抖動的方法_第4頁
一種通過在服務(wù)器端建立動態(tài)內(nèi)存去網(wǎng)絡(luò)抖動的方法_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、說明書摘要本發(fā)明涉及一種通過在服務(wù)器端建立動態(tài)內(nèi)存去網(wǎng)絡(luò)抖動的方法。視頻監(jiān)控終端與視頻監(jiān)控前端設(shè)備通常按照B/S或者C/S的架構(gòu)一對一或者多對一的方式通信。在傳輸層使用TCP協(xié)議,提高數(shù)據(jù)傳輸?shù)目煽啃裕WC每幀數(shù)據(jù)到達(dá)的完整性及有序性;服務(wù)器端采集的視頻數(shù)據(jù)經(jīng)H.264視頻編碼后,以圖像幀為單位存放到發(fā)送數(shù)據(jù)緩沖區(qū),發(fā)送緩沖區(qū)以環(huán)形方式組織,保證數(shù)據(jù)的實時性;服務(wù)器端定時檢查當(dāng)前視頻流狀態(tài)及連接數(shù)量來判斷是否采用為每個連接獨(dú)立分配緩存的方式,來解決網(wǎng)絡(luò)抖動的問題。本發(fā)明以動態(tài)分配獨(dú)立內(nèi)存的方式解決了網(wǎng)絡(luò)傳輸?shù)膩G包和亂序問題,將視頻圖像以幀為單位存放于每個獨(dú)立環(huán)形緩沖區(qū)中,提高了視頻監(jiān)控系統(tǒng)整體

2、抗干擾能力,為終端用戶提供較好的視頻圖像質(zhì)量。 權(quán)利要求書 1. 一種通過在服務(wù)器端建立動態(tài)內(nèi)存去網(wǎng)絡(luò)抖動的方法,其特征在于,包括步驟:步驟S1:服務(wù)器端初始化公共環(huán)形緩沖區(qū)。步驟S2:服務(wù)器端為新的訪問端建立TCP連接,并記錄當(dāng)前連接數(shù)。步驟S3:服務(wù)器端檢測當(dāng)前視頻流狀態(tài),如果滿足一定閾值,則為每個訪問端新分配環(huán)形緩沖區(qū),用于視頻流的獨(dú)立傳輸,如果不是,則恢復(fù)使用公共環(huán)形緩沖區(qū)。步驟S4:返回步驟S2進(jìn)行循環(huán)執(zhí)行。2. 根據(jù)權(quán)利要求1所述的一種通過在服務(wù)器端建立動態(tài)內(nèi)存去網(wǎng)絡(luò)抖動的方法,其特征在于,上述步驟S1中新建的客戶端連接均以此公共環(huán)形緩沖區(qū)為默認(rèn)視頻流發(fā)送緩沖區(qū)。3. 根據(jù)權(quán)利要求

3、1所述的一種通過在服務(wù)器端建立動態(tài)內(nèi)存去網(wǎng)絡(luò)抖動的方法,其特征在于,上述步驟S2中為了保證鏈接可靠性,服務(wù)器端為新的訪問端建立TCP連接,并記錄當(dāng)前連接數(shù)。3. 根據(jù)權(quán)利要求1所述的一種通過在服務(wù)器端建立動態(tài)內(nèi)存去網(wǎng)絡(luò)抖動的方法,其特征在于,上述步驟S3中如果CurLinkNum*CurBitRate >THRESHOLD_PAYLOAD條件成立,則將為每一個新建連接單獨(dú)分配環(huán)形緩沖區(qū)存放待發(fā)送碼流,而不再是公用同一個緩沖區(qū)。其中,CurLinkNum為當(dāng)前連接數(shù),CurBitRate為當(dāng)前碼流碼率大小,THRESHOLD_PAYLOAD為負(fù)載閾值,根據(jù)實際網(wǎng)絡(luò)帶寬等條件設(shè)定。如果條件不

4、成立,則仍然使用公共緩沖區(qū)存放待發(fā)送碼流。3. 根據(jù)權(quán)利要求1所述的一種通過在服務(wù)器端建立動態(tài)內(nèi)存去網(wǎng)絡(luò)抖動的方法,其特征在于,上述步驟S4中,通過步驟S2所建立之線程循環(huán)判斷,在公共緩沖區(qū)方式與使用新分配內(nèi)存方式間切換。說明書一種通過在服務(wù)器端建立動態(tài)內(nèi)存去網(wǎng)絡(luò)抖動的方法技術(shù)領(lǐng)域本發(fā)明涉及一種通過在服務(wù)器端建立動態(tài)內(nèi)存去網(wǎng)絡(luò)抖動的方法,尤其可應(yīng)用于網(wǎng)絡(luò)視頻服務(wù)器在QoS(網(wǎng)絡(luò)服務(wù)質(zhì)量)較差下多點(diǎn)實時視頻的傳輸。背景技術(shù)隨著EtherNet技術(shù)的不斷發(fā)展,IPC(網(wǎng)絡(luò)視頻監(jiān)控設(shè)備)逐漸成為安防領(lǐng)域發(fā)展的一個熱點(diǎn)。利用現(xiàn)有的IP寬帶網(wǎng)絡(luò),便可以實現(xiàn)遠(yuǎn)程視頻監(jiān)控,而不用單獨(dú)建設(shè)視頻專線。在實際監(jiān)控

5、應(yīng)用中,通常會出現(xiàn)多個客戶端同時連接同一個監(jiān)控前端進(jìn)行視頻監(jiān)控的案例,即多個客戶端同時連接同一個前端服務(wù)器。且隨著高清視頻監(jiān)控的普及,視頻碼流碼率更是與日俱增,因為數(shù)據(jù)量大,就容易使傳輸?shù)囊曨l流出現(xiàn)丟包、亂序的問題,導(dǎo)致了接收客戶端的解碼器不能正確解碼視頻流,給終端用戶呈現(xiàn)的就是解碼錯誤的視頻圖像?,F(xiàn)在主要采用的技術(shù)為連接同一個服務(wù)器的多個客戶端共同使用同一個緩沖池,對同一幀碼流,只有對每個客戶端發(fā)送碼流數(shù)據(jù)包完畢之后,再釋放這片緩存,這樣對數(shù)據(jù)量不大、網(wǎng)絡(luò)環(huán)境較好的條件下可以減少網(wǎng)絡(luò)延遲,但是,對于高清視頻來說,數(shù)據(jù)量大,現(xiàn)有方法就存在局限性,容易導(dǎo)致丟包和亂序的問題,因此,現(xiàn)有的技術(shù)存在改

6、進(jìn)和發(fā)展的空間。發(fā)明內(nèi)容為了克服前端高清設(shè)備在被多路客戶端同時訪問時,因為數(shù)據(jù)量大,容易使視頻圖像產(chǎn)生網(wǎng)絡(luò)抖動的缺點(diǎn),本發(fā)明提供了一種通過在服務(wù)器端建立動態(tài)內(nèi)存去網(wǎng)絡(luò)抖動的方法,在視頻高碼率及多客戶端同時訪問條件下,通過在服務(wù)器端為每個訪問端獨(dú)立分配內(nèi)存,這樣使得為每個訪問端的碼流傳輸具有獨(dú)立性,防止了丟包和亂序等現(xiàn)象。本發(fā)明解決其技術(shù)問題所采用的技術(shù)方案是:一種通過在服務(wù)器端建立動態(tài)內(nèi)存去網(wǎng)絡(luò)抖動的方法,包括如下步驟:步驟S1:服務(wù)器端初始化公共環(huán)形緩沖區(qū)。步驟S2:服務(wù)器端為新的訪問端建立TCP連接,并記錄當(dāng)前連接數(shù)。步驟S3:服務(wù)器端檢測當(dāng)前視頻流狀態(tài),如果滿足一定閾值,則為每個訪問端新

7、分配環(huán)形緩沖區(qū),用于視頻流的獨(dú)立傳輸,如果不是,則恢復(fù)使用公共環(huán)形緩沖區(qū)。步驟S4:返回步驟S2進(jìn)行循環(huán)執(zhí)行。上述步驟S1中新建的連接均以此公共環(huán)形緩沖區(qū)為默認(rèn)視頻流發(fā)送緩沖區(qū)。上述步驟S2中為了保證鏈接可靠性,服務(wù)器端為新的訪問端建立TCP連接,并記錄當(dāng)前連接數(shù)。上述步驟S3中如果CurLinkNum*CurBitRate >THRESHOLD_PAYLOAD條件成立,則將為每一個新建連接單獨(dú)分配環(huán)形緩沖區(qū)存放待發(fā)送碼流,而不再是公用同一個緩沖區(qū)。其中,CurLinkNum為當(dāng)前連接數(shù),CurBitRate為當(dāng)前碼流碼率大小 ,THRESHOLD_PAYLOAD為負(fù)載閾值,根據(jù)實際網(wǎng)絡(luò)

8、帶寬等條件設(shè)定。如果條件不成立,則仍然使用公共緩沖區(qū)存放待發(fā)送碼流。上述步驟S4中,通過步驟S2所建立之線程循環(huán)判斷,在公共緩沖區(qū)方式與使用新分配內(nèi)存方式間切換。與現(xiàn)有技術(shù)相比,本發(fā)明的積極效果是:通過在服務(wù)器端為新的訪問點(diǎn)建立動態(tài)內(nèi)存,有效提高視頻傳輸?shù)目煽啃?,解決了視頻網(wǎng)絡(luò)傳輸抖動的問題。具體表現(xiàn)如下:1、基于TCP作為傳輸層協(xié)議,建立公共環(huán)形緩沖區(qū),以幀為單位將視頻圖像信息存放于其中,循環(huán)覆蓋,有效解決了視頻延時的問題;2、在高碼率多連接條件下,采用動態(tài)獨(dú)立分配內(nèi)存的方法,有效保障了視頻流的正常傳輸,解決了因碼率過大或者訪問端過多導(dǎo)致了視頻流傳輸丟包、亂序而產(chǎn)生的網(wǎng)絡(luò)抖動問題。附圖說明附

9、圖1為系統(tǒng)結(jié)構(gòu)圖。附圖2為公共環(huán)形緩沖區(qū)示意圖。附圖3多訪問端獨(dú)立分配環(huán)形緩沖區(qū)示意圖。具體實施方式下面結(jié)合附圖2、3和具體實施例對本發(fā)明的原理進(jìn)行詳細(xì)說明。本發(fā)明所建立的整個系統(tǒng)均實現(xiàn)于服務(wù)器端,服務(wù)器端進(jìn)行視頻實時采集、H264編碼,將碼流存放于發(fā)送緩沖區(qū)中;服務(wù)器端在設(shè)定的TCP端口進(jìn)行監(jiān)聽,等待來自客戶端的視頻連接請求,將視頻數(shù)據(jù)包通過TCP報文分發(fā)給客戶端;服務(wù)器端判斷當(dāng)前連接狀態(tài),決定是否啟用為每個客戶端獨(dú)立分配環(huán)形緩沖區(qū)的處理方式。步驟S1:初始化公共環(huán)形緩沖區(qū),結(jié)構(gòu)如圖2所示,服務(wù)器端檢測到碼流狀態(tài)在未達(dá)到閾值時,均使用此公共環(huán)形緩沖區(qū)存儲待傳輸視頻碼流。公共環(huán)形緩沖區(qū)通過鏈表

10、實現(xiàn),如下代碼描述了緩沖區(qū)每個節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu):struct FifoElementtFifoElement *next; /鏈表指針,指向緩沖區(qū)隊列int type;tElement *chunk; ;struct Elementpthread_mutex_t lock; /緩沖區(qū)操作鎖int ref;tElement *next; /鏈表指針,指向每個緩沖區(qū)中的每個片區(qū)void *data; /緩沖區(qū)數(shù)據(jù)指針int size;對于環(huán)形緩沖區(qū)的操作:系統(tǒng)定義兩個讀寫指針Pread/Pwrite,在完成緩沖區(qū)的初始化以后讀寫指針重合。工作過程中,如果Pread不等于Pwrite,那么輸出當(dāng)前Pr

11、ead指向的內(nèi)容,并將Pread移到下一個節(jié)點(diǎn),否則返回?zé)o數(shù)據(jù)狀態(tài)。如果Pwrite的下一個節(jié)點(diǎn)不是Pread,那么將數(shù)據(jù)寫入Pwrite指向節(jié)點(diǎn)的數(shù)據(jù)緩沖部分,并將Pwrite移向下一個節(jié)點(diǎn)。如果Pwrite的下一個節(jié)點(diǎn)是Pread,那么首先將Pread指向下一個節(jié)點(diǎn),同時將數(shù)據(jù)寫入Pwrite的指向節(jié)點(diǎn)的數(shù)據(jù)緩沖部分,最后將Pwrite指向下一個節(jié)點(diǎn)。覆蓋舊數(shù)據(jù)的寫入方式用于確保緩沖區(qū)數(shù)據(jù)的實時性。由于緩沖區(qū)的讀寫由兩個單獨(dú)的線程完成,因此需要在讀寫前對緩沖區(qū)指針進(jìn)行加鎖操作。在通常情況下,服務(wù)器使用上述公共緩沖池向多個客戶端發(fā)送數(shù)據(jù),當(dāng)某一圖像幀發(fā)送給了當(dāng)前全部有效連接之后,方能移動Pr

12、ead至下一個節(jié)點(diǎn),以此保證每個視頻連接所接收數(shù)據(jù)幀的完整性。步驟S2:服務(wù)器建立TCP服務(wù)器,監(jiān)聽來自客戶端服務(wù)請求。步驟S3:定時檢測服務(wù)器端碼流及客戶端連接狀態(tài),如果CurLinkNum*CurBitRate >THRESHOLD_PAYLOAD條件成立,則將為每一個新建連接單獨(dú)分配內(nèi)存作為發(fā)送緩沖區(qū)存放待發(fā)送碼流,而不再是公用同一個緩沖區(qū)。其中,CurLinkNum為當(dāng)前連接數(shù),CurBitRate為當(dāng)前碼流碼率大小 ,THRESHOLD_PAYLOAD為負(fù)載閾值,根據(jù)實際網(wǎng)絡(luò)帶寬等條件設(shè)定。如果條件不成立,則仍然使用公共緩沖區(qū)存放待發(fā)送碼流。以下代碼實現(xiàn)了在新建連接中初始化一個

13、獨(dú)立的環(huán)形緩沖區(qū):struct Dispatchpthread_mutex_t lock;tFifoBuffer *rdFifo;tPool * pool;ReadSession rdSessionMAX_READERS ;/連接數(shù);int GetMemReadID()int i =0;tDispatch *pDispatch = &gDispatch;tFifoBuffer *fifoHead = NULL;tFifoBuffer *tFifo = NULL;pthread_mutex_lock(&pDispatch->lock); /加鎖for (i = 0;i<

14、;MAX_READERS;i+) if (pDispatch->rdSessioni.freeFlag) /有效連接建立pDispatch->rdSessioni.freeFlag = 0;tFifo = fifo_buffer_init(); /分配單獨(dú)緩沖區(qū)if (NULL = tFifo)i = -1;elsepDispatch->rdSessioni.readFifo = tFifo;if (NULL = pDispatch->rdFifo)pDispatch->rdFifo = tFifo;elsefor(fifoHead = pDispatch->

15、;rdFifo;fifoHead->next;fifoHead=fifoHead->next);fifoHead->next = tFifo;pthread_mutex_unlock(&pDispatch->lock);return i;pthread_mutex_unlock(&pDispatch->lock);return -1;通過上述代碼,為每個新建立的連接都分配了一個如圖3所示的緩沖區(qū),在此之后,經(jīng)H.264編碼后的視頻碼流直接復(fù)制于各個獨(dú)立的緩沖區(qū),并分別發(fā)送至客戶端, 以下代碼實現(xiàn)了碼流存儲于獨(dú)立分配的緩沖區(qū):void PutChun

16、kForWrite(tElement* chunk)tDispatch *pDispatch = &gDispatch;tFifoBuffer *readFifo = NULL;tFifoElement *elm = NULL;tPool * pool = pDispatch->pool;int len;char *pos = NULL;if(!chunk)return;pthread_mutex_lock(&pDispatch->lock); /線程鎖if (!pDispatch->rdFifo)pthread_mutex_unlock(&pDisp

17、atch->lock);pthread_mutex_lock(&chunk->lock);pool->free(pool,chunk);pthread_mutex_unlock(&chunk->lock);return;pthread_mutex_lock(&pool->mutex); /緩沖區(qū)鎖pthread_mutex_lock(&chunk->lock);len = *(int *)(chunk->data);pos = (char *)(int *)(chunk->data) + 1);for(readFi

18、fo = pDispatch->rdFifo; readFifo != NULL; readFifo = readFifo->next)elm = readFifo->get(readFifo, BLOCK_ALLOW, _LIST_PRODUCER_);if (NULL = elm)continue;* (int *)elm->chunk->data) = * (int *)(&len);memcpy(char *)(int *)elm->chunk->data)+1), pos, len); /復(fù)制碼流至緩沖區(qū)readFifo->put(readFifo, elm, _LIST_CONSUMER_);chunk->ref = 0;pthread_mutex_unlock(&pool->mutex);pool->free(pool, chu

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論