999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

Linux下視頻流多播速率控制方法的設計與實現

2008-12-31 00:00:00游小榮顧劍柳
電腦知識與技術 2008年8期

摘要:針對目前流媒體中視頻數據發送速度難以控制的問題,以當前廣泛使用的MPEG2視頻解碼模型為例,設計并實現了一種Linux下視頻流多播速率控制方法。這種方法能夠有效的控制服務器視頻數據的發送速率,具有占用服務器資源少,適應各種網絡要求的優點。經Linux平臺驗證結果表明,傳送視頻數據的網絡速度平穩,未出現視頻數據溢出現象,可以得到良好的視頻效果,具有很好的實用價值。

關鍵詞:視頻流;多播;速率控制;解碼器

中圖分類號:TP37文獻標識碼:A文章編號:1009-3044(2008)08-10ppp-0c

1 引言

隨著網絡、通信等技術的發展,流媒體技術在很多領域都得到了廣泛的應用,例如VOD、電視會議、遠程教育等,而流媒體技術的關鍵技術之一就是流媒體的網絡傳輸技術。一般來說,網絡傳輸方式包括單播、多播和廣播。與網絡單播和廣播技術相比,組播是一種優化使用帶寬的路由技術,允許數據流從一個源或多個源發送到多個目的地。采用組播技術后,應用僅發送每個數據包的一個拷貝給一組要接受信息的計算機,因而組播有助于控制網絡的流量,減少主機的處理量[1]。正是因為組播具有單播、廣播所不具有的優點,而流媒體又有流量大、實時性強的特點,所以組播技術在流媒體技術中得到了廣泛的應用。

從當今市場上來看,主流的流媒體技術產品有三種,分別是Microsoft的Windows Media Techology系統、Real Networks公司的Real System系統以及Apple的Quicktime系統[2]。盡管它們有些產品也具備了組播的功能,但是它們有一個缺點就是必須滿足它們自己的視頻壓縮格式,才能進行流媒體傳送。而本文的目的是只需有視頻的解碼器,就可以開發出適合自身需要的流媒體系統,這樣就可以滿足不同視頻壓縮格式文件網絡傳輸的需要。

如果視頻發送速率沒有得到有效的控制,當發送速率高于正常發送速率時,將會出現如圖1所示的情況,出現許多的馬賽克;當發送速率低于正常發送速率時,解碼器將會因為不能及時的解碼器而出現畫面暫停的現象。目前,視頻組播速率控制研究主要基于三種速率控制手段,即基于發送端的速率控制、基于接收端的速率控制和混合性速率控制的方法。發送端的速率控制方法主要基于反饋信息進行速率調節,可以適用于單播的方式或組播的方式。在基于接受端的速率控制中,發送方不參與速率控制,而由接受方通過增加和減少通道的數量來進行速率的調整。通常,這種方法用于采用可擴展編碼的組播的情況,組播的視頻流分為多層,每個層對應組播樹的一個通道。混合性速率控制的方法,兼有二者的特點,即接受方增加減少通道,而發送方同時根據反饋調整各個通道的速率[3]。

本文設計并實現了一種Linux下視頻流多播速率控制方法。這種方法屬于發送端的速率控制方法,基于實時解碼情況,得到反饋信息,從而實現視頻組播發送速率控制。這種方法以視頻解碼模型為基礎,以MPEG2為例,測試環境為局域網。在此基礎上,采用類比的方法,MPEG2壓縮格式可以推廣到MPEG4、H.263和H.264等視頻壓縮格式;同理,局域網環境也可以推廣到校園網、企業網等網絡環境。

圖1 原圖與發送速率高于正常發送速率的視頻對比圖

2 發送速率控制方法

如圖2所示,為一個局域網環境的連接圖。本方法由發送端來進行數據發送速率的控制,由服務器來完成。客戶端可以用視頻組播接收軟件如VLC、mplayer接收并播放,也可以自己編寫一個解碼器來進行網絡接收和視頻的播放。這種方法包含兩部分內容,分別是負責網絡組播的視頻組播發送程序,另一部分是負責網絡組播接收、視頻解碼、發送速率控制以及發送握手信息等功能。視頻組播發送程序運行服務器上,但用于速率控制的解碼程序可以放在局域網環境的任意一臺服務器或者PC上。

圖2 局域網連接示意圖

下面介紹一下這兩部分程序的工作原理及如何進行協同工作。整個方法的執行過程為:

(1)視頻組播發送程序首先讀取需要發送的一組視頻文件數據;

(2)視頻組播發送程序然后將這部分視頻數據組播至解碼程序;

(3)解碼程序在接收到視頻組播發送程序發送過來的組播數據之后進行解碼;

(4)解碼程序解碼完之后,如果:

①未解完一幀數據,則繼續,跳至5)繼續執行;

②解完一幀數據,判斷是否繼續執行,判斷的依據為:

