摘要:在Internet視頻直播服務(wù)中,受寬帶限制,服務(wù)器難以支持大規(guī)模并發(fā)客戶;針對該問題,該文設(shè)計了基于對等網(wǎng)絡(luò)模式的流媒體直播系統(tǒng)。首先概述了基于P2P網(wǎng)絡(luò)中的流媒體直播系統(tǒng)的過程,之后討論了流媒體直播系統(tǒng)設(shè)計設(shè)計方案,最后闡述了流媒體直播系統(tǒng)中的關(guān)鍵技術(shù)。
關(guān)鍵詞:P2P;流媒體;直播
中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2009)14-3673-03
Research and Design of P2P-based Live Media Streaming System
QIN Zong-yan
(Dongxing Frontier Inspection Station of the People's Republic of China, Dongxing 538100, China)
Abstract: The high bandwidth required by live streaming video greatly limits number of clients that connect to media server. This paper designs a P2P-based Live Media Streaming System. Firstly, the paper introduces brieflythe process of Live Media Streaming System, Secondly, it analyzes the designation scheme of Live Media Streaming System,F(xiàn)inally, the paper provides the key technology of Live Media Streaming System.
Key words: peer-to-peer; streaming media; Live
隨著網(wǎng)絡(luò)技術(shù)的發(fā)展,網(wǎng)絡(luò)多媒體服務(wù)得到廣泛應(yīng)用。傳統(tǒng)的流媒體系統(tǒng)幾乎都是基于客戶端/服務(wù)器模式,但由于服務(wù)器性能及服務(wù)器端的帶寬資源有限,嚴重阻礙了流媒體服務(wù)質(zhì)量的提高。P2P技術(shù)作為一種新型的網(wǎng)絡(luò)技術(shù)改變了互聯(lián)網(wǎng)上以服務(wù)器為中心的傳輸模式,使網(wǎng)絡(luò)上的每一臺計算機都能夠互為服務(wù)器/客戶端。若將流媒體分段,并使其分段在P2P網(wǎng)絡(luò)上傳播,利用P2P網(wǎng)絡(luò)的特點,就可以使網(wǎng)絡(luò)上任何一臺機器變成這些流媒體段的服務(wù)器,承擔轉(zhuǎn)發(fā)的任務(wù),從根本上解決了服務(wù)器端網(wǎng)絡(luò)帶寬瓶頸問題。因此,利用P2P技術(shù)來實現(xiàn)流媒體直播,成為目前國內(nèi)外學(xué)者的研究熱門。
1 流媒體直播系統(tǒng)的工作過程
基于P2P網(wǎng)絡(luò)中的流媒體直播系統(tǒng)的過程是:流媒體服務(wù)器S存儲著全部流媒體文件,首先,服務(wù)器S將媒體文件按照一定的流媒體文件格式分割成很多個固定大小的媒體數(shù)據(jù)包,然后發(fā)送到自身的緩存區(qū)中,為前來請求的客戶端提供服務(wù)。當一個新的客戶端節(jié)點C加入P2P網(wǎng)絡(luò)時,它首先會向服務(wù)器S發(fā)出連接請求,若S有足夠的剩余帶寬資源,則響應(yīng)C節(jié)點的請求,與C建立起連接,為C提供能播放的媒體數(shù)據(jù)包;假如S沒有剩余帶寬資源,則S會按照某種策略選擇一個與之直接相連的子節(jié)點,子節(jié)點再根據(jù)自己的剩余帶寬資源狀況判斷是否為這個新的客戶端節(jié)點提供服務(wù),以此類推,直到找到一個能為自己服務(wù)的節(jié)點為止(假設(shè)節(jié)點C6可為新節(jié)點C提供服務(wù))。此時,服務(wù)器S再將節(jié)點C的請求命令包和請求的媒體數(shù)據(jù)包轉(zhuǎn)發(fā)給C6節(jié)點。至此,節(jié)點C6和節(jié)點C就可以建立起連接,雙方進行通信,在此基礎(chǔ)上伙伴關(guān)系也會相應(yīng)的建立起來。
節(jié)點C按照自己請求的數(shù)據(jù)接收來自于節(jié)點C6中相應(yīng)的媒體數(shù)據(jù)包,對C6中不存在的數(shù)據(jù)包,節(jié)點C會繼續(xù)尋找其它的伙伴,直到接收到能夠播放的所需的全部媒體數(shù)據(jù)包為止。然后,節(jié)點C再將收到的媒體數(shù)據(jù)包重新進行過濾、排序和封裝,組合成能實時播放的節(jié)目流。
上述過程中,節(jié)點C在接收到來自于其它伙伴節(jié)點的媒體數(shù)據(jù)包的同時,也可為其它的伙伴節(jié)點提供相應(yīng)的服務(wù)。這就相當于每個節(jié)點既是服務(wù)器,也是客戶端。顯然,此流媒體直播系統(tǒng)可以看作是多個服務(wù)器同時為一個客戶端提供服務(wù),這樣,平推到每個服務(wù)器上的負擔就會減輕,客戶端得到的服務(wù)質(zhì)量相應(yīng)的提高。
2 流媒體直播系統(tǒng)設(shè)計設(shè)計方案
流媒體直播系統(tǒng)方案中,客戶端不僅可以從服務(wù)器那里直接取得數(shù)據(jù),還可以從彼此相連的其他客戶端處獲取流媒體數(shù)據(jù)。因此,只需要系統(tǒng)中的部分客戶端從服務(wù)器獲取流媒體數(shù)據(jù)進行播放,其余的客戶端通過彼此建立的連接便可以實現(xiàn)播放了。設(shè)計的流媒體直播系統(tǒng)如圖1 所示。
2.1 服務(wù)器設(shè)計
服務(wù)端程序運行在具有獨立公網(wǎng)IP地址的服務(wù)器上。和每個在線的用戶都保持一個TCP連接。提供的主要功能如下。
1) 將非壓縮的音視頻數(shù)據(jù)源編碼成流媒體支持的格式數(shù)據(jù),比如ASF文件格式、RM文件格式、QuickTime文件格式等。
2) 為了保證視頻播放的時延和傳輸?shù)男剩仨殞?shù)據(jù)量很大的流媒體數(shù)據(jù)分割成合適大小數(shù)據(jù)塊 Block,然后把Block傳送給媒體數(shù)據(jù)緩沖區(qū)。
3) 存儲流媒體數(shù)據(jù)包,并且定時更新數(shù)據(jù)緩沖區(qū),為前來請求的客戶端提供服務(wù)。
4) 監(jiān)聽和管理客戶端數(shù)據(jù)請求,建立TCP連接,并開放線程,發(fā)送相應(yīng)的媒體數(shù)據(jù)。
5) 響應(yīng)節(jié)點請求并更新節(jié)點列表,這包括處理新節(jié)點的加入、退出、隔離,為節(jié)點隨機選擇伙伴節(jié)點。
2.2 客戶端設(shè)計
客戶端程序運行在用戶的終端機器上,響應(yīng)用戶的命令。具體需要提供的功能如下。
1) 負責響應(yīng)客戶端其他節(jié)點請求并更新節(jié)點列表,維護P2P網(wǎng)絡(luò)。
2) 負責伙伴節(jié)點的加入與退出,更新自己的伙伴列表,建立本節(jié)點與伙伴節(jié)點的連接。
3) 負責接收客戶端伙伴管理模塊類的信息,開放流媒體數(shù)據(jù)傳輸線程,控制并撤銷線程。
4) 負責接收服務(wù)器或伙伴節(jié)點傳輸來的流媒體數(shù)據(jù),保存、更新本節(jié)點的流媒體數(shù)據(jù)。
5) 負責接收流媒體數(shù)據(jù)、播放流媒體數(shù)據(jù),實現(xiàn)流媒體文件的播放。
6) 檢測目前的網(wǎng)絡(luò)動態(tài)狀況,用于QoS控制。
3 流媒體直播系統(tǒng)中的關(guān)鍵技術(shù)
要保證P2P網(wǎng)絡(luò)中流媒體直播系統(tǒng)能正常的運行,必須解決以下幾個關(guān)鍵問題。
3.1 節(jié)點管理
節(jié)點管理是P2P網(wǎng)絡(luò)的基礎(chǔ),成熟穩(wěn)定的流媒體直播系統(tǒng)需要完善穩(wěn)定的節(jié)點管理體系。
1) 節(jié)點的加入
新節(jié)點n試圖加入時,首先向服務(wù)器S請求服務(wù),如果服務(wù)器有足夠的資源,則服務(wù)器向節(jié)點n提供服務(wù),否則服務(wù)器S把n的請求轉(zhuǎn)發(fā)給它的某個直接的子節(jié)點X,X根據(jù)自己的資源情況判斷是否給n提供服務(wù),以此類推,直到n找到一個父節(jié)點,轉(zhuǎn)發(fā)有如下策略:
① 隨機選擇:X從它的子節(jié)點中隨機選擇一個節(jié)點T作為目標節(jié)點,把n的請求發(fā)給T。
② Round-Robin: X維護它所有子節(jié)點的隊列,把新節(jié)點的請求依次轉(zhuǎn)發(fā)給各個子節(jié)點。
③ 根據(jù)物理位置選擇:新節(jié)點n發(fā)出加入請求時附帶本身的路由信息,X根據(jù)n的路由信息進行轉(zhuǎn)發(fā)。
④ 根據(jù)帶寬選擇:新節(jié)點n發(fā)出加入請求時附帶本身的帶寬信息,如果n的帶寬比X小,則用上述策略加入,否則,X把自己從父節(jié)點P斷開,把n重定向給P,然后把自己重定向給n。
2) 節(jié)點正常退出
當一個節(jié)點退出時,首先會向服務(wù)器節(jié)點列表中的節(jié)點發(fā)送一個退出請求,由于該節(jié)點的退出,可能會影響到其鄰居節(jié)點列表中的節(jié)點,所以,要將鄰居節(jié)點列表中的節(jié)點重定向到服務(wù)器節(jié)點列表中的節(jié)點或服務(wù)器。同時,收到退出請求的節(jié)點會簡單的從自己的節(jié)點列表中刪除要退出的節(jié)點。
3) 節(jié)點的非正常中斷檢測
由于某種原因,節(jié)點可能在任意時刻在沒有發(fā)送任何消息的情況下突然中斷離開。系統(tǒng)為了檢測到這種狀況,每個節(jié)點需要周期性為其鄰居節(jié)點列表中的節(jié)點發(fā)送消息,以說明自己能夠正常地工作。如果鄰居節(jié)點列表中的節(jié)點在一段時間內(nèi)并沒有收到某節(jié)點的消息,則認為該節(jié)點非正常的退出,同時將該節(jié)點從節(jié)點列表中刪除。
4) 重定向機制
重定向是節(jié)點管理中有效改變拓撲結(jié)構(gòu)的方法,它通過媒體命令包中的控制部分傳遞消息,找到具有剩余帶寬資源的節(jié)點建立數(shù)據(jù)傳輸。具體重定向機制如下:
① 假設(shè)節(jié)點P沒有足夠的剩余帶寬資源為節(jié)點C提供服務(wù),首先節(jié)點P在其所維護的節(jié)點列表中尋找具有足夠帶寬資源,并能為節(jié)點C提供服務(wù)的節(jié)點,設(shè)為節(jié)點D,然后節(jié)點P通過控制消息告訴節(jié)點C,節(jié)點D可以提供它所需要的服務(wù)。
② 節(jié)點C在接到重定向的消息后,首先關(guān)閉與節(jié)點P的數(shù)據(jù)傳輸會話,然后再跟節(jié)點D建立相同的媒體數(shù)據(jù)流傳輸會話。
③ 節(jié)點C與節(jié)點D建立媒體數(shù)據(jù)流傳輸會話后,開始進行媒體數(shù)據(jù)的傳輸,至此,重定向過程完成。
3.2 流媒體數(shù)據(jù)傳輸
1) 傳輸協(xié)議
RTP /RTCP是用于網(wǎng)絡(luò)流媒體實時傳輸?shù)膮f(xié)議。RTP(實時傳輸協(xié)議)是一種提供端對端的實時傳輸協(xié)議,RTCP(實時傳輸控制協(xié)議)用于統(tǒng)計、管理和控制RTP的數(shù)據(jù)包的傳輸。RTP /RTCP為流媒體的傳輸提供了網(wǎng)絡(luò)承載平臺,因此,在本系統(tǒng)采用RTP /RTCP作為傳輸協(xié)議。
在服務(wù)器端,通過DirectShow的源過濾器從計算機的視、音頻采集設(shè)備中讀取數(shù)據(jù),然后通過變換過濾器把數(shù)據(jù)壓縮編碼成ASF格式,然后再封裝到RTP包,通過UDP發(fā)送給與自己直接相連接的客戶端。
在客戶端,客戶接收到RTP數(shù)據(jù)包,從其中把流媒體數(shù)據(jù)提取出來,然后緩存到自己的緩存區(qū),同時,還要把數(shù)據(jù)轉(zhuǎn)發(fā)給自己的子節(jié)點。子節(jié)點接收到數(shù)據(jù)后也繼續(xù)緩存和轉(zhuǎn)發(fā),依此類推直到所有的子節(jié)點都接收到父節(jié)點發(fā)來的流媒體數(shù)據(jù)??蛻舳送ㄟ^源過濾器從自己的緩存區(qū)中讀取流媒體數(shù)據(jù),再通過表現(xiàn)過濾器把流媒體數(shù)據(jù)送往聲卡和顯卡播放。
2) 傳輸策略
數(shù)據(jù)傳輸策略管理是整個流媒體直播系統(tǒng)的核心和關(guān)鍵,流媒體應(yīng)用傳輸?shù)臄?shù)據(jù)具有優(yōu)先級關(guān)系,當前正在播放和即將播放的數(shù)據(jù)具有較高的優(yōu)先級,而一段時間后才會播放的數(shù)據(jù)則具有較低的優(yōu)先級,在數(shù)據(jù)傳輸?shù)倪^程中,具有較高優(yōu)先級的數(shù)據(jù)具有優(yōu)先查詢權(quán)和傳輸權(quán),并且為了保證實時性,優(yōu)先級高的數(shù)據(jù)具有一定的傳輸冗余。
在基于P2P的流媒體系統(tǒng)中,當要直播放某一媒體文件時,它首先調(diào)用P2P網(wǎng)絡(luò)的資源服務(wù)發(fā)現(xiàn)可能的資源供應(yīng)節(jié)點,并通過一定的策略選擇實際的資源供應(yīng)節(jié)點,這些節(jié)點提供的出口帶寬能夠滿足該媒體文件的播放需求,各供應(yīng)節(jié)點按照一定的策略組織這些節(jié)點進行同步傳輸,將媒體文件并行傳輸?shù)秸埱蠊?jié)點上。當流媒體系統(tǒng)播放開始或者掉線后重新播放時,存在一個緩沖延遲,在現(xiàn)有的系統(tǒng)中,為了保證播放的流暢性,延遲一般在2分鐘以上,延遲高一方面是分發(fā)和定位協(xié)議的原因,另一方面是由于沒有做傳輸優(yōu)化。在流媒體數(shù)據(jù)傳輸過程中,根據(jù)當前的延遲情況,需要動態(tài)調(diào)整傳輸策略。
3.3 流媒體處理技術(shù)
流媒體數(shù)據(jù)的采集和播放采用了DirectShow開發(fā)包。DirectShow是微軟公司提供的一套在Windows平臺上進行流媒體處理的開發(fā)包,與DirectX開發(fā)包一起發(fā)布。DirectShow為多媒體流的捕捉和回放提供了強有力的支持。運用DirectShow可以很方便地從支持WDM驅(qū)動模型的采集卡上捕獲數(shù)據(jù),并且進行相應(yīng)的后期處理乃至存儲到文件中。它廣泛地支持各種媒體格式,包括ASF,MPEG, AVI, MP3,WAVE等等,使得多媒體數(shù)據(jù)的回放變得容易。另外,DirectShow還集成了DirectX其它部分(比如DirectDraw,DirectSound)的技術(shù),直接支持DVD的播放、視頻的非線性編輯以及與數(shù)字攝像機的數(shù)據(jù)交換。DirectShow提供的是一種開放式的開發(fā)環(huán)境,可以根據(jù)自己的需要定制自己的組件。
本系統(tǒng)的服務(wù)器端和客戶端采用DirectShow開發(fā)。DirectShow使用一種過濾圖表模型來管理整個數(shù)據(jù)流的處理過程。過濾器按功能分為三類:源過濾器,變換過濾器和表現(xiàn)過濾器。源顧慮器負責獲得數(shù)據(jù),可以從文件或外設(shè)中提取音視頻數(shù)據(jù);變換過濾器負責數(shù)據(jù)格式的變換,表現(xiàn)過濾器負責數(shù)據(jù)的最終去處,將數(shù)據(jù)送到音視頻接口設(shè)備或以文件的形式保存。
3.4 緩存管理
流媒體文件在傳輸時候要先分解成許多數(shù)據(jù)包,各個包所選擇的路由可能不盡相同,因此各個數(shù)據(jù)包到達客戶端的時間延遲不等;再加上P2P網(wǎng)絡(luò)的動態(tài)性,要保證流媒體數(shù)據(jù)的連續(xù)性和穩(wěn)定性,則需要流媒體系統(tǒng)中的每個節(jié)點都具有一定的流媒體數(shù)據(jù)緩沖區(qū),即采用緩存機制來彌補延遲和抖動的影響,并保證數(shù)據(jù)包的順序正確,從而使媒體數(shù)據(jù)能連續(xù)輸出。
在本系統(tǒng)設(shè)計中,采用一種環(huán)式緩存區(qū),把節(jié)點獲得的流媒體數(shù)據(jù)緩存到本地,把緩存區(qū)分為播放區(qū)和回收區(qū)兩個部分。緩沖區(qū)采用按時間分塊的策略:將固定時間(比如1秒鐘)接收到的數(shù)據(jù)流劃分為一塊。整個緩存區(qū)分為60塊,每個緩存塊存放1秒的數(shù)據(jù),即整個緩存區(qū)可以存放60秒的數(shù)據(jù)。其中播放區(qū)分為30個緩存塊,每個緩存塊緩存一秒鐘的流媒體數(shù)據(jù)片段。緩存區(qū)中的數(shù)據(jù)按照等時間間隔的數(shù)據(jù)塊存放。
回收區(qū)的設(shè)計和播放區(qū)的設(shè)計一樣,只是回收區(qū)中存放的是一些剛剛播放后的數(shù)據(jù),以防止剛剛向下級節(jié)點發(fā)出有數(shù)據(jù)的通知但數(shù)據(jù)立刻被淘汰的情況發(fā)生。
3.5 安全控制
網(wǎng)絡(luò)安全是P2P流媒體直播系統(tǒng)的基本要求,一方面要防止非法用戶的入侵,另一方面要防止點對點的病毒傳播,侵入未共享的文件資源,侵犯隱私權(quán)。
在P2P流媒體直播系統(tǒng)內(nèi)部,采用用戶分級授權(quán)體系,限制用戶的系統(tǒng)資源訪問,阻止非法訪問。當普通節(jié)點向上一級發(fā)出直播的請求時,同時將用戶權(quán)限證明也打在請求的包里發(fā)出去,這樣上一級節(jié)點收到請求后就可以判斷發(fā)出直播請求的是客戶還是非法入侵。如果客戶終端發(fā)出的用戶權(quán)限證明錯誤次數(shù)超過設(shè)定的次數(shù) (比如3次),則把該客戶的端口給暫時封起來,以免造成惡劣的影響。在直播過程中,為了避免病毒傳播情況的出現(xiàn),網(wǎng)絡(luò)監(jiān)測節(jié)點MSG在發(fā)送的數(shù)據(jù)包中檢測是否有病毒存在,網(wǎng)絡(luò)監(jiān)測節(jié)點MSG對直播用戶和發(fā)送端之間傳送的數(shù)據(jù)包每隔一段時間進行檢測,一旦在發(fā)送的數(shù)據(jù)包中發(fā)現(xiàn)攜帶病毒,立刻停止兩個端之間的傳送,同時要馬上向系統(tǒng)節(jié)點進行報告,把發(fā)送病毒的節(jié)點從網(wǎng)絡(luò)中動態(tài)刪除或者封掉其端口。再向已經(jīng)接收到部分數(shù)據(jù)包的請求直播的節(jié)點發(fā)送下載失敗的提示信息,并提示發(fā)現(xiàn)病毒,建議用戶把已經(jīng)下載部分刪除。用戶節(jié)點繼續(xù)發(fā)起直播請求,上一級節(jié)點重新為其尋找路由。
4 結(jié)束語
寬帶的普及和通信網(wǎng)絡(luò)技術(shù)的迅速發(fā)展,網(wǎng)絡(luò)多媒體服務(wù)得到廣泛應(yīng)用,視頻直播服務(wù)作為其中的重要組成部分,具有廣闊的應(yīng)用前景。然而由于流媒體對流量帶寬的資源需求很大,解決服務(wù)器端流量帶寬瓶頸成為促進流媒體應(yīng)用發(fā)展的首要問題。P2P技術(shù)的發(fā)展,為解決流媒體服務(wù)器的瓶頸問題提供了新的途徑,其充分利用每個節(jié)點的空閑資源分擔服務(wù)器負載,并且具有良好的擴展性,能支持大數(shù)量級的用戶同時在線。
參考文獻:
[1] 黃澤,唐鳳仙.P2P流媒體系統(tǒng)概述[J].河池學(xué)院學(xué)報,2008(2).
[2] 王立鵬,陸際光.淺談流媒體技術(shù)及其基于P2P的應(yīng)用[J].電腦知識與技術(shù),2007(10).
[3] 王鍵.基于p2p的網(wǎng)絡(luò)直播系統(tǒng)的設(shè)計與實現(xiàn)[J].電腦知識與技術(shù),2007(16).
[4] 張志遠.基于Gnutella模型的P2P網(wǎng)絡(luò)電視的實現(xiàn)[J].中國民航大學(xué)學(xué)報,2007(2).