基于tcp的無壓縮高清圖像實(shí)時(shí)傳輸方法
【專利摘要】本發(fā)明屬于光電產(chǎn)品應(yīng)用【技術(shù)領(lǐng)域】,具體涉及一種基于TCP的無壓縮高清圖像實(shí)時(shí)傳輸方法。該方法基于TCP協(xié)議,在發(fā)送端多個(gè)端口分別建立線程,每個(gè)線程發(fā)送不同的圖像幀,即第1個(gè)線程發(fā)送圖像的幀數(shù)為第1、1+N、……,第二個(gè)線程發(fā)送圖像的幀數(shù)為第2、2+N、……,第N個(gè)線程發(fā)送圖像的幀數(shù)為第N、2N、……,在接收端對應(yīng)的端口分別創(chuàng)建接收線程接收圖像數(shù)據(jù);所述發(fā)送端采用環(huán)形隊(duì)列的數(shù)據(jù)結(jié)構(gòu)。根據(jù)本發(fā)明進(jìn)行發(fā)送端和接收端程序設(shè)計(jì),建立文件記錄發(fā)送端的發(fā)送幀數(shù)和接收端的接收幀數(shù);通過分析:接收端的頻率與相機(jī)標(biāo)準(zhǔn)頻率基本持平,接收端和發(fā)送端的圖像基本保持同步;在運(yùn)行1.5個(gè)小時(shí)之后,接收端和發(fā)送端的時(shí)間差保持在100ms之內(nèi),同時(shí)滿足處理要求。
【專利說明】基于TCP的無壓縮高清圖像實(shí)時(shí)傳輸方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于光電產(chǎn)品應(yīng)用【技術(shù)領(lǐng)域】,具體涉及一種基于TCP的無壓縮高清圖像實(shí)時(shí)傳輸方法。
【背景技術(shù)】
[0002]數(shù)字高清監(jiān)控的出現(xiàn)是安防IT化真正開始的一個(gè)標(biāo)志。相對于傳統(tǒng)的監(jiān)控系統(tǒng),數(shù)字高清監(jiān)控的技術(shù)優(yōu)勢明顯,是一種將計(jì)算機(jī)數(shù)字圖像處理與傳輸技術(shù)應(yīng)用到圖像監(jiān)控領(lǐng)域的高科技產(chǎn)品。高清意味著高帶寬,而高清監(jiān)控在傳輸這一環(huán)節(jié)往往受到帶寬的影響。
[0003]目前,視頻監(jiān)控系統(tǒng)的傳輸技術(shù)主要有視頻基帶傳輸、微波傳輸、雙絞線平衡傳輸、網(wǎng)絡(luò)傳輸和光纖傳輸?shù)葌鬏敺绞健F渲?,視頻基帶傳輸距離非常短;微波傳輸則受環(huán)境影響比較大;雙絞線平衡傳輸只適合Ikm以內(nèi)的監(jiān)控傳輸,且只能傳輸一路圖像;網(wǎng)絡(luò)傳輸易受網(wǎng)絡(luò)帶寬的影響;光纖傳輸則比較適合長距離傳輸,但目前大多數(shù)設(shè)備不直接支持光纖接口。
[0004]隨著目前網(wǎng)絡(luò)傳 輸技術(shù)的迅猛發(fā)展,通信網(wǎng)絡(luò)也逐漸朝1000M甚至10000M方向發(fā)展,解決大數(shù)據(jù)量的數(shù)據(jù)傳輸問題成為可能。目前利用網(wǎng)絡(luò)進(jìn)行大數(shù)據(jù)傳輸?shù)难芯慷际轻槍嚎s視頻、音頻傳輸進(jìn)行的研究;對高清圖像的傳輸也主要是基于壓縮后再傳輸,在終端進(jìn)行顯示或解壓縮后進(jìn)行處理。但在某些場合,鑒于一些終端不具備解壓縮處理的能力,需要對無壓縮的高清圖像實(shí)時(shí)傳輸,采用常規(guī)的傳輸方式無法解決。
【發(fā)明內(nèi)容】
[0005]本發(fā)明的目的在于提供一種基于TCP的無壓縮高清圖像實(shí)時(shí)傳輸方法,以克服現(xiàn)有技術(shù)存在的上述不足。
[0006]為達(dá)到上述目的,本發(fā)明所采取的技術(shù)方案為:
[0007]—種基于TCP的無壓縮高清圖像實(shí)時(shí)傳輸方法,該方法基于TCP協(xié)議,在發(fā)送端多個(gè)端口分別建立線程,每個(gè)線程發(fā)送不同的圖像幀,即第I個(gè)線程發(fā)送圖像的幀數(shù)為第1、1+N、……,第二個(gè)線程發(fā)送圖像的幀數(shù)為第2、2+N、……,第N個(gè)線程發(fā)送圖像的幀數(shù)為第N、2N、……,在接收端對應(yīng)的端口分別創(chuàng)建接收線程接收圖像數(shù)據(jù)。
[0008]所述發(fā)送端采用環(huán)形隊(duì)列的數(shù)據(jù)結(jié)構(gòu)。
[0009]該方法包括如下步驟:
[0010]發(fā)送端作為TCP連接的客戶端,接收端作為TCP連接的服務(wù)器端;發(fā)送端的方法如下:
[0011]第一步:發(fā)送端線程的建立及圖像數(shù)據(jù)存儲
[0012](I)在發(fā)送端建立N個(gè)循環(huán)隊(duì)列,每個(gè)循環(huán)隊(duì)列有L塊空間;
[0013](2)根據(jù)到來的圖像幀號M對N取模的結(jié)果,記為Qldx,選擇序號為QIdx(I ( QIdx ( N)的循環(huán)隊(duì)列;
[0014](3)在序號為QIdx的循環(huán)隊(duì)列中查看存儲指示指針當(dāng)前指向的空間塊及下一個(gè)空間塊,根據(jù)下一個(gè)空間塊的使用情況,判斷到來的圖像如何進(jìn)行存儲:
[0015]如果下一個(gè)空間塊中的圖像數(shù)據(jù)尚未發(fā)送完畢,則為到來的圖像在當(dāng)前空間塊開辟內(nèi)存,并將其追加到當(dāng)前空間塊的尾部;
[0016]如果下一個(gè)空間塊為空,則將存儲指示指針指向下一個(gè)空間塊,即下一個(gè)空間塊成為“當(dāng)前”空間塊,在“當(dāng)前”空間塊為到來的圖像開辟內(nèi)存空間,并將圖像存儲到“當(dāng)前”空間塊;
[0017](4)在第m(l < m < N)幀圖像到來時(shí),創(chuàng)建第m個(gè)發(fā)送線程;
[0018](5)重復(fù)步驟(2)~(4);
[0019]第二步:圖像數(shù)據(jù)發(fā)送
[0020]第k(l≤k≤N)個(gè)線程發(fā)送數(shù)據(jù)的過程為:
[0021 ] (I)第k個(gè)發(fā)送線程在約定的端口上向第k個(gè)接收線程發(fā)送連接請求,建立連接成功后轉(zhuǎn)(2);
[0022](2)在第k個(gè)循環(huán)隊(duì)列中,根據(jù)發(fā)送指示指針指向的空間塊,發(fā)送空間塊
[0023]的中數(shù)據(jù),循環(huán)檢測是否發(fā)送完畢;
[0024](3)未發(fā)送完畢,轉(zhuǎn)(2);
[0025](4)發(fā)送完畢,釋放當(dāng)前空間塊中占用的內(nèi)存空間,并將發(fā)送指示指針指向下一個(gè)空間塊,轉(zhuǎn)(2);
[0026]接收端的方法設(shè)計(jì)如下:
[0027](I)建立N個(gè)接收線程;
[0028](2)第k(l <k<N)個(gè)接收線程在和發(fā)送端約定的端口,等待第k個(gè)發(fā)送線程的連接請求,建立連接成功后轉(zhuǎn)(3);
[0029](3)接收線程監(jiān)聽數(shù)據(jù)的到來,如果有數(shù)據(jù)到來,則將其保存起來,并根據(jù)已接收的數(shù)據(jù)長度和當(dāng)前接收數(shù)據(jù)的長度,進(jìn)行判斷;
[0030](4)如果已接收的數(shù)據(jù)長度加上當(dāng)前接收數(shù)據(jù)的長度不足一幀圖像的長度,則繼續(xù)接收后續(xù)數(shù)據(jù),轉(zhuǎn)(3);否則轉(zhuǎn)(5);
[0031](5)如果已接收的數(shù)據(jù)長度加上當(dāng)前接收數(shù)據(jù)的長度等于一幀圖像的長度,轉(zhuǎn)(7);否則轉(zhuǎn)(6);
[0032](6)如果已接收的數(shù)據(jù)長度加上當(dāng)前接收數(shù)據(jù)的長度超過一幀圖像的長度,則從當(dāng)前接收的數(shù)據(jù)中截取部分?jǐn)?shù)據(jù),與已接收的數(shù)據(jù)共同組成一幀圖像;剩余部分保存起來,轉(zhuǎn)⑴;
[0033](7)對接收到的圖像進(jìn)行處理,轉(zhuǎn)⑶。
[0034]本發(fā)明所取得的有益效果為:根據(jù)本發(fā)明所述基于TCP的無壓縮高清圖像實(shí)時(shí)傳輸方法,進(jìn)行發(fā)送端和接收端的程序設(shè)計(jì),采用加拿大Prosilica GC1600CH相機(jī)(1620X 1220020Hz)進(jìn)行驗(yàn)證;程序運(yùn)行后,建立文件記錄發(fā)送端的發(fā)送幀數(shù)和接收端的接收幀數(shù);通過分析記錄的數(shù)據(jù),接收端的頻率與相機(jī)標(biāo)準(zhǔn)頻率基本持平,接收端和發(fā)送端的圖像基本保持同步;在運(yùn)行1.5個(gè)小時(shí)之后,接收端和發(fā)送端的時(shí)間差保持在IOOms之內(nèi),在視覺上基本看不出來差別,同時(shí)滿足處理要求。
【專利附圖】
【附圖說明】[0035]圖1為本發(fā)明所述基于TCP的無壓縮高清圖像實(shí)時(shí)傳輸方法原理圖;
[0036]圖2為下一個(gè)空間塊中的數(shù)據(jù)未發(fā)送完畢的情況示意圖;
[0037]圖3為下一個(gè)空間塊為空的情況示意圖;
[0038]圖4為數(shù)字高清圖像發(fā)送端和接收端連接示意圖。
【具體實(shí)施方式】
[0039]下面結(jié)合附圖和具體實(shí)施例對本發(fā)明進(jìn)行詳細(xì)說明。
[0040]如圖1所示,本發(fā)明所述基于TCP的無壓縮高清圖像實(shí)時(shí)傳輸方法原理為:
[0041]本方法采用基于可靠傳輸?shù)腡CP協(xié)議,在發(fā)送端多個(gè)端口分別建立線程,每個(gè)線程發(fā)送不同的圖像幀,即第I個(gè)線程發(fā)送圖像的幀數(shù)為第1、1+N、……,第二個(gè)線程發(fā)送圖像的幀數(shù)為第2、2+N、……,第N個(gè)線程發(fā)送圖像的幀數(shù)為第N、2N、……,在接收端對應(yīng)的端口分別創(chuàng)建接收線程接收圖像數(shù)據(jù)并處理;考慮到網(wǎng)絡(luò)狀態(tài),以及發(fā)送端和接收端的能力,為了不丟失數(shù)據(jù),發(fā)送端采用環(huán)形隊(duì)列的數(shù)據(jù)結(jié)構(gòu),使來不及發(fā)送出去的數(shù)據(jù)保存起來而不被丟棄,又不至于開辟的空間無限擴(kuò)張而導(dǎo)致系統(tǒng)崩潰。
[0042]基于上述原理,本發(fā)明所述基于TCP的無壓縮高清圖像實(shí)時(shí)傳輸方法包括如下步驟:
[0043]發(fā)送端作為TCP連接的客戶端,接收端作為TCP連接的服務(wù)器端;發(fā)送端的方法如下:
[0044]第一步:發(fā)送端線程的建立及圖像數(shù)據(jù)存儲
[0045](I)在發(fā)送端建立N個(gè)循環(huán)隊(duì)列,每個(gè)循環(huán)隊(duì)列有L塊空間;
[0046](2)根據(jù)到來的圖像幀號M對N取模的結(jié)果,記為Qldx,選擇序號為QIdx(I ( QIdx ( N)的循環(huán)隊(duì)列;
[0047](3)在序號為QIdx的循環(huán)隊(duì)列中查看存儲指示指針當(dāng)前指向的空間塊及下一個(gè)空間塊,根據(jù)下一個(gè)空間塊的使用情況,判斷到來的圖像如何進(jìn)行存儲:
[0048]如果下一個(gè)空間塊中的圖像數(shù)據(jù)尚未發(fā)送完畢,如圖2所示,圖中黑色的空間塊表示數(shù)據(jù)尚未發(fā)送完畢的空間塊,則為到來的圖像在當(dāng)前空間塊開辟內(nèi)存,并將其追加到當(dāng)前空間塊的尾部;
[0049]如果下一個(gè)空間塊為空,如圖3所示,圖中帶網(wǎng)格的黑色的空間塊表示數(shù)據(jù)為空的空間塊,則將存儲指示指針指向下一個(gè)空間塊,即下一個(gè)空間塊成為“當(dāng)前”空間塊,在“當(dāng)前”空間塊為到來的圖像開辟內(nèi)存空間,并將圖像存儲到“當(dāng)前”空間塊;
[0050](4)在第m(l ≤ m ≤N)幀圖像到來時(shí),創(chuàng)建第m個(gè)發(fā)送線程;
[0051](5)重復(fù)步驟(2)~(4);
[0052]第二步:圖像數(shù)據(jù)發(fā)送
[0053]第k(l≤k≤N)個(gè)線程發(fā)送數(shù)據(jù)的過程為:
[0054](I)第k個(gè)發(fā)送線程在約定的端口上向第k個(gè)接收線程發(fā)送連接請求,建立連接成功后轉(zhuǎn)(2);
[0055](3)在第k個(gè)循環(huán)隊(duì)列中,根據(jù)發(fā)送指示指針指向的空間塊,發(fā)送空間塊的中數(shù)據(jù),循環(huán)檢測是否發(fā)送完畢;
[0056](3)未發(fā)送完畢,轉(zhuǎn)(2);[0057](4)發(fā)送完畢,釋放當(dāng)前空間塊中占用的內(nèi)存空間,并將發(fā)送指示指針指向下一個(gè)空間塊,轉(zhuǎn)(2);
[0058]接收端的方法設(shè)計(jì)如下:
[0059]( I)建立N個(gè)接收線程;
[0060](2)第k(l SkSN)個(gè)接收線程在和發(fā)送端約定的端口,等待第k個(gè)發(fā)送線程的連接請求,建立連接成功后轉(zhuǎn)(3);
[0061](3)接收線程監(jiān)聽數(shù)據(jù)的到來,如果有數(shù)據(jù)到來,則將其保存起來,并根據(jù)已接收的數(shù)據(jù)長度和當(dāng)前接收數(shù)據(jù)的長度,進(jìn)行判斷;
[0062](4)如果已接收的數(shù)據(jù)長度加上當(dāng)前接收數(shù)據(jù)的長度不足一幀圖像的長度,則繼續(xù)接收后續(xù)數(shù)據(jù),轉(zhuǎn)(3);否則轉(zhuǎn)(5);
[0063](5)如果已接收的數(shù)據(jù)長度加上當(dāng)前接收數(shù)據(jù)的長度等于一幀圖像的長度,轉(zhuǎn)
(7);否則轉(zhuǎn)(6);
[0064](6)如果已接收的數(shù)據(jù)長度加上當(dāng)前接收數(shù)據(jù)的長度超過一幀圖像的長度,則從當(dāng)前接收的數(shù)據(jù)中截取部分?jǐn)?shù)據(jù),與已接收的數(shù)據(jù)共同組成一幀圖像;剩余部分保存起來,轉(zhuǎn)⑴;
[0065](7)對接收到的圖像進(jìn)行處理,轉(zhuǎn)⑶。
[0066]在發(fā)送計(jì)算機(jī)上,根據(jù)上述方法設(shè)計(jì)客戶端程序;在圖像接收端上,根據(jù)上述方法設(shè)計(jì)服務(wù)器端程序,按照圖4所示連接各設(shè)備,將各設(shè)備加電即可進(jìn)行工作,各設(shè)備間通過千兆網(wǎng)線連接。
【權(quán)利要求】
1.一種基于TCP的無壓縮高清圖像實(shí)時(shí)傳輸方法,其特征在于:該方法基于TCP協(xié)議,在發(fā)送端多個(gè)端口分別建立線程,每個(gè)線程發(fā)送不同的圖像幀,即第I個(gè)線程發(fā)送圖像的幀數(shù)為第1、1+N、……,第二個(gè)線程發(fā)送圖像的幀數(shù)為第2、2+N、……,第N個(gè)線程發(fā)送圖像的幀數(shù)為第N、2N、......,在接收端對應(yīng)的端口分別創(chuàng)建接收線程接收圖像數(shù)據(jù)。
2.根據(jù)權(quán)利要求1所述的基于TCP的無壓縮高清圖像實(shí)時(shí)傳輸方法,其特征在于:所述發(fā)送端采用環(huán)形隊(duì)列的數(shù)據(jù)結(jié)構(gòu)。
3.根據(jù)權(quán)利要求1或2所述的基于TCP的無壓縮高清圖像實(shí)時(shí)傳輸方法,其特征在于:該方法包括如下步驟: 發(fā)送端作為TCP連接的客戶端,接收端作為TCP連接的服務(wù)器端;發(fā)送端的方法如下: 第一步:發(fā)送端線程的建立及圖像數(shù)據(jù)存儲 (1)在發(fā)送端建立N個(gè)循環(huán)隊(duì)列,每個(gè)循環(huán)隊(duì)列有L塊空間; (2)根據(jù)到來的圖像幀號M對N取模的結(jié)果,記為Qldx,選擇序號為QIdx(I ( QIdx ( N)的循環(huán)隊(duì)列; (3)在序號為QIdx的循環(huán)隊(duì)列中查看存儲指示指針當(dāng)前指向的空間塊及下一個(gè)空間塊,根據(jù)下一個(gè)空間塊的使用情況,判斷到來的圖像如何進(jìn)行存儲: 如果下一個(gè)空間塊中的圖像數(shù)據(jù)尚未發(fā)送完畢,則為到來的圖像在當(dāng)前空間塊開辟內(nèi)存,并將其追加到當(dāng)前空間塊的尾部; 如果下一個(gè)空間塊為空,則將存儲指示指針指向下一個(gè)空間塊,即下一個(gè)空間塊成為“當(dāng)前”空間塊,在“當(dāng)前”空間塊為到來的圖像開辟內(nèi)存空間,并將圖像存儲到“當(dāng)前”空間塊;` (4)在第m(l^ m ^ N)幀圖像到來時(shí),倉ll建第m個(gè)發(fā)送線程; (5)重復(fù)步驟(2)~(4); 第二步:圖像數(shù)據(jù)發(fā)送 第k(l < k < N)個(gè)線程發(fā)送數(shù)據(jù)的過程為: (1)第k個(gè)發(fā)送線程在約定的端口上向第k個(gè)接收線程發(fā)送連接請求,建立連接成功后轉(zhuǎn)⑵; (2)在第k個(gè)循環(huán)隊(duì)列中,根據(jù)發(fā)送指示指針指向的空間塊,發(fā)送空間塊的中數(shù)據(jù),循環(huán)檢測是否發(fā)送完畢; (3)未發(fā)送完畢,轉(zhuǎn)(2); (4)發(fā)送完畢,釋放當(dāng)前空間塊中占用的內(nèi)存空間,并將發(fā)送指示指針指向下一個(gè)空間塊,轉(zhuǎn)(2); 接收端的方法設(shè)計(jì)如下: (1)建立N個(gè)接收線程; (2)第k(l< k < N)個(gè)接收線程在和發(fā)送端約定的端口,等待第k個(gè)發(fā)送線程的連接請求,建立連接成功后轉(zhuǎn)(3); (3)接收線程監(jiān)聽數(shù)據(jù)的到來,如果有數(shù)據(jù)到來,則將其保存起來,并根據(jù)已接收的數(shù)據(jù)長度和當(dāng)前接收數(shù)據(jù)的長度,進(jìn)行判斷; (4)如果已接收的數(shù)據(jù)長度加上當(dāng)前接收數(shù)據(jù)的長度不足一幀圖像的長度,則繼續(xù)接收后續(xù)數(shù)據(jù),轉(zhuǎn)(3);否則轉(zhuǎn)(5);(5)如果已接收的數(shù)據(jù)長度加上當(dāng)前接收數(shù)據(jù)的長度等于一幀圖像的長度,轉(zhuǎn)(7);否則轉(zhuǎn)(6); (6)如果已接收的數(shù)據(jù)長度加上當(dāng)前接收數(shù)據(jù)的長度超過一幀圖像的長度,則從當(dāng)前接收的數(shù)據(jù)中 截取部分?jǐn)?shù)據(jù),與已接收的數(shù)據(jù)共同組成一幀圖像;剩余部分保存起來,轉(zhuǎn)(7); (7 )對接收到的圖像進(jìn)行處理,轉(zhuǎn)(3 )。
【文檔編號】H04N7/18GK103686067SQ201210362172
【公開日】2014年3月26日 申請日期:2012年9月25日 優(yōu)先權(quán)日:2012年9月25日
【發(fā)明者】賈雨生, 王楠, 郭瑞熊 申請人:中國航天科工集團(tuán)第二研究院二〇七所