(當前時間 - 上次顯示的時間) >= (1000000/幀率)… (依據1)

當滿足依據1的時候,則跳至(5)繼續執行,否則:

while((當前時間 - 上次顯示的時間) < 1000000/幀率)

{

執行空指令;

讀取當前時間;

}

注:上述的時間的單位均為微秒,執行空指令的作用為延時作用。

(5) 解碼程序將一個握手信息通過TCP連接發送至視頻組播發送程序;

(6) 視頻組播發送程序在接收到握手信息之后,如果未至視頻文件尾,則繼續讀取一組視頻數據,然后跳至(2)繼續執行,直至讀取視頻文件結束。

3 發送速率控制方法的實現

在上述講到,服務器程序由兩部分程序組成:視頻組播發送程序和MPEG2解碼程序。下面分別詳細介紹這兩部分程序的運行步驟和內容。本方法開發的環境為linux,采用gcc進行編譯,網絡連接圖如圖2所示。

3.1 視頻組播發送程序實現

下面介紹一下視頻組播發送程序的實現步驟:

(1)定義組播地址及端口號,定義發送緩沖區的容量為4KB(因為上述的解碼器每次處理4KB的數據),定義一個TCP連接用的端口號以及網絡的其它一些參數;

(2)建立一個基于UDP連接的組播用的套結字,綁定好相應的端口號;

(3)建立一個基于TCP連接的套結字,用于和解碼程序進行通信,然后進行端口綁定、連接以及監聽;

(4)讀取文件的4KB數據,通過UDP組播發送至解碼程序;

(5)等待解碼程序發送回來的握手信息(如hello信息),如果收到握手信息,重復(4)操作,否則一直等待解碼程序發送過來的握手信息(如hello信息);

(6) 直至文件結束,發送完數據為止。

3.2 解碼程序實現

解碼程序的實現是以開源軟件libmpeg2(http://libmpeg2.sourceforge.net/) 為原型,添加了網絡組播接收、發送速率控制以及發送握手信息功能。后面列出具體的函數名稱為libmpeg2開源軟件中的函數名稱。下面介紹一下解碼程序具體實現的程序流程:

(1)處理程序的輸入參數,調用handle_args()函數;

(2)初始化解碼器參數,給部分參數分配內存,調用mpeg2_init()和mpeg2_malloc_hooks()函數;

(3)判斷視頻的封裝形式:

1)如果是pva文件封裝格式,則調用pva_loop()函數;

2)如果是TS視頻流(一般是衛星電視傳送采取的格式),則調用ts_loop ()函數;

3)如果是PS視頻流(一般是DVD等所采取的格式),則調用ps_loop ()函數;

4)如果是ES純視頻流,則調用es_loop ()函數。

(4)解碼完畢,釋放分配的內存空間。

這里,MPEG2的封裝形式采用PS視頻流,因為這種封裝形式應用非常廣泛,例如VCD中的dat文件,DVD中的vob文件,都是采用PS視頻流結構。下面詳細介紹一下PS視頻流的處理過程及其步驟。

(1)定義組播地址及端口號,定義接收緩沖區的容量為4KB(因為解碼器每次處理4KB的數據,當然這個數據可調),定義一個TCP連接用的端口號以及網絡的其它一些參數;

(2)建立一個基于UDP連接的組播用的數據報套結字,綁定好相應的端口號;

(3)加入多播組;

(4)建立一個基于TCP連接的流式套結字,用于和視頻組播發送程序進行通信,然后進行端口綁定、連接以及監聽;

(5)監聽組播發送程序端口;

(6)等待視頻組播發送程序發過來的多播數據,如果有多播數據到達,則讀取組播發來的視頻流數據,否則,繼續等待;

(7)調用解視頻流封裝函數demux( )。demux( )函數主要內容為:

如果4K數據中包含視頻流數據,則調用mpeg2解碼器來對數據進行解碼,調用decode_mpeg2()函數。

(8)是否到文件結尾,如果是則結束,否則跳至(6)執行。

最后,介紹一下decode_mpeg2( )函數的運行步驟:

(1)分配內存空間給解碼器用,調用mpeg2_buffer( )函數;

(2)獲取視頻的頭信息,調用mpeg2_info( )函數;

(3)分析視頻流數據,獲取現在的狀態信息:

1)如果是序列頭(sequence)信息,則執行case STATE_SEQUENCE部分的內容;

2)如果是圖像頭信息,則執行case STATE_PICTURE部分的內容;

3)如果是slice信息,或者序列結束,或者無效的結尾標志,判斷是否解完一幀:

①如果未解完一幀數據,則跳出decode_mpeg2( )函數,繼續執行;

②如果解完一幀數據,則判斷是否繼續執行,判斷繼續執行的依據如依據1所述。如果滿足依據1則跳出decode_mpeg2( )函數,繼續執行,否則一直等待直至滿足依據1這個條件。

