專利名稱:一種去除網(wǎng)絡抖動的方法及系統(tǒng)的制作方法
技術(shù)領域:
本發(fā)明涉及網(wǎng)絡通信技術(shù)領域,尤其涉及一種去除網(wǎng)絡抖動的方法及系統(tǒng)。
背景技術(shù):
網(wǎng)絡抖動,其是指網(wǎng)絡中分組延遲的變化程度。如果網(wǎng)絡發(fā)生擁塞,排隊延遲將影響端到端的延遲,并導致通過同一連接傳輸?shù)姆纸M延遲各不相同,而抖動,就是用來描述這樣一延遲變化的程度。因此,抖動將會使得數(shù)據(jù)量大的傳輸容易出現(xiàn)丟包和亂序的問題。隨著EtherNet技術(shù)的不斷發(fā)展,IPC (網(wǎng)絡視頻監(jiān)控設備)逐漸成為安防領域發(fā)展的一個熱點。利用現(xiàn)有的IP寬帶網(wǎng)絡,便可以實現(xiàn)遠程視頻監(jiān)控,而不用單獨建設視頻專線。在實際監(jiān)控應用中,通常會出現(xiàn)多個客戶端同時連接同一個監(jiān)控前端進行視頻監(jiān)控的案例,即多個客戶端同時連接同一個前端服務器。且隨著高清視頻監(jiān)控的普及,視頻碼流碼率更是與日俱增,因為數(shù)據(jù)量大,就容易使傳輸?shù)囊曨l流出現(xiàn)丟包、亂序的問題,導致了接收客戶端的解碼器不能正確解碼視頻流,給終端用戶呈現(xiàn)的就是解碼錯誤的視頻圖像?,F(xiàn)在主要采用的技術(shù)為連接同一個服務器的多個客戶端共同使用同一個緩沖池,對同一幀碼流,只有對每個客戶端發(fā)送碼流數(shù)據(jù)包完畢之后,再釋放這片緩存,這樣對數(shù)據(jù)量不大、網(wǎng)絡環(huán)境較好的條件下可以減少網(wǎng)絡延遲,但是,對于高清視頻來說,這樣的方法容易導致丟包和亂序的問題。
發(fā)明內(nèi)容
本發(fā)明的目的是針對現(xiàn)有技術(shù)中采用緩沖池對同一幀碼流在對每個客戶端發(fā)送完成后再釋放的方法使得無法處理數(shù)據(jù)量大,網(wǎng)絡環(huán)境不好的數(shù)據(jù),提供一種去除網(wǎng)絡抖動的方法。本發(fā)明還公開了實現(xiàn)這種去除網(wǎng)絡抖動方法的系統(tǒng)。本發(fā)明的目的通過下述技術(shù)方案來實現(xiàn)
一種去除網(wǎng)絡抖動的方法,其具體包含以下步驟1.服務器進行數(shù)據(jù)采集并編碼后將碼流寫入環(huán)形緩沖區(qū),并記錄當前碼流碼率大小C ;2.服務器對端口進行監(jiān)聽并記錄當前客戶端連接數(shù)L,并根據(jù)當前碼流碼率大小C和當前客戶端連接數(shù)L進行判斷,當C*L小于或等于Tl時,采用一個公共的環(huán)形緩沖區(qū)A存放待發(fā)送碼流,所有的客戶端從公共的環(huán)形緩沖區(qū)A中讀取數(shù)據(jù);當OL大于Tl時,為新的客戶端建立新的環(huán)形緩沖區(qū)B,新的客戶端從新的環(huán)形緩沖區(qū)B中讀取數(shù)據(jù);依次類推,當C*L-T1大于T2時,為最新的客戶端建立最新的環(huán)形緩沖區(qū)C,最新的客戶端從最新的環(huán)形緩沖區(qū)C中讀取數(shù)據(jù);其中T1、T2為負載閾值;3.客戶端從分配的環(huán)形緩沖區(qū)中讀取數(shù)據(jù)。更進一步地,上述步驟I具體還包括服務器對視頻數(shù)據(jù)進行實時采集,并進行Η264編碼后將碼流以幀為單位寫入環(huán)形緩沖區(qū)。更進一步地,上述步驟2具體還包括服務器對TCP端口進行監(jiān)聽,并將視頻數(shù)據(jù)包通過TCP報文分發(fā)給客戶端。
更進一步地,上述服務器端為B/S或者C/S架構(gòu)。更進一步地,上述方法還包括,每一個環(huán)形緩沖區(qū)對應一個客戶端。更進一步地,上述方法還包括定期執(zhí)行步驟2中的服務器對端口進行監(jiān)聽并記錄當前客戶端連接數(shù)L,并根據(jù)當前碼流碼率大小C和當前客戶端連接數(shù)L確定環(huán)形緩沖區(qū)的個數(shù)。更進一步地,上述環(huán)形緩沖區(qū)通過鏈表實現(xiàn),環(huán)形緩沖區(qū)設置讀指針和寫指針,所述寫指針用于將碼流以幀為單位寫入環(huán)形緩沖區(qū),所述讀指針用于將數(shù)據(jù)幀從環(huán)形緩沖區(qū)中讀出。更進一步地,上述方法還包括如果寫指針的的下一個節(jié)點是讀指針,則先將讀指針指向下一個節(jié)點,同時將數(shù)據(jù)寫入寫指針的指向節(jié)點的數(shù)據(jù)緩沖部分,最后將寫指針指向下一個節(jié)點。更進一步地,上述方法還包括當一個環(huán)形緩沖區(qū)對應至少兩個客戶端時,在某一幀發(fā)送給了所有客戶端之后,再移動讀指針至下一個節(jié)點。以此保證每個視頻連接所接收數(shù)據(jù)幀的完整性。本發(fā)明還公開了一種實現(xiàn)去除網(wǎng)絡抖動的系統(tǒng),其具體包括服務器端、N個客戶端,所述服務器端用于進行數(shù)據(jù)采集并編碼后將碼流寫入環(huán)形緩沖區(qū),并記錄當前碼流碼率大小C ;服務器對端口進行監(jiān)聽并記錄當前客戶端連接數(shù)L,并根據(jù)當前碼流碼率大小C和當前客戶端連接數(shù)L進行 判斷,當C*L小于或等于Tl時,采用一個公共的環(huán)形緩沖區(qū)A存放待發(fā)送碼流,所有的客戶端從公共的環(huán)形緩沖區(qū)A中讀取數(shù)據(jù);當(札大于Tl時,為新的客戶端建立新的環(huán)形緩沖區(qū)B,新的客戶端從新的環(huán)形緩沖區(qū)B中讀取數(shù)據(jù);依次類推,當C*L-T1大于T2時,為最新的客戶端建立最新的環(huán)形緩沖區(qū)C,最新的客戶端從最新的環(huán)形緩沖區(qū)C中讀取數(shù)據(jù);其中Tl、T2為負載閾值;所述客戶端用于從分配的環(huán)形緩沖區(qū)中讀取數(shù)據(jù)。通過采用以上技術(shù)方案,本發(fā)明具有以下有益效果通過在服務器端為新的訪問點建立動態(tài)內(nèi)存,有效提高視頻傳輸?shù)目煽啃?,解決了視頻網(wǎng)絡傳輸抖動的問題。具體表現(xiàn)如下1、基于TCP作為傳輸層協(xié)議,建立公共環(huán)形緩沖區(qū),以幀為單位將視頻圖像信息存放于其中,循環(huán)覆蓋,有效解決了視頻延時的問題;2、在高碼率多連接條件下,采用動態(tài)獨立分配內(nèi)存的方法,有效保障了視頻流的正常傳輸,解決了因碼率過大或者訪問端過多導致了視頻流傳輸丟包、亂序而產(chǎn)生的網(wǎng)絡抖動問題。
附圖1為本發(fā)明方法應用的系統(tǒng)結(jié)構(gòu)圖。附圖2為公共環(huán)形緩沖區(qū)示意圖。附圖3多訪問端獨立分配環(huán)形緩沖區(qū)示意圖。
具體實施例方式為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點更加清楚明白,以下結(jié)合說明書附圖及具體實施例,對本發(fā)明進行進一步詳細說明。應當理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
本發(fā)明公開了一種去除網(wǎng)絡抖動的方法,其具體包含以下步驟1.服務器進行數(shù)據(jù)采集并編碼后將碼流寫入環(huán)形緩沖區(qū),并記錄當前碼流碼率大小C ;2.服務器對端口進行監(jiān)聽并記錄當前客戶端連接數(shù)L,并根據(jù)當前碼流碼率大小C和當前客戶端連接數(shù)L進行判斷,當C*L小于或等于Tl時,采用一個公共的環(huán)形緩沖區(qū)A存放待發(fā)送碼流,所有的客戶端從公共的環(huán)形緩沖區(qū)A中讀取數(shù)據(jù);當(札大于Tl時,為新的客戶端建立新的環(huán)形緩沖區(qū)B,新的客戶端從新的環(huán)形緩沖區(qū)B中讀取數(shù)據(jù);依次類推,當C*L-T1大于T2時,為最新的客戶端建立最新的環(huán)形緩沖區(qū)C,最新的客戶端從最新的環(huán)形緩沖區(qū)C中讀取數(shù)據(jù);其中T1、T2為負載閾值;3.客戶端從分配的環(huán)形緩沖區(qū)中讀取數(shù)據(jù)。通過將碼流循環(huán)寫入環(huán)形緩沖區(qū),以幀為單位將碼流數(shù)據(jù)如視頻圖像信息存放于其中,循環(huán)覆蓋,有效解決了視頻延時的問題,并同時記錄當前碼流碼率大小C和當前客戶端連接數(shù)L,并根據(jù)C*L和T的關系判斷是直接采用一個公共的環(huán)形緩沖區(qū)還是為新的客戶端建立新的環(huán)形緩沖區(qū),通過在服務器端為新的訪問點建立動態(tài)緩存,有效提高視頻傳輸?shù)目煽啃裕鉀Q了視頻網(wǎng)絡傳輸抖動的問題,使得在高碼率多連接條件下,采用動態(tài)獨立分配緩存的方法,有效保障了視頻流的正常傳輸。解決了因碼率過大或者訪問端過多導致的視頻流傳輸丟包、亂序而產(chǎn)生的網(wǎng)絡抖動問題。其中T1、T2的值可以根據(jù)實際網(wǎng)絡帶寬等條件進行設定。服務器端定時檢查當前視頻流狀態(tài)及連接數(shù)量來判斷是否采用為每個連接獨立分配緩存的方式,來解決網(wǎng)絡抖動的問題。 本發(fā)明的方法應用于圖1所示的結(jié)構(gòu)中,η個客戶訪問端訪問前端設備服務器,通過TCP/IP協(xié)議傳輸數(shù)據(jù)包。當C*L小于或等于Tl時,采用一個公共的環(huán)形緩沖區(qū)A存放待發(fā)送碼流,如圖2所示的公共環(huán)形緩沖區(qū)示意圖。圖3為多訪問端獨立分配環(huán)形緩沖區(qū)示意圖。更進一步地,上述步驟I具體還包括服務器對視頻數(shù)據(jù)進行實時采集,并進行H264編碼后將碼流以幀為單位寫入環(huán)形緩沖區(qū)。H264編碼是視頻數(shù)據(jù)常用的編碼方式,本發(fā)明可以用于視頻數(shù)據(jù)的處理,目前高清的視頻數(shù)據(jù)量比較大,在存在多個客戶端同時訪問服務器的情況下容易產(chǎn)生網(wǎng)絡抖動,采用本發(fā)明的技術(shù)方案則有效地去除了網(wǎng)絡抖動。圖像幀為單位存放到發(fā)送數(shù)據(jù)緩沖區(qū),發(fā)送緩沖區(qū)以環(huán)形方式組織,保證數(shù)據(jù)的實時性。本發(fā)明的技術(shù)方案提高了視頻監(jiān)控系統(tǒng)整體抗干擾能力,為終端用戶提供較好的視頻圖像質(zhì)量。更進一步地,上述步驟2具體還包括服務器對TCP端口進行監(jiān)聽,并將視頻數(shù)據(jù)包通過TCP報文分發(fā)給客戶端。Transmission Control Protocol傳輸控制協(xié)議,簡稱TCP,是一種面向連接(連接導向)的、可靠的、基于字節(jié)流的運輸層通信協(xié)議。在簡化的計算機網(wǎng)絡OSI模型中,它完成第四層傳輸層所指定的功能。采用基于TCP傳輸控制協(xié)議,提高了數(shù)據(jù)傳輸?shù)目煽啃裕WC每幀數(shù)據(jù)到達的完整性以及有序性。更進一步地,上述服務器端為B/S或者C/S架構(gòu)。上述兩種結(jié)構(gòu)都可以實現(xiàn)本發(fā)明的多個客戶端同時訪問服務器,提高了本發(fā)明的通用性,B/S或者C/S的架構(gòu)均可以一對一或者多對一的方式進行通信,使得本發(fā)明可以應用于不同架構(gòu)的系統(tǒng)中。更進一步地,上述方法還包括,每一個環(huán)形緩沖區(qū)對應一個客戶端。采用一個環(huán)形緩沖區(qū)對應一個客戶端的方式,使得服務器直接根據(jù)連接的客戶端的個數(shù)分配對應個數(shù)的環(huán)形緩沖區(qū),方便了系統(tǒng)的實現(xiàn),每一個客戶端對應一個環(huán)形緩沖區(qū),也進一步去除了網(wǎng)絡抖動。通過在服務器端為每個訪問的客戶端獨立分配內(nèi)存,這樣使得為每個訪問端的碼流傳輸具有獨立性,防止了丟包和亂序等現(xiàn)象,進一步使得去除抖動的效果更好。更進一步地,上述方法還包括定期執(zhí)行步驟2中的服務器對端口進行監(jiān)聽并記錄當前客戶端連接數(shù)L,并根據(jù)當前碼流碼率大小C和當前客戶端連接數(shù)L確定環(huán)形緩沖區(qū)的個數(shù)。在網(wǎng)絡狀態(tài)中,連接數(shù)和當前碼流大小是隨時變化的,服務器端隨時檢測當前視頻流狀態(tài),并根據(jù)客戶端連接數(shù)L進行判斷,如果滿足一定閾值,則為訪問端新分配環(huán)形緩沖區(qū),用于視頻流的獨立傳輸,如果不是,則恢復使用公共環(huán)形緩沖區(qū)。兩種方式隨時可以靈活切換,便于系統(tǒng)的實現(xiàn),在數(shù)據(jù)量相對較小,客戶端數(shù)量較少的時候選擇只建立一個公共的環(huán)形緩沖區(qū),在數(shù)據(jù)量相對較大,客戶端數(shù)量達到一定閾值的時候,比如,客戶端數(shù)量達到100的時候,就可以為新的客戶端分配新的環(huán)形緩沖區(qū),閾值的設定根據(jù)網(wǎng)絡的帶寬等進行綜合考量。更進一步地,上述環(huán)形緩沖區(qū)通過鏈表實現(xiàn),環(huán)形緩沖區(qū)設置讀指針和寫指針,所述寫指針用于將碼流以幀為單位寫入環(huán)形緩沖區(qū),所述讀指針用于將數(shù)據(jù)幀從環(huán)形緩沖區(qū)中讀出。例如,定義兩個讀寫指針分別為Pread/Pwrite,在完成緩沖區(qū)的初始化以后讀寫指針重合。工作過程中,如果Pread不等于Pwrite,那么輸出當前Pread指向的內(nèi)容,并將Pread移到下一個節(jié)點,否則返回無數(shù)據(jù)狀態(tài)。如果Pwrite的下一個節(jié)點不是Pread,那么將數(shù)據(jù)寫入Pwrite指向節(jié)點的數(shù)據(jù)緩沖部分,并將Pwrite移向下一個節(jié)點。更進一步地,如果寫指針的的下一個節(jié)點是讀指針,則先將讀指針指向下一個節(jié)點,同時將數(shù)據(jù)寫入寫指針的指向節(jié)點的數(shù)據(jù)緩沖部分,最后將寫指針指向下一個節(jié)點。采用上述覆蓋舊數(shù)據(jù)的寫入方式用于確保緩沖區(qū)數(shù)據(jù)的實時性。更進一步地,當一個環(huán)形緩沖區(qū)對應至少兩個客戶端時,在某一幀發(fā)送給了所有客戶端之后,再移動讀指針至下一個節(jié)點。以此保證每個視頻連接所接收數(shù)據(jù)幀的完整性。本發(fā)明還公開了一種實現(xiàn)去除網(wǎng)絡抖動的系統(tǒng),其具體包括服務器端、N個客戶端,所述服務器端用于進行數(shù)據(jù)采集并編碼后將碼流寫入環(huán)形緩沖區(qū),并記錄當前碼流碼率大小C ;服務器對端口進行監(jiān)聽并記錄當前客戶端連接數(shù)L,并根據(jù)當前碼流碼率大小C和當前客戶端連接數(shù)L進行判斷,當C*L小于或等于Tl時,采用一個公共的環(huán)形緩沖區(qū)A存放待發(fā)送碼流,所有的客戶端從公共的環(huán)形緩沖區(qū)A中讀取數(shù)據(jù);當(札大于Tl時,為新的客戶端建立新的環(huán)形緩沖區(qū)B,新的客戶端從新的環(huán)形緩沖區(qū)B中讀取數(shù)據(jù);依次類推,當C*L-T1大于T2時,為最新的客戶端建立最新的環(huán)形緩沖區(qū)C,最新的客戶端從最新的環(huán)形緩沖區(qū)C中讀取數(shù)據(jù);其中Tl、T2為負載閾值;所述客戶端用于從分配的環(huán)形緩沖區(qū)中讀取數(shù)據(jù)。上述的實施例中所 給出的系數(shù)和參數(shù),是提供給本領域的技術(shù)人員來實現(xiàn)或使用本發(fā)明的,本發(fā)明并不限定僅取前述公開的數(shù)值,在不脫離本發(fā)明的發(fā)明思想的情況下,本領域的技術(shù)人員可以對上述實施例作出種種修改或調(diào)整,因而本發(fā)明的保護范圍并不被上述實施例所限,而應該是符合權(quán)利要求書提到的創(chuàng)新性特征的最大范圍。
權(quán)利要求
1.一種去除網(wǎng)絡抖動的方法,其具體包含以下步驟1.服務器進行數(shù)據(jù)采集并編碼后將碼流寫入環(huán)形緩沖區(qū),并記錄當前碼流碼率大小C ;2.服務器對端口進行監(jiān)聽并記錄當前客戶端連接數(shù)L,并根據(jù)當前碼流碼率大小C和當前客戶端連接數(shù)L進行判斷,當C*L小于或等于Tl時,采用一個公共的環(huán)形緩沖區(qū)A存放待發(fā)送碼流,所有的客戶端從公共的環(huán)形緩沖區(qū)A中讀取數(shù)據(jù);當OL大于Tl時,為新的客戶端建立新的環(huán)形緩沖區(qū)B,新的客戶端從新的環(huán)形緩沖區(qū)B中讀取數(shù)據(jù);依次類推,當C*L-T1大于T2時,為最新的客戶端建立最新的環(huán)形緩沖區(qū)C,最新的客戶端從最新的環(huán)形緩沖區(qū)C中讀取數(shù)據(jù);其中T1、T2為負載閾值;3.客戶端從分配的環(huán)形緩沖區(qū)中讀取數(shù)據(jù)。
2.如權(quán)利要求1所述的一種去除網(wǎng)絡抖動的方法,其特征在于所述步驟I具體還包括服務器對視頻數(shù)據(jù)進行實時采集,并進行Η264編碼后將碼流以幀為單位寫入環(huán)形緩沖區(qū)。
3.如權(quán)利要求1所述的去除網(wǎng)絡抖動的方法,其特征在于所述步驟2具體還包括服務器對TCP端口進行監(jiān)聽,并將視頻數(shù)據(jù)包通過TCP報文分發(fā)給客戶端。
4.如權(quán)利要求1所述的去除網(wǎng)絡抖動的方法,其特征在于所述服務器端為B/S或者C/S架構(gòu)。
5.如權(quán)利要求1所述的去除網(wǎng)絡抖動的方法,其特征在于所述方法還包括,每一個環(huán)形緩沖區(qū)對應一個客戶端。
6.如權(quán)利要求1所述的去除網(wǎng)絡抖動的方法,其特征在于所述方法還包括定期執(zhí)行步驟2中的服務器對端口進行監(jiān)聽并記錄當前客戶端連接數(shù)L,并根據(jù)當前碼流碼率大小C和當前客戶端連接數(shù)L確定環(huán)形緩沖區(qū)的個數(shù)。
7.如權(quán)利要求1所述的去除網(wǎng)絡抖動的方法,其特征在于所述環(huán)形緩沖區(qū)通過鏈表實現(xiàn),環(huán)形緩沖區(qū)設置讀指針和寫指針,所述寫指針用于將碼流以幀為單位寫入環(huán)形緩沖區(qū),所述讀指針用于將數(shù)據(jù)幀從環(huán)形緩沖區(qū)中讀出。
8.如權(quán)利要求7所述的去除網(wǎng)絡抖動的方法,其特征在于所述方法還包括如果寫指針的的下一個節(jié)點是讀指針,則先將讀指針指向下一個節(jié)點,同時將數(shù)據(jù)寫入寫指針的指向節(jié)點的數(shù)據(jù)緩沖部分,最后將寫指針指向下一個節(jié)點。
9.如權(quán)利要求1所述的去除網(wǎng)絡抖動的方法,其特征在于所述方法還包括當一個環(huán)形緩沖區(qū)對應至少兩個客戶端時,在某一幀發(fā)送給了所有客戶端之后,再移動讀指針至下一個節(jié)點。
10.一種實現(xiàn)權(quán)利要求1所述方法的系統(tǒng),其特征在于具體包括服務器端、至少一個客戶端,所述服務器端用于進行數(shù)據(jù)采集并編碼后將碼流寫入環(huán)形緩沖區(qū),并記錄當前碼流碼率大小C ;服務器對端口進行監(jiān)聽并記錄當前客戶端連接數(shù)L,并根據(jù)當前碼流碼率大小C和當前客戶端連接數(shù)L進行判斷,當C*L小于或等于Tl時,采用一個公共的環(huán)形緩沖區(qū)A存放待發(fā)送碼流,所有的客戶端從公共的環(huán)形緩沖區(qū)A中讀取數(shù)據(jù);當(札大于Tl時,為新的客戶端建立新的環(huán)形緩沖區(qū)B,新的客戶端從新的環(huán)形緩沖區(qū)B中讀取數(shù)據(jù);依次類推,當C*L-T1大于T2時,為最新的客戶端建立最新的環(huán)形緩沖區(qū)C,最新的客戶端從最新的環(huán)形緩沖區(qū)C中讀取數(shù)據(jù);其中Tl、T2為負載閾值;所述客戶端用于從分配的環(huán)形緩沖區(qū)中讀取數(shù)據(jù)。
全文摘要
本發(fā)明涉及網(wǎng)絡通信領域,本發(fā)明公開了一種實現(xiàn)去除網(wǎng)絡抖動的方法及系統(tǒng),其具體包括服務器端、N個客戶端,所述服務器端用于進行數(shù)據(jù)采集并編碼后將碼流寫入環(huán)形緩沖區(qū),并記錄當前碼流碼率大小C;服務器對端口進行監(jiān)聽并記錄當前客戶端連接數(shù)L,并根據(jù)當前碼流碼率大小和當前客戶端連接數(shù)L進行判斷采用一個公共的環(huán)形緩沖區(qū)A存放待發(fā)送碼流還是為新的客戶端建立新的環(huán)形緩沖區(qū)。通過在服務器端為新的訪問點建立動態(tài)內(nèi)存,有效提高視頻傳輸?shù)目煽啃?,解決了視頻網(wǎng)絡傳輸抖動的問題。
文檔編號H04L12/803GK103036808SQ201210536508
公開日2013年4月10日 申請日期2012年12月13日 優(yōu)先權(quán)日2012年12月13日
發(fā)明者孟宏博, 李汶隆, 董浩, 劉念林 申請人:四川九洲電器集團有限責任公司