局域網(wǎng)視頻傳輸_第1頁
局域網(wǎng)視頻傳輸_第2頁
局域網(wǎng)視頻傳輸_第3頁
局域網(wǎng)視頻傳輸_第4頁
局域網(wǎng)視頻傳輸_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

千里之行,始于腳下。第2頁/共2頁精品文檔推薦局域網(wǎng)視頻傳輸利用VC++實現(xiàn)局域網(wǎng)實時視頻傳輸(圖)

平安中國.更新時光:2023-05-2700:32:16責任編輯:ShellExp

熱點:

方式,允許視頻、音頻對象的交互;具有很強的容錯能力等優(yōu)點。本文采納Di編解碼器對視頻舉行編碼、壓縮,實際上Di=(視頻)MPEG-4+(音頻)MP3。

應用層質量控制技術現(xiàn)在采納的是RTP/RTCP協(xié)議,以確保視頻流在網(wǎng)絡中低時延、高質量地傳輸。RTP數(shù)據(jù)傳輸協(xié)議負責音視頻數(shù)據(jù)的流化和負載,RTCP負責RTP數(shù)據(jù)報文的傳輸控制。此協(xié)議是通過客戶端(接收方)反饋網(wǎng)絡的情況,服務器端(發(fā)送方)來調節(jié)信息采集、發(fā)送的速度和壓縮率。但是,對于圖像采集速度固定,需要軟件舉行壓縮、解壓,調節(jié)采集的速度會引起采集的數(shù)據(jù)來不及壓縮而直接丟棄,調節(jié)編碼器的壓縮率需要重新設置編碼器的參數(shù),重啟編碼器,相應的解碼器也要調節(jié),這個過程中需要很長的時光,達不到實時的要求。所以本文沒有采納RTP/RTCP協(xié)議,而是從發(fā)送端動身,實時推斷網(wǎng)絡情況,采納“停等”策略舉行實時傳輸。

網(wǎng)絡通信有兩種協(xié)議TCP和UDP,UDP更適合于網(wǎng)絡環(huán)境下的視頻傳輸,但是它不提供檢錯和糾錯功能,一旦網(wǎng)絡浮現(xiàn)阻塞時,大量的數(shù)據(jù)報文會走失。對于Di編解碼技術,是以幀為單位舉行編解碼的,分為關鍵幀和非關鍵幀。在傳輸過程中,因為壓縮率比較高,只要一幀中錯一比特位,將影響其它幾百甚至幾千的比特位,直接造成圖像的含糊、花屏等現(xiàn)象。惟獨等到下一次關鍵幀的到來才有可能恢復圖像的清楚。為了保證傳輸?shù)恼_性,自己需要在應用層制定協(xié)議。如此一來,UDP的優(yōu)勢蕩然無存。所以本文挑選使用TCP來舉行網(wǎng)絡通信。綜合使用VFW技術、流媒體技術,輔助以“停等”控制策略,較好的解決局域網(wǎng)中實時視頻傳輸簡單引起的重影、顫動、花屏的問題。

實時視頻傳輸實現(xiàn)

為了達到視頻傳輸?shù)膶崟r性,總的思想是最少的發(fā)送冗余信息,最大程度上發(fā)送最新的視頻。

局域網(wǎng)實時視頻傳輸采納服務器/客戶機模式,利用VC++實現(xiàn)。其工作流程如圖1所示。

圖1實時視頻傳輸工作流程

視頻采集采納AVICap從視頻采集卡捕捉視頻圖像,得到的是位圖型式的視頻幀,然后用Di編碼器舉行壓縮,通過Winsock實現(xiàn)壓縮后的視頻數(shù)據(jù)在局域網(wǎng)中的實時傳輸,接收完的數(shù)據(jù)交給Di解碼器解壓,最后實現(xiàn)視頻顯示。

在VC++中,采納VFW技術,客戶端通過capSetCallbackOnFrame()注冊回調函數(shù),當采集卡采集到一幅圖像后,系統(tǒng)就會自動調用回調函數(shù),然后再回調函數(shù)中使用ICSeqCompressFrame()函數(shù)舉行壓縮。然后再通過Winsock將壓縮后的數(shù)據(jù)發(fā)送到服務器端。服務器端接收完一幀以后,交給ICDecompress()解壓,最后用SetDIBitsToDevice()將圖像顯示出來。

1、視頻幀的組建

視頻采集的數(shù)據(jù)是位圖型式的視頻幀,Di編碼器壓縮以后形成以幀為格式的Mpeg4流。Di解碼器也是以幀的格式解壓。所以提出以幀為單位發(fā)送視頻數(shù)據(jù)流。為了在接收端能夠便利地提取出一幀,提出如圖2所示的格式組建幀。

幀開頭標志幀大小幀編號幀類型幀數(shù)據(jù)

圖2視頻幀格式

完整的一幀由5個字段組成,各個字段的意義如下:幀開頭標志,標志著一幀地開頭,占用4個字節(jié)的空間。不妨設為0xffffffff。幀大小,表示囫圇幀的大小,包括5個字段的大小,占用4個字節(jié)的空間。幀編號,表示幀的挨次編號,占用4個字節(jié)的空間。幀類型,標志此幀是否是關鍵幀,占用1個字節(jié)的空間。幀數(shù)據(jù),存放壓縮后一幀的完整數(shù)據(jù)。

