亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        Linux下視頻流多播速率控制方法的設(shè)計與實現(xiàn)

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

        摘要:針對目前流媒體中視頻數(shù)據(jù)發(fā)送速度難以控制的問題,以當(dāng)前廣泛使用的MPEG2視頻解碼模型為例,設(shè)計并實現(xiàn)了一種Linux下視頻流多播速率控制方法。這種方法能夠有效的控制服務(wù)器視頻數(shù)據(jù)的發(fā)送速率,具有占用服務(wù)器資源少,適應(yīng)各種網(wǎng)絡(luò)要求的優(yōu)點(diǎn)。經(jīng)Linux平臺驗證結(jié)果表明,傳送視頻數(shù)據(jù)的網(wǎng)絡(luò)速度平穩(wěn),未出現(xiàn)視頻數(shù)據(jù)溢出現(xiàn)象,可以得到良好的視頻效果,具有很好的實用價值。

        關(guān)鍵詞:視頻流;多播;速率控制;解碼器

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

        1 引言

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

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

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

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

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

        2 發(fā)送速率控制方法

        如圖2所示,為一個局域網(wǎng)環(huán)境的連接圖。本方法由發(fā)送端來進(jìn)行數(shù)據(jù)發(fā)送速率的控制,由服務(wù)器來完成??蛻舳丝梢杂靡曨l組播接收軟件如VLC、mplayer接收并播放,也可以自己編寫一個解碼器來進(jìn)行網(wǎng)絡(luò)接收和視頻的播放。這種方法包含兩部分內(nèi)容,分別是負(fù)責(zé)網(wǎng)絡(luò)組播的視頻組播發(fā)送程序,另一部分是負(fù)責(zé)網(wǎng)絡(luò)組播接收、視頻解碼、發(fā)送速率控制以及發(fā)送握手信息等功能。視頻組播發(fā)送程序運(yùn)行服務(wù)器上,但用于速率控制的解碼程序可以放在局域網(wǎng)環(huán)境的任意一臺服務(wù)器或者PC上。

        圖2 局域網(wǎng)連接示意圖

        下面介紹一下這兩部分程序的工作原理及如何進(jìn)行協(xié)同工作。整個方法的執(zhí)行過程為:

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

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

        (3)解碼程序在接收到視頻組播發(fā)送程序發(fā)送過來的組播數(shù)據(jù)之后進(jìn)行解碼;

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

        ①未解完一幀數(shù)據(jù),則繼續(xù),跳至5)繼續(xù)執(zhí)行;

        ②解完一幀數(shù)據(jù),判斷是否繼續(xù)執(zhí)行,判斷的依據(jù)為:

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

        當(dāng)滿足依據(jù)1的時候,則跳至(5)繼續(xù)執(zhí)行,否則:

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

        {

        執(zhí)行空指令;

        讀取當(dāng)前時間;

        }

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

        (5) 解碼程序?qū)⒁粋€握手信息通過TCP連接發(fā)送至視頻組播發(fā)送程序;

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

        3 發(fā)送速率控制方法的實現(xiàn)

        在上述講到,服務(wù)器程序由兩部分程序組成:視頻組播發(fā)送程序和MPEG2解碼程序。下面分別詳細(xì)介紹這兩部分程序的運(yùn)行步驟和內(nèi)容。本方法開發(fā)的環(huán)境為linux,采用gcc進(jìn)行編譯,網(wǎng)絡(luò)連接圖如圖2所示。

        3.1 視頻組播發(fā)送程序?qū)崿F(xiàn)

        下面介紹一下視頻組播發(fā)送程序的實現(xiàn)步驟:

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

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

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

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

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

        (6) 直至文件結(jié)束,發(fā)送完數(shù)據(jù)為止。

        3.2 解碼程序?qū)崿F(xiàn)

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

        (1)處理程序的輸入?yún)?shù),調(diào)用handle_args()函數(shù);

        (2)初始化解碼器參數(shù),給部分參數(shù)分配內(nèi)存,調(diào)用mpeg2_init()和mpeg2_malloc_hooks()函數(shù);

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

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

        2)如果是TS視頻流(一般是衛(wèi)星電視傳送采取的格式),則調(diào)用ts_loop ()函數(shù);

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

        4)如果是ES純視頻流,則調(diào)用es_loop ()函數(shù)。

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

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

        (1)定義組播地址及端口號,定義接收緩沖區(qū)的容量為4KB(因為解碼器每次處理4KB的數(shù)據(jù),當(dāng)然這個數(shù)據(jù)可調(diào)),定義一個TCP連接用的端口號以及網(wǎng)絡(luò)的其它一些參數(shù);

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

        (3)加入多播組;

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

        (5)監(jiān)聽組播發(fā)送程序端口;

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

        (7)調(diào)用解視頻流封裝函數(shù)demux( )。demux( )函數(shù)主要內(nèi)容為:

        如果4K數(shù)據(jù)中包含視頻流數(shù)據(jù),則調(diào)用mpeg2解碼器來對數(shù)據(jù)進(jìn)行解碼,調(diào)用decode_mpeg2()函數(shù)。

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

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

        (1)分配內(nèi)存空間給解碼器用,調(diào)用mpeg2_buffer( )函數(shù);

        (2)獲取視頻的頭信息,調(diào)用mpeg2_info( )函數(shù);

        (3)分析視頻流數(shù)據(jù),獲取現(xiàn)在的狀態(tài)信息:

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

        2)如果是圖像頭信息,則執(zhí)行case STATE_PICTURE部分的內(nèi)容;

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

        ①如果未解完一幀數(shù)據(jù),則跳出decode_mpeg2( )函數(shù),繼續(xù)執(zhí)行;

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

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

        4 結(jié)果分析

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

        圖3 CIF大小

        圖4 D1大小

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

        由于視頻組播發(fā)送程序和MPEG2解碼程序之間采取的是可靠的TCP連接,因此,除了極少數(shù)出現(xiàn)的網(wǎng)絡(luò)丟包情況外,端到端的丟包情況不存在,此外,也不存在緩沖區(qū)丟包的情況。

        5 結(jié)論

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

        參考文獻(xiàn):

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

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

        [3]楊明川,解沖峰.Internet視頻傳輸中的關(guān)鍵技術(shù)分析[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]李飛,楊林軍,王新,等.基于端系統(tǒng)的視頻流組播速率控制方法[J].計算機(jī)應(yīng)用與軟件,2007,24(6):49-52.

        亚洲一区二区观看播放| 一区二区三区四区在线观看日本| 黄色三级视频中文字幕| 日本国主产一区二区三区在线观看 | 无码视频在线观看| 亚洲综合色区另类av| 国产精品无套内射迪丽热巴| 久久精品国产亚洲综合色| 一本久久精品久久综合桃色| 国内揄拍国内精品久久| 最新国产女主播在线观看 | 在线精品国产一区二区三区| 无码av在线a∨天堂毛片| 一区二区三区少妇熟女高潮| 大屁股流白浆一区二区三区| 亚洲国产精品久久久av| 亚洲av无码成人专区片在线观看| 国产精品 视频一区 二区三区| 亚洲中文字幕无码不卡电影| 国产精品一区二区蜜臀av| 亚洲国产精品久久精品| 午夜毛片不卡免费观看视频| 色综合久久天天综线观看| 按摩女内射少妇一二三区| 91精品国产92久久久| 中文字幕在线日亚洲9| 大地资源网更新免费播放视频| 69天堂国产在线精品观看| 精品亚洲在线一区二区| 男人和女人做爽爽视频 | 99热成人精品国产免国语的| 男女发生关系视频网站| 产美女被爽到高潮免费a| 寂寞少妇做spa按摩无码| 久久精品国产夜色| 欧美精品高清在线xxxx| 桃色一区一区三区蜜桃视频| 久久精品国产亚洲av无码娇色 | 亚洲一区极品美女写真在线看| 国产一区二区三区久久悠悠色av | 久久天天躁夜夜躁狠狠躁2022|