③如果不是參考幀,在顯示完后將解碼后的視頻數據丟棄,否則不能丟棄,用來作為參考幀的數據。

4 結果分析

測試結構如圖2所示,測試環境為linux,編譯和調試工具分別為gcc和gdb。經多次反復測試發現本程序不僅可以針對CIF、D1大小的圖像進行組播,還可以對高清節目(測試分辨率為1920* 1080i)進行組播,用戶接收效果良好,經多次測試,未出現任何跳幀、數據溢出的現象。下面只列出其中一組分別為CIF、D1和高清節目進行組播時的網絡接收速度的狀況圖,如圖3、4、5所示。圖中橫坐標為時間,縱坐標為客戶端的網絡接收速率。

圖3 CIF大小

圖4 D1大小

圖5 高清分辨率(1920* 1080i)大小

由于視頻組播發送程序和MPEG2解碼程序之間采取的是可靠的TCP連接,因此,除了極少數出現的網絡丟包情況外,端到端的丟包情況不存在,此外,也不存在緩沖區丟包的情況。

5 結論

本文設計并實現了一種Linux下視頻流多播速率控制方法。在linux環境下,用gcc進行了編譯,得以成功的實現。測試結果發現該方法不僅可以針對高清節目及以下任意分辨率的視頻進行組播發送,而且通過MEPG2的例子,還可以將這種方法擴充至對MPEG4、H.263、H.264等國際化標準的視頻壓縮格式的支持,具有良好的實用價值。

參考文獻:

[1]汪凡.組播技術概述[J].中國金融電腦,2001,(3):92-93.

[2]王萍,趙明,等.流式媒體中的關鍵技術[J].安徽大學學報,2006,(1):31.

[3]楊明川,解沖峰.Internet視頻傳輸中的關鍵技術分析[EB/OL].http://www.chinatelecom. com.cn,2002-12-27.

[4]Floyd S,Handley M,Padhye J,et al.Equation-Based Congestion Control for Unicast Applications[J].The Extended Version,2000,(2):147-163.

[5]李飛,楊林軍,王新,等.基于端系統的視頻流組播速率控制方法[J].計算機應用與軟件,2007,24(6):49-52.

主站蜘蛛池模板: 日韩毛片视频| 久久视精品| 成人在线天堂| 中文字幕 欧美日韩| 亚洲欧美成人网| 91精品综合| 青青国产成人免费精品视频| 亚洲自拍另类| 国产v精品成人免费视频71pao | 91美女在线| 日韩不卡高清视频| 亚洲欧洲日产国码无码av喷潮| 欧美a级完整在线观看| 日韩毛片在线播放| 久久久久久久蜜桃| 伊人丁香五月天久久综合| 少妇极品熟妇人妻专区视频| 国产菊爆视频在线观看| 国产成人夜色91| 国产精品无码在线看| 在线观看国产精品一区| 欧洲极品无码一区二区三区| jizz在线免费播放| 在线看片免费人成视久网下载| 亚洲最黄视频| 思思热在线视频精品| 国产免费久久精品99re丫丫一| 天天躁狠狠躁| 美女潮喷出白浆在线观看视频| 天堂亚洲网| 亚洲,国产,日韩,综合一区| 国内99精品激情视频精品| 久久性妇女精品免费| 99精品免费在线| 91最新精品视频发布页| 日韩a级毛片| 日韩av无码精品专区| 日本欧美精品| 中文字幕人成人乱码亚洲电影| 欧美成人一区午夜福利在线| 精品国产自在在线在线观看| 高清欧美性猛交XXXX黑人猛交| 宅男噜噜噜66国产在线观看 | 国产真实自在自线免费精品| 国产精品免费久久久久影院无码| 亚洲视频免| 九月婷婷亚洲综合在线| 麻豆精品在线播放| 欧美日韩成人在线观看| 亚洲av无码片一区二区三区| 四虎影视国产精品| 一级毛片在线免费视频| 日本91在线| 九九九九热精品视频| 欧美成a人片在线观看| 欧美伊人色综合久久天天| 一区二区自拍| 人妻精品全国免费视频| 色综合婷婷| 精品国产一二三区| 米奇精品一区二区三区| 国产成人精品免费av| 99久久无色码中文字幕| 日本www在线视频| 欧美一区二区精品久久久| 国产成人亚洲毛片| 久久精品国产999大香线焦| 四虎AV麻豆| 欧美激情视频一区| 狠狠干综合| 精品成人一区二区| 毛片免费在线视频| 久久久波多野结衣av一区二区| 91蜜芽尤物福利在线观看| 国产色伊人| 国产色偷丝袜婷婷无码麻豆制服| 午夜综合网| 四虎永久免费网站| 99这里只有精品在线| 亚洲欧美成人在线视频| 国产人免费人成免费视频| 国产精品3p视频|