2、視頻幀的發(fā)送

實時視頻傳輸為了實時,要不斷地將壓縮好的數(shù)據(jù)發(fā)送到接受端。所以在發(fā)送端創(chuàng)建一個線程,特地用來發(fā)送數(shù)據(jù)。同時主線程仍然不停的采集數(shù)據(jù)并舉行壓縮。發(fā)送線程的工作流程如圖3所示。

圖3發(fā)送線程工作流程

不妨假設創(chuàng)建的線程名為sendThread,核心代碼實現(xiàn)如下:

while(1)

{

isOK=true;//預備就緒

SuspendThread(sendThread);//掛起線程

isOK=false;//線程正在發(fā)送數(shù)據(jù)

intlength=frameLength;//待發(fā)數(shù)據(jù)長度

if(length<50000){//推斷數(shù)據(jù)是否正常

intn=0;

intsendCount=0;

線程中發(fā)送的數(shù)據(jù)幀是根據(jù)上一節(jié)中的辦法組建好的數(shù)據(jù)幀。這種辦法能夠保證正在發(fā)送的當前幀能夠完整地到達接收端。

注重此線程中剛開頭或者每當發(fā)送完一幀以后,線程就轉到掛起狀態(tài),等待外界喚醒。這個任務由回調函數(shù)完成,在回調函數(shù)中,判定假如發(fā)送線程預備就緒(處于掛起狀態(tài)),則舉行圖像壓縮,然后喚醒線程發(fā)送壓縮完的數(shù)據(jù),否則直接跳出,等待下一次調用回調函數(shù),這種策略稱之為“停等”策略,在后面有具體介紹。

3、視頻幀的接收

接收端最重要的是從接受的數(shù)據(jù)流中提取出完整的一幀。辦法的思想是:首先從數(shù)據(jù)

流中尋覓幀開頭標志,再從緊挨后面的數(shù)據(jù)中提取出幀的大小,然后再從接收緩沖區(qū)中讀

入該幀剩余的數(shù)據(jù)。再尋覓下一幀的開頭標志,如此往復。圖4是接收端的工作流程。

同樣接收端創(chuàng)建一個線程特地用來執(zhí)行數(shù)據(jù)接收。不妨假設線程名為recThread,核心代碼實現(xiàn)如下:

以上程序執(zhí)行的結果是將完整的一幀(除幀開頭標志)保存在imageBuf中。

4、“停等”控制策略

假如局域網(wǎng)通信速率很高,而且工作穩(wěn)定,則根據(jù)以上說的辦法舉行實時視頻傳輸,不需要任何控制策略,就可以達到十分好的效果。但是在無數(shù)狀況下,網(wǎng)絡會浮現(xiàn)異樣,這樣會導致數(shù)據(jù)傳輸率顯然下降,造成發(fā)送端數(shù)據(jù)積壓,等待發(fā)送的數(shù)據(jù)不能正常發(fā)出去。此時就要實行一定的策略來控制發(fā)送端,以達到實時性的要求。

上文發(fā)送程序中,變量isOK是用來表示發(fā)送端當前幀有沒有發(fā)完,假如發(fā)完則置為true,同時也表示發(fā)送端預備就緒,可以繼續(xù)發(fā)送數(shù)據(jù),否則為false。那么可以用isOK來通知視頻采集和壓縮線程,假如isOK為true,則可以采集視頻并且壓縮,然后喚醒發(fā)送線程繼續(xù)發(fā)送新來的幀數(shù)據(jù),否則向來等待,直到網(wǎng)絡可以繼續(xù)發(fā)送數(shù)據(jù)(isOK為true)。固然,視頻采集向來不停的舉行,那么當網(wǎng)絡發(fā)生數(shù)據(jù)阻塞時,只要不讓編碼器舉行壓縮則可解決;當網(wǎng)絡恢復正常時,繼續(xù)舉行壓縮傳輸,換句話說,當網(wǎng)絡發(fā)生阻塞時,直接拋棄等待發(fā)送的幀,保證一旦網(wǎng)絡恢復時,發(fā)送最新的壓縮幀。固然要保證一旦有一幀開頭發(fā)送,就要將其徹低發(fā)出。

根據(jù)這樣的“停等”策略舉行實時視頻傳輸,只會帶來一個問題:當網(wǎng)絡質量差時,接收端畫面中的移動目標會浮現(xiàn)眨眼移動的現(xiàn)象。但是這種策略會保證不會浮現(xiàn)重影,顫動,花屏等現(xiàn)象。

結論

本文提出的實時視頻傳輸計劃在100M的局域網(wǎng)、10M局域網(wǎng)和11M無線局域網(wǎng)中舉行了測試。測試時讓一個目標在鏡頭前(發(fā)送端)移動,觀看接收端視頻的顯示。在不同的局域網(wǎng)中舉行了多次測試,每次測試時光從10分鐘到30分鐘不等,并且轉變目標的運動速度舉行試驗。最后將數(shù)據(jù)匯總,得出統(tǒng)計結果。測試結果如表1所示。

表1不同局域網(wǎng)下

溫馨提示

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

評論

0/150

提交評論