專利名稱:用于可縮放媒體的分布式流傳送的系統(tǒng)和方法
技術(shù)領(lǐng)域:
本發(fā)明涉及用于松散耦合的P2P網(wǎng)絡(luò)的接收器驅(qū)動(dòng)對等(P2P)媒體流,尤其涉及一種用于在不需要提供對等協(xié)作的條件下、在客戶機(jī)的實(shí)時(shí)協(xié)調(diào)和控制之下將媒體從多個(gè)對等體流傳送到客戶機(jī)的系統(tǒng)和方法。
背景技術(shù):
最近的市場研究已指出,2004年,美國一半以上的因特網(wǎng)用戶已訪問某種形式的流媒體。訪問流音樂是很流行的活動(dòng),而流視頻的普及程度正在迅速增高。
不幸的是,與典型的網(wǎng)頁不同,流媒體文件的尺寸通常非常大。例如,按2兆比特/秒(Mbps)來編碼的3分鐘的影片宣傳片會產(chǎn)生45兆字節(jié)(MB)的媒體文件,這取決于所使用的編解碼器。流媒體必須解決的另一個(gè)問題是數(shù)據(jù)包傳遞的嚴(yán)格定時(shí)。因此,流媒體文件的大尺寸和數(shù)據(jù)包傳遞定時(shí)要求使典型的流媒體服務(wù)器設(shè)立和運(yùn)行起來相對較昂貴。例如,一個(gè)當(dāng)前的估算將關(guān)于流媒體的時(shí)價(jià)定為每1GB的服務(wù)通信量是10美元。通過使用45MB文件尺寸的這個(gè)例子,這會導(dǎo)致每一被分發(fā)的影片宣傳片有0.45美元的帶寬成本。顯而易見,隨著媒體流量的增加,這類成本會迅速上升。
對于媒體流的相對較高的成本的一個(gè)解決方案是使用“對等”(P2P)網(wǎng)絡(luò)來將該媒體流提供給個(gè)別的客戶機(jī)。一般而言,P2P網(wǎng)絡(luò)的基本理念是允許每個(gè)對等節(jié)點(diǎn)協(xié)助媒體服務(wù)器分發(fā)流媒體。用于流媒體的P2P網(wǎng)絡(luò)的成功已得到用于實(shí)現(xiàn)P2P網(wǎng)絡(luò)的大量常規(guī)途徑。
例如,被稱作“終端系統(tǒng)多點(diǎn)傳送”和“PeerCast”的常規(guī)P2P方案使用用于媒體流的應(yīng)用程序級多點(diǎn)傳送(ALM)。具體地,利用ESM和PeerCast,這些對等節(jié)點(diǎn)被自我組織到現(xiàn)有IP網(wǎng)絡(luò)上的覆蓋樹中。然后,沿該覆蓋樹來分發(fā)流數(shù)據(jù)。隨后,在這些對等節(jié)點(diǎn)之間共享提供帶寬的成本,從而減輕運(yùn)行媒體服務(wù)器的帶寬負(fù)擔(dān)(因此減少美元成本)。但是,利用ESM和PeerCast,該分發(fā)樹的這些葉節(jié)點(diǎn)只接收該流媒體,而不促成內(nèi)容分發(fā)。
兩個(gè)其他的常規(guī)方案“CoopNet”和“SplitStream”通過使用跨越來源和對等節(jié)點(diǎn)的多個(gè)分發(fā)樹,解決了諸如ESM和PeerCast等方案的內(nèi)容分發(fā)局限。然后,CoopNet和SplitStream中的每個(gè)樹可以發(fā)送流媒體的單獨(dú)片斷。結(jié)果,所有對等節(jié)點(diǎn)都可以涉及內(nèi)容分發(fā)。
常規(guī)P2P媒體流解決方案的另一例子包括被稱作“OStream”的流傳送方案。OStream使用“高速緩存和中繼站”方法,以便對等節(jié)點(diǎn)可以向客戶機(jī)提供來自其高速緩存的以前分發(fā)的媒體。另一個(gè)常規(guī)系統(tǒng)“GnuStream”提供構(gòu)建在公知的“Gnutella”系統(tǒng)之上的接收器驅(qū)動(dòng)P2P媒體流系統(tǒng)。而被稱作“CollectCast”的另一個(gè)常規(guī)方案積極地尋找最有可能實(shí)現(xiàn)最佳流傳送質(zhì)量的服務(wù)對等體,同時(shí)動(dòng)態(tài)地自適應(yīng)網(wǎng)絡(luò)波動(dòng)和對等體故障。
另一種類型的常規(guī)方案提供一種類型分布式文件共享,其中,文件的各個(gè)片斷跨越許多對等體而被廣泛的分發(fā)。然后,只要客戶機(jī)請求下載該文件,就從多個(gè)對等體那里(而不是直接從服務(wù)器那里)服務(wù)該請求。例如,被稱作“Swarmcast”的一個(gè)這樣的方案通過將文件分成小得多的各個(gè)片斷,來散布施加在網(wǎng)站上的提供流行的可下載內(nèi)容的負(fù)載。一旦用戶已安裝該了Swarmcast客戶級程序,其計(jì)算機(jī)就通過分發(fā)(即供應(yīng))它們已下載的各個(gè)數(shù)據(jù)片斷來自動(dòng)與其他用戶的計(jì)算機(jī)進(jìn)行合作,從而減少中央服務(wù)器上的總服務(wù)負(fù)載。被稱作“BitTorrent”的類似方案按照很類似的原則來運(yùn)作。特別是,當(dāng)在低負(fù)載之下時(shí),使用BitTorrent方案來供應(yīng)大型文件的web站點(diǎn)將表現(xiàn)得很象典型的http服務(wù)器,因?yàn)樗鼒?zhí)行該服務(wù)本身的大部分。但是,當(dāng)該服務(wù)器負(fù)載達(dá)到某個(gè)相對較高的水平時(shí),BitTorrent將轉(zhuǎn)變?yōu)橐粋€(gè)狀態(tài),其中,大部分的上傳負(fù)擔(dān)由用于供應(yīng)其他下載客戶機(jī)的下載客戶機(jī)本身來承受。
遺憾的是,盡管諸如Swarmcast和BitTorrent等方案對于分發(fā)各個(gè)文件片斷以顯著地根據(jù)P2P網(wǎng)絡(luò)規(guī)模增加服務(wù)器容量而言很有用,但這些系統(tǒng)不適用于有效率地流傳送媒體。特別是,諸如Swarmcast和BitTorrent等方案不關(guān)心組成構(gòu)成正被下載的一個(gè)或多個(gè)文件的數(shù)據(jù)包的傳遞的順序或定時(shí)。這些文件僅僅逐段地從各對等體那里被廣播到客戶機(jī),然后僅僅按正確順序在本地重新匯編,以便在客戶機(jī)計(jì)算機(jī)上重建原始文件。但是,在流媒體的情況下,必須仔細(xì)地考慮和控制數(shù)據(jù)包的定時(shí)和順序,以便提供該媒體的有效的流傳送。
所以,需要一種系統(tǒng)和方法,用于從松散耦合的對等體集合到客戶機(jī)的媒體流的接收器驅(qū)動(dòng)控制。這種系統(tǒng)不應(yīng)該要求各個(gè)對等體之間的通信或協(xié)作。另外,這種系統(tǒng)和方法應(yīng)該通過要求客戶機(jī)執(zhí)行任何必要的計(jì)算操作的大部分,來將施加于對等體上的計(jì)算要求減到最少。
發(fā)明內(nèi)容
如這里所描述的“PeerStreamer(對等流傳送器)”提供用于松散耦合的P2P網(wǎng)絡(luò)的接收器驅(qū)動(dòng)對等(P2P)媒體流。網(wǎng)絡(luò)中的對等體只執(zhí)行簡單的操作、可以高速緩存流媒體的全部或一部分、不與其他對等體協(xié)作、可以是不可靠的、并可以在任何給定的流傳送會話期間脫機(jī)或聯(lián)機(jī)。網(wǎng)絡(luò)中的客戶機(jī)(或接收器)進(jìn)行實(shí)時(shí)操作,以便協(xié)調(diào)對等體、將媒體從多個(gè)對等體流傳送、執(zhí)行負(fù)載平衡、處理對等體的聯(lián)機(jī)/脫機(jī)狀態(tài)、以及執(zhí)行對流媒體的解碼和呈現(xiàn)。
注意,這里所描述的PeerStreamer系統(tǒng)適用于具有多個(gè)客戶機(jī)和對等體的大型P2P網(wǎng)絡(luò),但出于解釋清楚的目的,下文將一般涉及個(gè)別客戶機(jī)。本領(lǐng)域的技術(shù)人員將會理解,所描述的由PeerStreamer提供的系統(tǒng)和方法適用于多個(gè)客戶機(jī)。此外,由于這里所描述的對等體用來將媒體供應(yīng)給接收器或客戶機(jī),因此,P2P網(wǎng)絡(luò)中的對等體群集在這里通常被稱作“對等體”或“服務(wù)對等體”。也應(yīng)該注意,如這里所描述的,這些“服務(wù)對等體”不應(yīng)該與特定的流媒體文件最初所起源的“媒體服務(wù)器”混淆。
一般而言,PeerStreamer提供接收器驅(qū)動(dòng)媒體流傳送。PeerStreamer操作始于每個(gè)接收客戶機(jī)檢索保持所請求的流媒體的全部或一部分的附近的對等體的列表。注意,在這個(gè)上下文中,媒體服務(wù)器也可以擔(dān)當(dāng)這些服務(wù)對等體之一。這個(gè)列表包括IP地址、以及一組保持該服務(wù)媒體的完整或部分副本的一個(gè)或多個(gè)相鄰服務(wù)對等體的監(jiān)聽端口。用于檢索這個(gè)列表的方法包括1)直接從媒體服務(wù)器中檢索該列表;2)從已知的服務(wù)對等體中檢索該列表;以及3)使用用于表示這些服務(wù)對等體的分布式散列表(DHT)方法。
一旦客戶機(jī)檢索了可用服務(wù)對等體列表,該客戶機(jī)就連接到每個(gè)服務(wù)對等體,并獲得其“可用性向量”。一般而言,每個(gè)服務(wù)對等體的可用性向量是該服務(wù)對等體所保持的媒體的確切部分的簡潔說明。然后,這些可用性向量由客戶機(jī)用來確切地確定各個(gè)服務(wù)對等體保持該編碼媒體的什么塊。
例如,在特定的服務(wù)對等體保持全部服務(wù)媒體的情況下,該對等體的可用性向量可以是指出該服務(wù)對等體保持完整的媒體副本的單個(gè)標(biāo)志。同樣,如果服務(wù)對等體只保持服務(wù)媒體的一部分,那么該服務(wù)對等體的可用性向量將用信號通知客戶機(jī)服務(wù)對等體保持該媒體的什么部分,例如,由該服務(wù)對等體保持的每個(gè)數(shù)據(jù)包的塊數(shù)以及塊索引。
另外,在使用附加編碼(例如,以下所描述的各種擦除編碼(erasure coding)技術(shù))的情況下,可用性向量將包括分配給服務(wù)對等體的媒體擦除編碼關(guān)鍵字、以及由該服務(wù)對等體保持的擦除塊的數(shù)目。此外,如果服務(wù)對等體使用擦除編碼,并且,該媒體也被嵌入編碼,那么,可用性向量將包括所分配的媒體擦除編碼關(guān)鍵字、以及該嵌入編碼所使用的不同的比特率水平處的每個(gè)數(shù)據(jù)包的擦除塊的數(shù)目。
一般而言,已編碼的媒體文件通常包括“媒體頭部”,隨后是表示所編碼的媒體的多個(gè)媒體數(shù)據(jù)包(即“媒體主體”)。給定該可用性向量,下一個(gè)步驟是讓客戶機(jī)檢索媒體頭部和“媒體結(jié)構(gòu)”的長度,該媒體結(jié)構(gòu)可從將要從對等體群集流傳送的已編碼媒體文件中導(dǎo)出。一組數(shù)據(jù)包的媒體結(jié)構(gòu)僅僅是數(shù)據(jù)包頭部加上數(shù)據(jù)包比特流長度。在檢索了這些長度之后,客戶機(jī)計(jì)算該媒體頭部和媒體結(jié)構(gòu)的“數(shù)據(jù)單元ID”,并按協(xié)作方式從該對等體群集中的一個(gè)或多個(gè)對等體中檢索它們。
一旦媒體頭部到達(dá),客戶機(jī)就分析該媒體頭部,然后配置或初始化解碼和呈現(xiàn)或重放正被流傳送的特定類型的媒體(即MPEG 1/2/4、WMA、WMV等)所需要的任何音頻/視頻解碼器和呈現(xiàn)設(shè)備。一旦完成了這個(gè)初始設(shè)置階段,客戶機(jī)隨后就開始如下所述地協(xié)調(diào)來自媒體主題從對等體群集的正在進(jìn)行的流傳送。
具體地,給定特定流媒體的前述媒體結(jié)構(gòu),客戶機(jī)計(jì)算流媒體(即媒體主體)的數(shù)據(jù)包的數(shù)據(jù)單元ID,然后逐個(gè)地檢索那些數(shù)據(jù)包。在一個(gè)相關(guān)的實(shí)施例中,PeerStreamer使用嵌入編碼媒體,然后,流傳送比特率根據(jù)可用服務(wù)帶寬和客戶機(jī)隊(duì)列狀態(tài)而改變。在此情況下,媒體主體的媒體數(shù)據(jù)包的正在進(jìn)行的檢索對應(yīng)于將基于可用帶寬來提供最小的速率失真的那些數(shù)據(jù)包。
在任何一種情況下,客戶機(jī)周期性地更新服務(wù)對等體列表,并連接到潛在的新服務(wù)對等體。在一個(gè)測試實(shí)施例中,客戶機(jī)通過發(fā)出對于每個(gè)潛在的服務(wù)對等體的周期常規(guī)TCP連接函數(shù)調(diào)用,來核對潛在的新服務(wù)對等體。在客戶機(jī)建立與新服務(wù)對等體的連接之后,它首先檢索該前述可用性向量。然后,在接收器/客戶機(jī)的方向上,該新對等體可以加入該群集中的其他活動(dòng)對等體。然后,客戶機(jī)協(xié)調(diào)這些對等體、根據(jù)其服務(wù)帶寬和內(nèi)容可用性來平衡這些對等體的服務(wù)負(fù)載、并將斷開的或超時(shí)的對等體的無法履行的請求重定向到其他活動(dòng)對等體中的一個(gè)或多個(gè)。然后,流傳送操作按這個(gè)方式繼續(xù)進(jìn)行,直到全部流媒體被接收,或者流傳送操作被用戶停止。
在一個(gè)實(shí)施例中,PeerStreamer使用高速率擦除彈性編碼,以允許多個(gè)服務(wù)對等體保持部分媒體而無沖突,以便客戶機(jī)僅僅檢索固定數(shù)目的擦除編碼塊,而不管在哪里檢索和檢索什么特定塊。在此情況下,將所接收的擦除編碼塊放入客戶機(jī)的分級隊(duì)列,其中,媒體數(shù)據(jù)包隨后被匯編。然后,向下游發(fā)送完全被匯編的媒體數(shù)據(jù)包,以便使用已為解碼和呈現(xiàn)或重放正被流傳送的特定類型的媒體而配置或初始化的任何音頻/視頻解碼器和呈現(xiàn)設(shè)備來對它們進(jìn)行解碼和重放。在此情況下,通過控制分級隊(duì)列的長度、請求隊(duì)列的長度和壓縮的音頻/視頻緩沖區(qū)的長度,客戶機(jī)維持某段所需時(shí)期(在一個(gè)測試實(shí)施例中是大約4秒)的流緩沖區(qū)。然后,使用該組合的緩沖區(qū)來防止網(wǎng)絡(luò)數(shù)據(jù)包丟失和抖動(dòng)。
鑒于以上概述,顯而易見,這里所描述的PeerStreamer提供一種用于在P2P網(wǎng)絡(luò)中提供接收器驅(qū)動(dòng)媒體流傳送的獨(dú)特的系統(tǒng)和方法。除了剛剛描述的這些好處以外,通過下文中的詳細(xì)描述并結(jié)合附圖,PeerStreamer的其他優(yōu)點(diǎn)也將會變得一目了然。
通過以下說明、所附權(quán)利要求書和附圖,本發(fā)明的這些具體特征、方面和優(yōu)點(diǎn)將得到更好的理解。附圖中圖1是描繪構(gòu)成實(shí)現(xiàn)如這里所描述的“PeerStreamer”的示例性系統(tǒng)的通用計(jì)算設(shè)備的通用系統(tǒng)框圖。
圖2示出了用于如這里所描述的接收器驅(qū)動(dòng)媒體流傳送的示例性對等(P2P)網(wǎng)絡(luò)。
圖3提供示出用于實(shí)現(xiàn)如這里所描述的PeerStreamer的程序模塊的示例性體系結(jié)構(gòu)流程圖。
圖4示出了如這里所描述的流媒體文件的文件格式。
圖5示出了如這里所描述的PeerStreamer的測試實(shí)施例中所使用的“數(shù)據(jù)單元”。
圖6示出了如這里所描述的已被分成8個(gè)數(shù)據(jù)單元的嵌入編碼媒體數(shù)據(jù)包的局部高速緩存。
圖7提供了客戶機(jī)PeerStreamer媒體流傳送會話的示例DirectShowTM過濾器圖表。
圖8提供了表示如這里所描述的PeerStreamer請求和分級隊(duì)列以及流媒體解碼、呈現(xiàn)和重放的體系結(jié)構(gòu)系統(tǒng)突,其系統(tǒng)緩沖區(qū)由虛線來示出。
圖9提供了用于到達(dá)的數(shù)據(jù)單元的PeerStreamer客戶分級隊(duì)列,以及用于每個(gè)服務(wù)對等體的PeerStreamer客戶機(jī)請求隊(duì)列的框解。
圖10提供了示出如這里所描述的PeerStreamer的一個(gè)實(shí)施例的通用操作的操作流程圖。
具體實(shí)施例方式
在本發(fā)明較佳實(shí)施例的以下描述中,參考附圖,這些附圖構(gòu)成其一部分,并且,在這些附圖中,通過舉例說明,示出可以在其中實(shí)踐本發(fā)明的特定實(shí)施例。可理解,在不脫離本發(fā)明的范圍的前提下,可以利用其他實(shí)施例,并且可以進(jìn)行結(jié)構(gòu)上的更改。
1.0示范操作環(huán)境圖1示出了可以在其上實(shí)現(xiàn)本發(fā)明的合適的計(jì)算系統(tǒng)環(huán)境100的例子。計(jì)算系統(tǒng)環(huán)境100只是合適的計(jì)算環(huán)境的一個(gè)例子,它并不意在對本發(fā)明的使用范圍或功能提出任何限制。也不應(yīng)該將計(jì)算環(huán)境100解釋為對示例性操作環(huán)境100中所示的任何一個(gè)組件或組件組合具有任何依賴性或要求。
本發(fā)明可用于眾多其他的通用或?qū)S糜?jì)算系統(tǒng)環(huán)境或配置??赡苓m用于本發(fā)明的眾所周知的計(jì)算系統(tǒng)、環(huán)境和/或配置的例子包括(但不局限于)個(gè)人計(jì)算機(jī)、服務(wù)器計(jì)算機(jī)、手持的、膝上型或可移動(dòng)計(jì)算機(jī)或通信設(shè)備(例如,手機(jī)和PDA)、多處理器系統(tǒng)、基于微處理器的系統(tǒng)、機(jī)頂盒、可編程消費(fèi)電子設(shè)備、網(wǎng)絡(luò)PC、小型計(jì)算機(jī)、大型計(jì)算機(jī)、包括以上任何系統(tǒng)或設(shè)備的分布式計(jì)算環(huán)境等等。
可以在由計(jì)算機(jī)結(jié)合硬件模塊(包括話筒陣列198的各個(gè)組件)而執(zhí)行的計(jì)算機(jī)可執(zhí)行指令(例如,程序模塊)的一般上下文中描述本發(fā)明。通常,程序模塊包括執(zhí)行特定任務(wù)或?qū)崿F(xiàn)特定抽象數(shù)據(jù)類型的例程、程序、對象、組件、數(shù)據(jù)結(jié)構(gòu)等。也可以在分布式計(jì)算環(huán)境中實(shí)踐本發(fā)明,其中,由通過通信網(wǎng)絡(luò)連接的遠(yuǎn)程處理設(shè)備來執(zhí)行任務(wù)。在分布式計(jì)算環(huán)境中,程序模塊可以位于包括記憶存儲設(shè)備的本地計(jì)算機(jī)存儲介質(zhì)和遠(yuǎn)程計(jì)算機(jī)存儲介質(zhì)中。參照圖1,用于實(shí)現(xiàn)本發(fā)明的示例性系統(tǒng)包括計(jì)算機(jī)110形式的通用計(jì)算設(shè)備。
計(jì)算機(jī)110的組件可以包括(但不局限于)處理單元120、系統(tǒng)存儲器130和系統(tǒng)總線121,系統(tǒng)總線121將包括系統(tǒng)存儲器的各種系統(tǒng)組件耦合到處理單元120。系統(tǒng)總線121可以是幾種類型的總線結(jié)構(gòu)中的任一種,包括存儲總線或存儲控制器、外圍總線、以及使用各種總線體系結(jié)構(gòu)中的任一種的局部總線。舉例來講(不作限制),這類體系結(jié)構(gòu)包括工業(yè)標(biāo)準(zhǔn)體系結(jié)構(gòu)(ISA)總線、微通道體系結(jié)構(gòu)(MCA)總線、增強(qiáng)型ISA(EISA)總線、視頻電子技術(shù)標(biāo)準(zhǔn)協(xié)會(VESA)局部總線和外圍部件互連(PCI)總線(也被稱作Mezzanine總線)。
計(jì)算機(jī)110通常包括各種計(jì)算機(jī)可讀介質(zhì)。計(jì)算機(jī)可讀介質(zhì)可以是可由計(jì)算機(jī)110訪問的任何可用介質(zhì),它包括易失和非易失介質(zhì)、可移動(dòng)和不可移動(dòng)的介質(zhì)。舉例來講(不作限制),計(jì)算機(jī)可讀介質(zhì)可以包括計(jì)算機(jī)存儲介質(zhì)和通信介質(zhì)。計(jì)算機(jī)存儲介質(zhì)包括以用于諸如計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其他數(shù)據(jù)等信息的存儲的任何方法或技術(shù)來實(shí)現(xiàn)的易失性和非易失性、可移動(dòng)和不可移動(dòng)介質(zhì)。
計(jì)算機(jī)存儲介質(zhì)包括(但不局限于)RAM、ROM、PROM、EPROM、EEPROM、閃存或其他存儲器技術(shù);CD-ROM、數(shù)字多功能盤(DVD)、或其他光盤存儲器;盒式磁帶、磁帶、磁盤存儲器、或其他磁性存儲設(shè)備;或可以被用來存儲所需信息并可以由計(jì)算機(jī)110訪問的其他任何介質(zhì)。通信介質(zhì)通常具體表現(xiàn)為諸如載波或其他傳輸機(jī)制等已調(diào)制數(shù)據(jù)信號中的計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其他數(shù)據(jù),它包括任何信息傳遞介質(zhì)。術(shù)語“已調(diào)制數(shù)據(jù)信號”意味著一種信號,其一個(gè)或多個(gè)特征按為該信號中的信息編碼的方式來加以設(shè)置或更改。舉例來講(不作限制),通信介質(zhì)包括有線介質(zhì)(例如,有線網(wǎng)絡(luò)或直線連接)和無線介質(zhì)(例如,聲音、RF、紅外線和其他無線介質(zhì))。以上任何內(nèi)容的組合也應(yīng)該被包括在計(jì)算機(jī)可讀介質(zhì)的范圍以內(nèi)。
系統(tǒng)存儲器130包括采取易失性和/或非易失性存儲器形式的計(jì)算機(jī)存儲介質(zhì),例如,只讀存儲器(ROM)131和隨機(jī)存取存儲器(RAM)132?;据斎?輸出系統(tǒng)133(BIOS)通常被存儲在ROM 131中,它包含有助于在計(jì)算機(jī)110內(nèi)的各個(gè)元件之間傳送信息(例如,在啟動(dòng)期間)的基本例程。RAM 132通常包含可立即由處理單元120訪問和/或目前正由處理單元120操作的數(shù)據(jù)和/或程序模塊。舉例來講(不作限制),圖1示出了操作系統(tǒng)134、應(yīng)用程序135、其他程序模塊136和程序數(shù)據(jù)137。
計(jì)算機(jī)110也可以包括其他可移動(dòng)/不可移動(dòng)、易失性/非易失性計(jì)算機(jī)存儲介質(zhì)。只舉例來講,圖1示出了從不可移動(dòng)的非易失性磁性介質(zhì)讀取或?qū)ζ鋵懭氲挠脖P驅(qū)動(dòng)器141、從可移動(dòng)的非易失性磁盤152讀取或?qū)ζ鋵懭氲拇疟P驅(qū)動(dòng)器151,以及從可移動(dòng)的非易失性光盤156(例如,CD ROM或其他光學(xué)介質(zhì))讀取或?qū)ζ鋵懭氲墓獗P驅(qū)動(dòng)器155??梢杂糜谠撌纠圆僮鳝h(huán)境中的其他可移動(dòng)/不可移動(dòng)的易失性/非易失性計(jì)算機(jī)存儲介質(zhì)包括(但不局限于)盒式磁帶、閃存卡、數(shù)字多功能盤、數(shù)字錄像帶、固態(tài)RAM、固態(tài)ROM等。硬盤驅(qū)動(dòng)器141通常通過不可移動(dòng)的存儲器接口(例如,接口140)而被連接到系統(tǒng)總線121,磁盤驅(qū)動(dòng)器151和光盤驅(qū)動(dòng)器155通常由可移動(dòng)的存儲器接口(例如,接口150)連接到系統(tǒng)總線121。
以上所討論的和圖1中所示出的這些驅(qū)動(dòng)器及其相關(guān)聯(lián)的計(jì)算機(jī)存儲介質(zhì)為計(jì)算機(jī)110提供計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊和其他數(shù)據(jù)的存儲。在圖1中,例如,硬盤驅(qū)動(dòng)器141被示為存儲操作系統(tǒng)144、應(yīng)用程序145、其他程序模塊146和程序數(shù)據(jù)147。注意,這些組件可以等同于或不同于操作系統(tǒng)134、應(yīng)用程序135、其他程序模塊136和程序數(shù)據(jù)137。這里為操作系統(tǒng)144、應(yīng)用程序145、其他程序模塊146和程序數(shù)據(jù)147提供不同的標(biāo)號,以說明它們至少是不同的副本。用戶可以通過輸入設(shè)備(例如,鍵盤162和通常指鼠標(biāo)、跟蹤球或觸摸墊的定點(diǎn)設(shè)備161),來將命令和信息輸入計(jì)算機(jī)110。
其他輸入設(shè)備(未示出)可以包括操縱桿、游戲墊、圓盤式衛(wèi)星天線、掃描儀、無線電接收器、以及電視或廣播視頻接收器、或類似的輸入設(shè)備。這些和其他輸入設(shè)備經(jīng)常通過被耦合到系統(tǒng)總線121的有線或無線用戶輸入接口160連接到處理單元120,但也可以由其他常規(guī)接口和總線結(jié)構(gòu)(例如,并行端口、游戲端口、通用串行總線(USB)、IEEE 1394接口、BluetoothTM(藍(lán)牙)無線接口、IEEE 802.11無線接口等)來連接。另外,計(jì)算機(jī)110也可以包括語音或音頻輸入設(shè)備(例如,話筒或話筒陣列198)、以及擴(kuò)音器197或經(jīng)由音頻接口199而連接的其他聲音輸出設(shè)備,也包括常規(guī)的有線或無線接口(例如,并行、串行、USB、IEEE 1394、BluetoothTM等)。
監(jiān)視器191或其他類型的顯示設(shè)備也經(jīng)由接口(例如,視頻接口190)而被連接到系統(tǒng)總線121。除監(jiān)視器以外,計(jì)算機(jī)也可以包括其他外圍輸出設(shè)備(例如,打印機(jī)196),這些外圍輸出設(shè)備可以通過輸出外圍接口195來連接。
計(jì)算機(jī)110可以使用與一臺或多臺遠(yuǎn)程計(jì)算機(jī)(例如,遠(yuǎn)程計(jì)算機(jī)180)的邏輯連接而在聯(lián)網(wǎng)環(huán)境中進(jìn)行操作。遠(yuǎn)程計(jì)算機(jī)180可以是個(gè)人計(jì)算機(jī)、服務(wù)器、路由器、網(wǎng)絡(luò)PC、對等設(shè)備、或其他普通網(wǎng)絡(luò)節(jié)點(diǎn),它通常包括以上相對于計(jì)算機(jī)110而描述的許多或所有元件,盡管圖1中只示出了記憶存儲設(shè)備181。圖1中所描繪的邏輯連接包括局域網(wǎng)(LAN)171和廣域網(wǎng)(WAN)173,但也可以包括其他網(wǎng)絡(luò)。這類聯(lián)網(wǎng)環(huán)境在辦公室、企業(yè)范圍的計(jì)算機(jī)網(wǎng)絡(luò)、內(nèi)聯(lián)網(wǎng)和因特網(wǎng)中很普遍。
當(dāng)被用于LAN聯(lián)網(wǎng)環(huán)境中時(shí),計(jì)算機(jī)110通過網(wǎng)絡(luò)接口或適配器170而被連接到LAN 171。當(dāng)被用于WAN聯(lián)網(wǎng)環(huán)境中時(shí),計(jì)算機(jī)110通常包括調(diào)制解調(diào)器172或用于通過WAN 173(例如,因特網(wǎng))建立通信的其他裝置。調(diào)制解調(diào)器172可以是內(nèi)置的,也可以是外置的,可以經(jīng)由用戶輸入接口160或其他適當(dāng)?shù)臋C(jī)制而被連接到系統(tǒng)總線121。在聯(lián)網(wǎng)環(huán)境中,相對于計(jì)算機(jī)110或其各個(gè)部分而描繪的程序模塊可以被存儲在遠(yuǎn)程記憶存儲設(shè)備中。舉例來講(不作限制),圖1將遠(yuǎn)程應(yīng)用程序185示為駐留在存儲設(shè)備181上。將會理解,所示的網(wǎng)絡(luò)連接起示例性的作用,可以使用在計(jì)算機(jī)之間建立通信鏈路的其他手段。
現(xiàn)在已討論了示例性操作環(huán)境,本描述的剩余部分將致力于討論實(shí)施“PeerStreamer”的程序模塊和過程,該“PeerStreamer”提供對用于分布式媒體流傳送的接收器驅(qū)動(dòng)對等(P2P)網(wǎng)絡(luò)中的一個(gè)或多個(gè)對等體的群集的動(dòng)態(tài)實(shí)時(shí)客戶機(jī)控制。
2.0引言如這里所描述的“PeerStreamer”提供用于松散耦合的P2P網(wǎng)絡(luò)的接收器驅(qū)動(dòng)對等(P2P)媒體流傳送。該網(wǎng)絡(luò)中的對等體只執(zhí)行簡單的操作、可以高速緩存流媒體的全部或一部分、不與其他對等體協(xié)作、可以是不可靠的、并可以在任何給定的流傳送會話期間脫機(jī)或聯(lián)機(jī)。該網(wǎng)絡(luò)中的客戶機(jī)進(jìn)行實(shí)時(shí)操作,以便協(xié)調(diào)對等體、使媒體從多個(gè)對等體流傳送、執(zhí)行負(fù)載平衡、處理對等體的聯(lián)機(jī)/脫機(jī)狀態(tài)、以及執(zhí)行對流媒體的解碼和呈現(xiàn)。
注意,這里所描述的PeerStreamer系統(tǒng)適用于具有多個(gè)客戶機(jī)和對等體的大型P2P網(wǎng)絡(luò),但出于解釋清楚的目的,下文將通常涉及個(gè)別的客戶機(jī)。本領(lǐng)域的技術(shù)人員將會理解,由PeerStreamer提供的所描述的系統(tǒng)和方法適用于多個(gè)客戶機(jī)。此外,由于這里所描述的對等體用來將媒體供應(yīng)給接收器或客戶機(jī),因此,P2P網(wǎng)絡(luò)中的對等體群集在這里通常被稱作“對等體”或“服務(wù)對等體”。也應(yīng)該注意,如這里所描述的,這些“服務(wù)對等體”不應(yīng)該與特定的流媒體文件最初所起源的“媒體服務(wù)器”混淆。
一般而言,PeerStreamer在P2P網(wǎng)絡(luò)(例如,圖2所示的網(wǎng)絡(luò))中進(jìn)行操作。對于特定的流傳送會話,“服務(wù)器”200被定義為P2P網(wǎng)絡(luò)中最初發(fā)起流媒體的節(jié)點(diǎn);“客戶機(jī)”(或接收器)210被定義為當(dāng)前請求流媒體的節(jié)點(diǎn);并且,“服務(wù)對等體”220被定義為向客戶機(jī)供應(yīng)流媒體的完整或部分副本的節(jié)點(diǎn)。
一般而言,服務(wù)器200、客戶機(jī)210和服務(wù)對等體220都是與網(wǎng)絡(luò)(例如,因特網(wǎng))連接的最終用戶節(jié)點(diǎn)。由于服務(wù)器200總是能夠供應(yīng)流媒體,因此,該服務(wù)器節(jié)點(diǎn)也擔(dān)當(dāng)服務(wù)對等體220。服務(wù)器節(jié)點(diǎn)200也可以執(zhí)行無法由服務(wù)對等體220執(zhí)行的媒體管理功能,例如,維持可用服務(wù)對等體的列表、執(zhí)行數(shù)字權(quán)利管理(DRM)功能等等。此外,對于常規(guī)的P2P方案,當(dāng)部署越來越多的流對等體節(jié)點(diǎn)220時(shí),這里所描述的PeerStreamer會得益于效率的提高。特別是,隨著流對等體節(jié)點(diǎn)220的數(shù)目的增加,媒體服務(wù)器200上的負(fù)載將會減少,從而運(yùn)行起來費(fèi)用不會太大,同時(shí),每個(gè)客戶機(jī)節(jié)點(diǎn)210將能夠在特定的媒體流傳送會話期間接收好得多的媒體質(zhì)量。
此外,應(yīng)該顯而易見,對于許多其他的P2P類型的網(wǎng)絡(luò),特定節(jié)點(diǎn)的角色可能會改變。例如,特定節(jié)點(diǎn)可以在一個(gè)特定的流傳送會話中擔(dān)當(dāng)客戶機(jī)210,同時(shí),在另一個(gè)會話中擔(dān)當(dāng)服務(wù)對等體220。另外,特定節(jié)點(diǎn)可以同時(shí)擔(dān)當(dāng)客戶節(jié)點(diǎn)210和服務(wù)器200或服務(wù)對等體220,以便同時(shí)流傳送一個(gè)或多個(gè)媒體文件或媒體文件的各個(gè)部分,同時(shí),從一個(gè)或多個(gè)其他服務(wù)對等體接收其他流媒體。
在流傳送會話期間,客戶機(jī)200首先定位保持部分或全部所需媒體的多個(gè)附近的對等體220,然后將媒體從這多個(gè)對等體(可以包括服務(wù)器200)流傳送。因此,每個(gè)服務(wù)對等體220通過供應(yīng)客戶機(jī)210的下載請求的一個(gè)部分,來協(xié)助服務(wù)器200減輕總上傳負(fù)擔(dān)。結(jié)果,尤其在有許多客戶機(jī)的情況下,客戶機(jī)210經(jīng)常可以接收好得多的流媒體質(zhì)量,因?yàn)楫?dāng)有許多流對等體220來協(xié)助服務(wù)器200時(shí),有大得多的服務(wù)帶寬可用。
對于任何P2P網(wǎng)絡(luò),每一個(gè)別的對等體220不直接得益于服務(wù)一個(gè)或多個(gè)客戶機(jī)210。但是,在一個(gè)實(shí)施例中,常規(guī)的P2P“公平機(jī)制”用來確保與在擔(dān)當(dāng)服務(wù)對等體的過程中還沒有平等地合作的另一個(gè)對等體相比較,合作對等體220在供應(yīng)隨后的流請求方面接收更高的優(yōu)先級。因此,當(dāng)利用PeerStreamer來實(shí)現(xiàn)這種公平機(jī)制時(shí),合作對等體220通??梢云诖谙乱淮嗡兂煽蛻魴C(jī)210時(shí)會有更好的媒體質(zhì)量。
因此,認(rèn)識到每個(gè)服務(wù)對等體220在任何特定的流傳送會話期間有效地贊同客戶機(jī)210和服務(wù)器200的事實(shí),良好的設(shè)計(jì)原理是確保服務(wù)對等體是輕量級的,且P2P網(wǎng)絡(luò)是松散耦合的。換言之,服務(wù)對等體220應(yīng)該只需要執(zhí)行具有低CPU負(fù)載的最簡單的操作。另外,在一個(gè)實(shí)施例中,服務(wù)對等體220也可以選擇只高速緩存媒體的一部分,以便將本質(zhì)上由每個(gè)服務(wù)對等體贈予的存儲空間減到最小。此外,為了降低各個(gè)對等體220之間的通信的任何帶寬成本,不應(yīng)該要求每個(gè)服務(wù)對等體與其他對等體協(xié)作。最后,運(yùn)行于任何特定的服務(wù)對等體220上的其他程序可以在于任何特定的時(shí)刻要求CPU和網(wǎng)絡(luò)資源方面具有更高的優(yōu)先級,或者,特定的對等體可以在任何時(shí)候僅僅被打開或關(guān)閉。結(jié)果,特定的服務(wù)對等體200可能是不可靠的,可用的服務(wù)帶寬中有波動(dòng)。實(shí)際上,在流傳送會話期間的任何時(shí)候,特定的服務(wù)對等體可以僅僅脫機(jī)或聯(lián)機(jī)。
相反,在客戶機(jī)210上增加負(fù)擔(dān),以便將資源投入于流傳送會話是公平合理的。特別是,客戶機(jī)210需要從多個(gè)對等體220接收該流媒體,所以,它已被連接到這些對等體。另外,客戶機(jī)210有動(dòng)力來有效地協(xié)調(diào)或管理對等體200,以便改善其自己的流傳送體驗(yàn)。因此,這里所描述的PeerStreamer系統(tǒng)和方法利用對松散耦合的P2P網(wǎng)絡(luò)中的服務(wù)對等體的接收器驅(qū)動(dòng)控制,其中,客戶機(jī)負(fù)責(zé)在各個(gè)流對等體之中發(fā)送和協(xié)調(diào)數(shù)據(jù)包請求。
2.1系統(tǒng)縱覽如上所述,這里所描述的PeerStreamer提供一種用于松散耦合的P2P網(wǎng)絡(luò)的接收器驅(qū)動(dòng)對等(P2P)媒體流傳送系統(tǒng)和方法。該網(wǎng)絡(luò)中的對等體只執(zhí)行簡單的操作、可以高速緩存流媒體的全部或一部分、不與其他對等體協(xié)作、可能是不可靠的、以及可以在任何給定的流傳送會話期間脫機(jī)或聯(lián)機(jī)。該網(wǎng)絡(luò)中的客戶機(jī)(或接收器)進(jìn)行實(shí)時(shí)操作以便協(xié)調(diào)對等體、將媒體從多個(gè)對等體流傳送、執(zhí)行負(fù)載平衡、處理對等體的聯(lián)機(jī)/脫機(jī)狀態(tài)、以及執(zhí)行對流媒體的解碼和呈現(xiàn)。
一般而言,PeerStreamer提供接收器驅(qū)動(dòng)媒體流傳送。PeerStreamer操作始于每個(gè)接收客戶機(jī)檢索保持所請求的流媒體的全部或一部分的附近的服務(wù)對等體的列表。注意,在這個(gè)上下文中,媒體服務(wù)器也可以擔(dān)當(dāng)服務(wù)對等體之一。這個(gè)列表包括一組保持服務(wù)媒體的完整或部分副本的一個(gè)或多個(gè)相鄰服務(wù)對等體的IP地址以及監(jiān)聽端口。用于檢索這個(gè)列表的方法包括1)直接從媒體服務(wù)器中檢索該列表;2)從已知的服務(wù)對等體中檢索該列表;以及3)使用用于識別服務(wù)對等體的分布式散列表(DHT)方法。
一旦客戶機(jī)已檢索可用服務(wù)對等體列表,該客戶機(jī)就連接到每個(gè)服務(wù)對等體,并獲得其“可用性向量”。一般而言,每個(gè)服務(wù)對等體的可用性向量是每個(gè)服務(wù)對等體所保持的媒體的確切部分的簡潔描述。然后,這個(gè)可用性向量被客戶機(jī)用來確切地確定服務(wù)對等體保持已編碼媒體的什么塊。
例如,在特定服務(wù)對等體保持全部服務(wù)媒體的情況下,該對等體的可用性向量可以是指出該服務(wù)對等體保持完整的媒體副本的單個(gè)標(biāo)志。同樣,如果服務(wù)對等體只保持服務(wù)媒體的一部分,那么,該服務(wù)對等體的可用性向量將用信號通知客戶機(jī)該服務(wù)對等體保持該媒體的什么部分,例如,由該服務(wù)對等體保持的每個(gè)數(shù)據(jù)包的塊數(shù)以及塊索引。
另外,在使用附加編碼(例如,以下所描述的各種擦除編碼技術(shù))的情況下,可用性向量將包括分配給服務(wù)對等體的媒體擦除編碼關(guān)鍵字、以及由服務(wù)對等體保持的擦除塊的數(shù)目。此外,如果服務(wù)對等體使用擦除編碼,并且該媒體也被嵌入編碼,那么,可用性向量將包括所分配的媒體擦除編碼關(guān)鍵字、以及該嵌入編碼所使用的不同比特率水平處的每個(gè)數(shù)據(jù)包的擦除塊的數(shù)目。
給定可用性向量,下一個(gè)步驟是讓客戶機(jī)檢索關(guān)于將要從對等體集群流傳送的媒體的“媒體頭部”和“媒體結(jié)構(gòu)”的長度。在檢索了這些長度之后,客戶機(jī)計(jì)算該媒體頭部和媒體結(jié)構(gòu)的“數(shù)據(jù)單元ID”,并且,作為已分析每個(gè)服務(wù)對等體的可用性向量的結(jié)果,根據(jù)對于什么對等體具有什么數(shù)據(jù)包ID的了解,來從對等體集群內(nèi)的一個(gè)或多個(gè)對等體中檢索它們。
一旦媒體頭部到達(dá),客戶機(jī)就分析該媒體頭部,然后配置或初始化解碼和呈現(xiàn)或重放正被流傳送的特定類型媒體(即MPEG 1/2/4、WMA、WMV等)所需要的任何音頻/視頻解碼器和呈現(xiàn)設(shè)備。一旦完成了這個(gè)初始設(shè)置階段,客戶機(jī)隨后就開始協(xié)調(diào)來自如下所述的對等體群集的媒體主體的正在進(jìn)行的流傳送。特別是,給定特定流媒體的前述媒體結(jié)構(gòu),客戶機(jī)計(jì)算該流媒體的數(shù)據(jù)包的數(shù)據(jù)單元ID,然后從這各個(gè)對等體中逐個(gè)檢索那些數(shù)據(jù)包。
然后,客戶機(jī)周期性地更新服務(wù)對等體列表(使用用于識別服務(wù)對等體的前述方法之一),并連接到潛在的新服務(wù)對等體。在一個(gè)測試實(shí)施例中,客戶機(jī)通過發(fā)出對于每個(gè)潛在的服務(wù)對等體的周期常規(guī)TCP連接函數(shù)的調(diào)用,來核對潛在的新服務(wù)對等體。在客戶機(jī)建立與新服務(wù)對等體的連接之后,它首先檢索前述可用性向量。然后,在接收器/客戶機(jī)的方向上,該新對等體可以加入群集中的其他活動(dòng)對等體。然后,客戶機(jī)協(xié)調(diào)這些對等體、根據(jù)其服務(wù)帶寬和內(nèi)容可用性來平衡這些對等體的服務(wù)負(fù)載、并將斷開的或超時(shí)的對等體的無法履行的請求重定向到其他活動(dòng)對等體中的一個(gè)或多個(gè)。然后,流傳送操作按這個(gè)方式繼續(xù)進(jìn)行,直到全部流媒體被接收,或者該流傳送操作被用戶停止。
2.2系統(tǒng)體系結(jié)構(gòu)縱覽以上概述的過程由圖3中的通用系統(tǒng)框圖來示出。具體地,如這里所描述的,圖3中的系統(tǒng)框圖示出了用于實(shí)現(xiàn)PeerStreamer的程序模塊之間的相互關(guān)系。應(yīng)該注意,由圖3中的折線或虛線來表示的任何方框以及方框之間的互連表示這里所描述的PeerStreamer的替換實(shí)施例;并且,如下所述,可以結(jié)合在這整個(gè)文檔中描述的其他替換實(shí)施例來使用任何或所有這些替換實(shí)施例。
一般而言,通過讓客戶機(jī)使用對等體位置模塊305來檢索或識別保持所請求的流媒體的全部或一部分的附近的服務(wù)對等體220的列表310,PeerStreamer開始對于每個(gè)客戶機(jī)210的操作。注意,在這個(gè)上下文中,媒體服務(wù)器200也可以擔(dān)當(dāng)服務(wù)對等體220之一。對等體位置模塊305使用各種方法來檢索對等體列表310。例如,在一個(gè)實(shí)施例中,直接從服務(wù)器200提供對等體列表310。在另一個(gè)實(shí)施例中,從已知的服務(wù)對等體220中檢索對等體列表310。最后,在又一個(gè)實(shí)施例中,對等體位置模塊305使用常規(guī)的分布式散列表(DHT)來識別服務(wù)對等體220。如上所述,對等體列表305包括保持服務(wù)媒體的完整或部分副本的一個(gè)或多個(gè)相鄰服務(wù)對等體220的IP地址以及監(jiān)聽端口。
服務(wù)媒體本身由存在于服務(wù)器200上的媒體編碼模塊300通過使用多種常規(guī)編解碼器(包括例如MPEG 1/2/4、WMA、WMV等)中的任何一個(gè)來進(jìn)行編碼。注意,如這里進(jìn)一步詳細(xì)描述的,用來為媒體編碼的編解碼器可以是嵌入的或非嵌入的。另外,在一個(gè)實(shí)施例中,如以下進(jìn)一步詳細(xì)描述的“高速率擦除彈性編碼”結(jié)合任何編解碼器來使用,以提供對本質(zhì)上不可靠的服務(wù)對等體220的提高的健壯性。
最初,所編碼的媒體只存在于最初在其上為該媒體編碼的服務(wù)器上。然后,它全部或部分地被分發(fā)給服務(wù)對等體220中的一個(gè)或多個(gè)(再一次,服務(wù)器200也可以擔(dān)當(dāng)用于媒體流傳送用途的服務(wù)對等體)。對服務(wù)對等體220的分發(fā)要么是媒體流的數(shù)據(jù)包對對等體的直接分發(fā)的結(jié)果;要么作為當(dāng)媒體最初被流傳送到該服務(wù)對等體時(shí)令已流傳送該媒體的一個(gè)或多個(gè)對等體(當(dāng)擔(dān)當(dāng)客戶機(jī)210時(shí))僅僅高速緩存該媒體的全部或一部分的結(jié)果。在任何情況下,出于解釋的目的,假設(shè)有多個(gè)已知的對等體(如對等體列表310所定義的),并且,每個(gè)對等體保持將要流傳送的已編碼媒體的全部或一部分。
一旦客戶機(jī)210已檢索可用服務(wù)對等體的列表310,該客戶機(jī)就經(jīng)由從每個(gè)對等體中檢索前述可用性向量的可用性向量檢索模塊320連接到每個(gè)服務(wù)對等體220。接下來,給定每個(gè)對等體320的可用性向量的信息,客戶機(jī)210隨后使用媒體頭部/媒體結(jié)構(gòu)分析模塊325來檢索關(guān)于將要從對等體群220流傳送的媒體頭部和媒體結(jié)構(gòu)的“媒體頭部”和“媒體結(jié)構(gòu)”的長度。在檢索了這些長度之后,客戶機(jī)210分析該媒體頭部,然后使用客戶機(jī)配置模塊330來配置或初始化解碼和呈現(xiàn)或重放正被流傳送的特定類型媒體(即MPEG 1/2/4、WMA、WMV等)所需要的任何音頻/視頻解碼器和呈現(xiàn)設(shè)備。
此外,媒體頭部/媒體結(jié)構(gòu)分析模塊325也根據(jù)該媒體結(jié)構(gòu)和媒體頭部的分析來確定在對將要流傳送的媒體進(jìn)行編碼的過程中,是否已使用嵌入編碼媒體或高速率擦除彈性編碼中的任何一項(xiàng)或兩項(xiàng)。
然后,數(shù)據(jù)單元ID計(jì)算模塊335用于基于媒體頭部和媒體結(jié)構(gòu)中所包括的信息來計(jì)算流媒體的數(shù)據(jù)包的“數(shù)據(jù)單元ID”。然后,數(shù)據(jù)單元請求模塊340使用所計(jì)算的數(shù)據(jù)單元ID向?qū)Φ润w群機(jī)220中的各個(gè)對等體請求流媒體的特定數(shù)據(jù)包或數(shù)據(jù)塊。
在PeerStreamer使用嵌入編碼媒體的情況下,如以下進(jìn)一步詳細(xì)描述的,流傳送比特率根據(jù)可用的服務(wù)帶寬和客戶機(jī)隊(duì)列狀態(tài)而改變。在此情況下,由數(shù)據(jù)單元請求模塊340提出的對于媒體數(shù)據(jù)包或數(shù)據(jù)單元的檢索的正在進(jìn)行的請求對應(yīng)于將基于可用帶寬來提供最小的速率失真的那些數(shù)據(jù)包(或數(shù)據(jù)塊)。另外,在使用高速率擦除彈性編碼的另一情況下,多個(gè)服務(wù)對等體保持部分媒體而無沖突,以便客戶機(jī)僅僅檢索固定數(shù)量的擦除編碼塊,而不管在哪里檢索和檢索什么特定的塊。
在任何情況下,當(dāng)客戶機(jī)210經(jīng)由數(shù)據(jù)單元處理模塊345來檢索媒體的流傳送塊時(shí),該客戶機(jī)將會要么如下所述那樣傳遞將要被解碼的那些數(shù)據(jù)包,要么數(shù)據(jù)單元處理模塊將首先從數(shù)據(jù)塊重建該媒體流的數(shù)據(jù)包(見以下關(guān)于高速率擦除編碼的討論)。此外,客戶機(jī)210將周期性地更新服務(wù)對等體列表310(使用用于識別服務(wù)對等體的前述方法之一)。無論何時(shí)或按某個(gè)所需的頻率更新了列表310,客戶機(jī)210將連接到潛在的新服務(wù)對等體,以檢索前述可用性向量。然后,接收器/客戶機(jī)210的方向上,該新對等體可以加入群集220中的其他活動(dòng)對等體。
然后,客戶機(jī)210協(xié)調(diào)對等體320、根據(jù)其服務(wù)帶寬和內(nèi)容可用性來平衡這些對等體的服務(wù)負(fù)載、并將斷開的或超時(shí)的對等體的無法履行的請求重定向到其他活動(dòng)對等體中的一個(gè)或多個(gè)。然后,流傳送操作按這個(gè)方式繼續(xù)進(jìn)行,直到全部流媒體經(jīng)由解碼/呈現(xiàn)/重放模塊350而被加以接收、解碼、呈現(xiàn)和重放。注意,經(jīng)由常規(guī)的顯示設(shè)備355和/或揚(yáng)聲器360來提供已解碼媒體的重放,向這些顯示設(shè)備355和/或揚(yáng)聲器360提供其來自解碼/呈現(xiàn)/重放模塊350的輸入。
3.0操作縱覽上述程序模塊用于實(shí)現(xiàn)PeerStreamer。如以上概述,PeerStreamer提供用于松散耦合的P2P網(wǎng)絡(luò)的接收器驅(qū)動(dòng)對等(P2P)媒體流傳送。以下各個(gè)章節(jié)詳細(xì)討論P(yáng)eerStreamer的操作、以及用于實(shí)現(xiàn)根據(jù)圖2而在章節(jié)2中描述的程序模塊的示例性方法。特別地,在詳細(xì)描述以下在章節(jié)3.1和3.2中所提供的PeerStreamer操作之后,在圖10中呈現(xiàn)操作流程圖,它鑒于該詳細(xì)描述來概述PeerStreamer的總操作。
3.1PeerStreamer的操作細(xì)節(jié)以下各段詳述這里所描述的PeerStreamer的特定操作實(shí)施例和替換實(shí)施例。具體地,以下各段描述PeerStreamer所使用的“流媒體模型”;所請求的流媒體的“媒體結(jié)構(gòu)”(基本上是定義計(jì)算用于檢索媒體數(shù)據(jù)包或“數(shù)據(jù)單元”的數(shù)據(jù)ID所需要的流媒體的特征的“伴隨文件”);表示用于流傳送的媒體數(shù)據(jù)包的固定尺寸部分的PeerStreamer數(shù)據(jù)單元;用于降低存儲要求的媒體的局部高速緩存;用于提高PeerStreamer系統(tǒng)對本質(zhì)上不可靠的服務(wù)對等體的健壯性的媒體的高速率擦除編碼。
3.1.1流媒體模型一般而言,流媒體包括當(dāng)?shù)竭_(dá)時(shí)被解碼和呈現(xiàn)的數(shù)據(jù)包流(因此具有名稱流傳送)。若無流傳送,在可以使用它之前,必須以一個(gè)大塊下載全部媒體。在圖4中,示出了PeerStreamer所使用的流媒體文件的通用結(jié)構(gòu)。
具體地,如圖4所示的,媒體由“媒體頭部”來引導(dǎo),它包含描述該媒體的全局信息,例如,該媒體中的通道數(shù)目、每個(gè)通道的屬性和特征(音頻采樣率、視頻分辨率/幀速率)、所使用的編解碼器、該媒體的作者/版權(quán)持有者等。通常在流傳送會話開始之前下載媒體頭部,以便客戶機(jī)可以設(shè)立這些必要的工具來對隨后接收的數(shù)據(jù)包進(jìn)行解碼和呈現(xiàn)。注意,流媒體可以包括幾個(gè)通道,其中每個(gè)通道是可以被獨(dú)立地選擇和解碼的單獨(dú)的媒體分量,例如,英語音軌、西班牙語音軌、4∶3視頻、16∶9視頻等。
媒體頭部后面是媒體數(shù)據(jù)包序列,其中每個(gè)媒體數(shù)據(jù)包包含跨越短時(shí)期的某個(gè)通道的壓縮比特流。每個(gè)媒體數(shù)據(jù)包由數(shù)據(jù)包頭部來引導(dǎo),它包含諸如通道索引、數(shù)據(jù)包的起始時(shí)間標(biāo)記、數(shù)據(jù)包的持續(xù)時(shí)間、以及標(biāo)志數(shù)量等信息,例如,該數(shù)據(jù)包是否是關(guān)鍵幀(例如,MPEG I幀)、該數(shù)據(jù)包是否是嵌入編碼的數(shù)據(jù)包(具有可截?cái)嗟谋忍亓?等等。然后是數(shù)據(jù)包的壓縮比特流。
如今大多數(shù)的常規(guī)壓縮媒體編解碼器(例如,MPEG1/2/4音頻/視頻、WMA/WMV、RealAudio/Realvideo等)生成非嵌入的編碼媒體數(shù)據(jù)包。因此,無法更改這類系統(tǒng)所生成的媒體數(shù)據(jù)包的大小。而且,只要這一比特流中的媒體數(shù)據(jù)包之一被丟失或被過度延遲,結(jié)果都是要么該媒體不是可解碼的,要么該重放變得紊亂或間斷,從而降低流媒體的重放質(zhì)量。為了保持與這些常規(guī)編解碼器相兼容,在一個(gè)實(shí)施例中,PeerStreamer系統(tǒng)和方法允許媒體數(shù)據(jù)包是非嵌入編碼的(不可縮放)。但是,除了支持傳統(tǒng)的壓縮媒體格式以外,PeerStreamer在一個(gè)實(shí)施例中也支持嵌入的編碼媒體。
利用嵌入的編碼媒體,每個(gè)媒體數(shù)據(jù)包按可以被獨(dú)立地向后截?cái)嗟姆椒▉砑右跃幋a。一般而言,兩種類型的嵌入編碼得到PeerStreamer的支持——位平面編碼和增強(qiáng)層編碼。注意,對本領(lǐng)域的技術(shù)人而言,這兩種類型的嵌入編碼都是公知的。因此,在以下各段中,將只概括地描述這些編碼。
例如,利用位平面編碼,通常通過逐個(gè)位平面地(從最高位平面(MSB)到最低位平面(LSB))對一音頻/視頻變換系數(shù)塊進(jìn)行編碼,來實(shí)現(xiàn)媒體塊的可縮放編碼。如果在編碼之后截?cái)啾忍亓?,那么,為所有這些系數(shù)的最高位平面中的幾個(gè)保留該信息。而且,被截?cái)嗟谋忍亓鲗?yīng)于較低比特率的壓縮比特流,它可以被認(rèn)為是嵌入在較高比特率率的壓縮比特流中,因而是具有名稱嵌入編碼。結(jié)果,可以截?cái)嘣撉度刖幋a器所生成的媒體數(shù)據(jù)包,具有適度的速率-失真折衷。
利用增強(qiáng)層編碼,媒體內(nèi)容被壓縮成基層以及一個(gè)或多個(gè)增強(qiáng)層,其中的每個(gè)層通常占據(jù)單獨(dú)的通道。具體地,這類編碼允許將要被接收的最低質(zhì)量媒體流預(yù)訂該基層。隨著每個(gè)接連的增強(qiáng)層的添加,解碼的媒體質(zhì)量得到改善。因此,利用這類系統(tǒng),取決于可用帶寬,并通過預(yù)訂基層和盡可能多的增強(qiáng)層,接收器或客戶機(jī)通??蓛?yōu)化所接收的信息的質(zhì)量。
3.1.2PeerStreamer媒體結(jié)構(gòu)為了在接收器驅(qū)動(dòng)模式中進(jìn)行操作,PeerStreamer客戶機(jī)需要知道將要被請求的媒體數(shù)據(jù)包的結(jié)構(gòu),以便它可以知道向每個(gè)對等體請求什么數(shù)據(jù)包和每個(gè)數(shù)據(jù)包的什么部分。該信息在一種“伴隨文件”中提供,該“伴隨文件”包括將要被請求的流媒體的結(jié)構(gòu)的定義。一般而言,該媒體結(jié)構(gòu)為PeerStreamer客戶機(jī)提供全部媒體的概觀(例如,每個(gè)數(shù)據(jù)包的起始時(shí)間標(biāo)記、每個(gè)數(shù)據(jù)包的持續(xù)時(shí)間等),以便它可以智能地計(jì)劃P2P流傳送會話,并確定特定的媒體數(shù)據(jù)包及時(shí)到達(dá)以供解碼和呈現(xiàn)。注意,在原先為媒體文件編碼時(shí),最初生成包含媒體結(jié)構(gòu)信息的伴隨文件;然后,該伴隨文件在每個(gè)流傳送會話的起始處請求時(shí),連同該媒體頭部的初始請求一起被流傳送到客戶機(jī)。注意,在由常規(guī)編解碼器為該媒體編碼之后,通過分析該媒體頭部和數(shù)據(jù)包頭部,也可以生成伴隨文件中的信息。
具體地,一組數(shù)據(jù)包的媒體結(jié)構(gòu)由數(shù)據(jù)包頭部加上數(shù)據(jù)包比特流長度組成。因此,該信息可以由客戶機(jī)用來確定應(yīng)該請求哪些特定的數(shù)據(jù)包、應(yīng)該請求那些數(shù)據(jù)包的時(shí)間、以及應(yīng)該向其請求那些數(shù)據(jù)包的對等體。因此,PeerStreamer在流“設(shè)置”階段首先檢索全部媒體的媒體結(jié)構(gòu)。通過在實(shí)際上流傳送媒體之前檢索信息,可引起流設(shè)置中的小延遲。但是,通過在媒體流傳送之前首先檢索信息,在帶寬方面沒有用于將媒體結(jié)構(gòu)信息供應(yīng)給客戶機(jī)的額外成本(在媒體流傳送期間)。
注意,相對于流媒體的總長度而言,起始流中的前述延遲通常很小。例如,在PeerStreamer的一個(gè)測試實(shí)施例中,大小范圍從31兆字節(jié)(MB)到49MB的五個(gè)測試影片剪輯具有在大約37千字節(jié)(KB)至大約53KB的范圍內(nèi)的媒體結(jié)構(gòu)伴隨文件。所以,該媒體結(jié)構(gòu)大小已被觀察到是總媒體主體的大約0.10-0.15%的數(shù)量級。所以,假設(shè)服務(wù)帶寬大于或等于媒體比特率,并且媒體結(jié)構(gòu)是媒體主體的0.15%,那么,下載10分鐘剪輯的媒體結(jié)構(gòu)會引起少于0.9s的額外的延遲。
在一個(gè)相關(guān)實(shí)施例中,為某個(gè)預(yù)定長度(即10秒、30秒、1分鐘等)的順序媒體段生成局部媒體結(jié)構(gòu)。然后,在對應(yīng)的媒體段將要在不遠(yuǎn)的將來被流傳送之前,只檢索每個(gè)局部媒體結(jié)構(gòu)。這略微增加帶寬要求,因?yàn)槊襟w結(jié)構(gòu)請求和傳輸可以與媒體數(shù)據(jù)包請求和傳輸共存。但是,由于媒體結(jié)構(gòu)的大小在此情況下是如此小,因此,通常可以忽略對全部帶寬要求的影響。
3.1.3PeerStreamer數(shù)據(jù)單元在一個(gè)實(shí)施例中,PeerStreamer將媒體數(shù)據(jù)包、媒體頭部和媒體結(jié)構(gòu)分成長度為L的各個(gè)固定大小數(shù)據(jù)單元。對于使用固定大小數(shù)據(jù)單元的原因是PeerStreamer客戶機(jī)和服務(wù)對等體隨后可以預(yù)先分配大小為L的存儲器塊,從而在流過程期間避免費(fèi)用昂貴的存儲器分配操作。另外,通過將媒體數(shù)據(jù)包(潛在地說,很大)分成小固定大小數(shù)據(jù)單元,也可允許PeerStreamer客戶機(jī)將服務(wù)負(fù)載分配給具有較小粒度的對等體,從而在這些對等體之中實(shí)現(xiàn)更好的帶寬負(fù)載平衡。
一般而言,通過將每個(gè)數(shù)據(jù)包分成 個(gè)數(shù)據(jù)單元,來將長度為P的數(shù)據(jù)包(可以是媒體數(shù)據(jù)包、媒體頭部或媒體結(jié)構(gòu))分成大小為L的塊,其中, 是返回大于或等于x的最小整數(shù)的常規(guī)天棚函數(shù)。于是,所有數(shù)據(jù)單元具有固定長度L,潛在地除每個(gè)數(shù)據(jù)包的最后一個(gè)的數(shù)據(jù)單元以外(其長度是P mod L)。
在使用媒體的非嵌入編碼的情況下,在網(wǎng)絡(luò)傳輸期間,不能丟棄構(gòu)成每個(gè)媒體數(shù)據(jù)包的數(shù)據(jù)單元,而不會降低媒體重放質(zhì)量。所以,這些數(shù)據(jù)包被指定為“必要數(shù)據(jù)單元”,因?yàn)樗鼈兌急仨毤右越邮铡?br>
相反,當(dāng)嵌入編碼媒體數(shù)據(jù)包被分成各個(gè)數(shù)據(jù)單元時(shí),只有基層數(shù)據(jù)單元必須被傳遞,并且,如果服務(wù)帶寬不足夠,那么,可以隨意地丟棄剩余的數(shù)據(jù)單元。這些可任選的數(shù)據(jù)單元被指定為“非必要數(shù)據(jù)單元”。這些非必要數(shù)據(jù)單元的供應(yīng)所要求的帶寬可以被計(jì)算如下。例如,在嵌入編碼的情況下,媒體數(shù)據(jù)包將持續(xù)T秒。假設(shè)媒體數(shù)據(jù)包被分成多個(gè)數(shù)據(jù)單元,那么,為了將層i處的數(shù)據(jù)單元供應(yīng)給客戶機(jī),也必須將層i以下的所有數(shù)據(jù)單元供應(yīng)給客戶機(jī)。結(jié)果,供應(yīng)層i處的數(shù)據(jù)單元所要求的服務(wù)帶寬是Ri=(i+1)L/T 公式1所以,公式1提供當(dāng)考慮到嵌入編碼媒體時(shí)數(shù)據(jù)單元的比特率R。然后,通過丟棄將會導(dǎo)致可用服務(wù)帶寬以上的比特率的非必要數(shù)據(jù)單元,PeerStreamer客戶機(jī)可調(diào)整成更改服務(wù)帶寬。
在任何情況下,無論媒體被非嵌入編碼還是被嵌入編碼,特定媒體流的所有數(shù)據(jù)單元(包括媒體數(shù)據(jù)包、媒體頭部和媒體結(jié)構(gòu)的據(jù)單元)都被映射到唯一ID空間。例如,在一個(gè)測試實(shí)施例中,媒體數(shù)據(jù)包的數(shù)據(jù)單元從0x00000000到0xfdffffff(十六進(jìn)制)編入索引,媒體頭部的數(shù)據(jù)單元從0xfe000000-0xfeffffff編入索引,媒體結(jié)構(gòu)的數(shù)據(jù)單元從0xff000000-0xffffffff編入索引。這個(gè)測試實(shí)施例中所使用的數(shù)據(jù)單元是關(guān)于圖5中所示的PeerStreamer。
注意,為了獲得媒體頭部和媒體結(jié)構(gòu)的數(shù)據(jù)單元ID,首先需要媒體頭部和媒體結(jié)構(gòu)的長度。這些被稱作它們的“巨大結(jié)構(gòu)”。為了獲得媒體數(shù)據(jù)包的數(shù)據(jù)單元ID,需要媒體數(shù)據(jù)包比特流的長度。該信息被包括在媒體結(jié)構(gòu)中。
3.1.4媒體的局部高速緩存出于服務(wù)目的,每個(gè)服務(wù)對等體只需要保持與其服務(wù)帶寬成比例的媒體的一部分。與因特網(wǎng)連接的大多數(shù)計(jì)算機(jī)的服務(wù)(或上傳帶寬)常常實(shí)質(zhì)上小于其下載帶寬(規(guī)定每個(gè)特定節(jié)點(diǎn)可以接收的最高流傳送比特率)。因此,因特網(wǎng)上的每個(gè)最終用戶節(jié)點(diǎn)往往在其上傳帶寬與其下載帶寬之間具有不平衡。例如,給定家庭用戶可以獲得的典型商業(yè)ADSL/電纜調(diào)制解調(diào)器網(wǎng)絡(luò)上的節(jié)點(diǎn),那么,下載帶寬比其上傳帶寬高一個(gè)數(shù)量級并非是不平常的。同樣,校園/企業(yè)網(wǎng)上的節(jié)點(diǎn)通常已改進(jìn)了服務(wù)帶寬,以便任何給定節(jié)點(diǎn)參與P2P類型活動(dòng)都不會影響其他任務(wù)關(guān)鍵功能。
因此,由于每個(gè)服務(wù)對等體通常不能夠個(gè)別地將全部媒體流供應(yīng)給客戶機(jī),因此,不需要將全部媒體流高速緩存在任何一個(gè)服務(wù)對等體上。所以,用于減少服務(wù)對等體中的任一個(gè)所要求的存儲資源數(shù)量的有效方法是允許每個(gè)服務(wù)對等體只保持將要被流傳送的媒體的一部分。例如,如果流傳送非嵌入編碼媒體所需要的比特率是R,并且,流傳送會話中的對等體所提供的最大服務(wù)帶寬是B,那么,每個(gè)對等體節(jié)點(diǎn)只需要在其高速緩存中保持該流媒體的p部分,其中的值p由公式2來表示p=max(1.0,B/R)公式2例如,假設(shè)媒體比特率是服務(wù)帶寬的兩倍,即,R=2B。然后,服務(wù)對等體只需要在其存儲器中保持該流媒體的一半,因?yàn)樵搶Φ润w無法獨(dú)自按完全的流傳送比特率來服務(wù)于客戶機(jī)。實(shí)際上,給定這個(gè)例子的前述限制,該對等體所能夠做得最好的是至多提供該媒體的一半。因此,該對等體只需要在其高速緩存中保持該媒體的一半。然后,將要被流傳送的媒體的其余部分必須由其他服務(wù)對等體來提供。
另外,然后應(yīng)該注意,公式1和2的組合隨后允許確定為使用嵌入編碼媒體的情況而保持的媒體量。如以上章節(jié)3.1.3中所討論的,嵌入編碼媒體的媒體數(shù)據(jù)包被分成具有不同的比特率的多個(gè)數(shù)據(jù)單元。所以,R是特定層L的數(shù)據(jù)單元的比特率,公式2現(xiàn)在給出將要為該數(shù)據(jù)單元而保持的媒體的部分。例如,如圖6所示,嵌入媒體數(shù)據(jù)包可以被分成多個(gè)數(shù)據(jù)單元(在這個(gè)例子中是8個(gè))。如圖6所示,需要為每個(gè)數(shù)據(jù)單元(具有L/T=0.5B)高速緩存的媒體量被示出為然后根據(jù)公式2來確定。
但是,在一個(gè)實(shí)施例中,在特定服務(wù)對等體的存儲資源足夠大的情況下,該服務(wù)對等體可以通過僅僅使用公式2中的較高的“潛在服務(wù)帶寬”B’,來選擇高速緩存該媒體的一個(gè)較大的部分。然后,被高速緩存的媒體的該額外部分允許按紊亂的、但高質(zhì)量的方式來供應(yīng)該媒體。例如,假設(shè)每個(gè)服務(wù)對等體選擇使用其實(shí)際服務(wù)帶寬兩倍的潛在服務(wù)帶寬B′(即,B′=2B)”,那么,該P(yáng)2P網(wǎng)絡(luò)中的所得的媒體量將足夠客戶機(jī)按流傳送速率的一半來檢索該媒體。換言之,假設(shè)所有這些可用對等體的合計(jì)服務(wù)帶寬大于R/2,那么,客戶機(jī)應(yīng)該能夠首先下載該媒體的一半,然后連續(xù)不斷地流傳送剩余的一半傳送并對其進(jìn)行重放。同樣,客戶機(jī)也可以選擇下載該媒體的Ts/2片段(具有時(shí)間Ts)、連續(xù)不斷地流傳送另一個(gè)Ts/2片段并重放該片段、然后下載另一個(gè)片段并流傳送它。這樣,該流媒體可以按速率R來重放(縱使按紊亂的方式)。
3.1.5媒體的高速率擦除編碼如上所述,對等體可能本質(zhì)上是不可靠的。因此,有利的是提供用于在PeerStreamer系統(tǒng)和方法中提供增加的冗余度的某個(gè)手段,以便有效地處理服務(wù)對等體的本質(zhì)上不可靠的服務(wù)行為。對這個(gè)問題的處理提出了必須解決的許多關(guān)注問題。例如,確定該媒體的哪個(gè)部分p應(yīng)該由每個(gè)對等體來保持是所關(guān)注的。另外,由于媒體最終被分成前述數(shù)據(jù)單元,因此,確定每個(gè)對等體應(yīng)該保持這些數(shù)據(jù)單元的哪個(gè)部分p也是所關(guān)注的。
解決這些問題的一個(gè)策略是僅僅將每個(gè)數(shù)據(jù)單元分成k個(gè)塊。保持該媒體的p部分的對等體隨后可以隨機(jī)地保持 個(gè)塊, 是前述天棚函數(shù)。但是,對于這個(gè)方案的隨機(jī)性的一個(gè)問題是即使對等體群集中存在比k個(gè)塊多得多的塊,該群集作為一個(gè)整體也可能會缺乏特定的塊j,從而致使整個(gè)數(shù)據(jù)單元無法恢復(fù)。另外,在這種方案中,客戶機(jī)仍然負(fù)責(zé)定位來自這些對等體的每個(gè)截然不同的塊,這使客戶機(jī)與對等體之間的協(xié)議設(shè)計(jì)復(fù)雜化。
因此,更好的策略是使用“高速率擦除彈性代碼”來確保對等體中的一個(gè)或多個(gè)將具有重建特定的數(shù)據(jù)單元所必要的數(shù)據(jù)塊,同時(shí)簡化客戶機(jī)上識別對等體中的哪個(gè)對等體包含該必要數(shù)據(jù)的要求。一般而言,擦除彈性代碼是具有參數(shù)(n,k)的塊糾錯(cuò)碼,其中,k是原始消息的數(shù)目,n是編碼消的息的數(shù)目。高速率擦除彈性代碼滿足n比k大得多的屬性;這樣,k個(gè)原始消息被擴(kuò)大為n個(gè)消息的大得多的編碼消息空間。盡管擦除編碼技術(shù)一般被公認(rèn)為用于為數(shù)據(jù)編碼,但如這里所描述的,該技術(shù)在P2P網(wǎng)絡(luò)環(huán)境中流傳送媒體的應(yīng)用是未知的。
作為塊糾錯(cuò)碼,可以通過伽羅瓦域(Galois Field)GF(p)上的矩陣乘法來描述高速率擦除彈性代碼的操作c0c1······cn-1=Gx0x1···xk-1,]]>公式3其中,p是伽羅瓦域的階,{x0,x1,…,xk-1}是原始消息,{c0,c1,…,cn-1}是編碼的消息,G是生成矩陣。注意,公式3不被用來立即生成所有編碼的消息。而是,生成矩陣G定義已編碼消息空間。所以,當(dāng)客戶機(jī)接收k個(gè)編碼的消息{c’0,c’1,…,c’k-1}時(shí),它們可以被公式4表示為c′0c′1···c′k-1=Gkx0x1···xk-1,]]>公式4其中,Gk是對應(yīng)于已編碼消息的、生成矩陣G的k行所形成的子生成矩陣。另外,如果子生成矩陣Gk具有滿秩k,那么,矩陣Gk可以被求逆,從而可以為原始消息解碼。
可以使用幾種眾所周知的擦除編碼技術(shù),包括(例如)Reed-Solomon擦除碼、tornado碼和LPDC碼。但是,在一個(gè)實(shí)施例中,PeerStreamer基于伽羅瓦域GF(216)上的修改過的Reed-Solomon碼來提供一種新的高速率擦除彈性代碼。在這個(gè)例子中,原始消息的數(shù)目k是16。已編碼消息空間的大小n是216=65536。Reed-Solomon碼是最大距離可分(MDS)碼。因此,生成矩陣G的任何16行形成具有滿秩16的子生成矩陣。換言之,可以從任何16個(gè)已編碼消息中恢復(fù)原始消息。應(yīng)該注意,也可以使用其他域大小p;并且,PeerStreamer不局限于這里所描述的特定域大小的運(yùn)用。另外,對于使用非MDS擦除編碼的實(shí)施例,取決于所使用的特定擦除編碼,可能有必要檢索k′≥k個(gè)塊,以恢復(fù)原始消息。使用基于Reed-Solomon的擦除代碼部分是因?yàn)樗鼈兪荕DS碼,并且,它們可以被有效地編碼和解碼,同時(shí),只將很少的計(jì)算額外開銷施加于大多數(shù)常規(guī)計(jì)算機(jī)的CPU上。
利用高速率(n,k)擦除彈性代碼,為每個(gè)對等體節(jié)點(diǎn)分配,n的已編碼消息空間中的k個(gè)關(guān)鍵字,每個(gè)關(guān)鍵字是生成矩陣G的行索引。關(guān)鍵字分配可以由服務(wù)器來執(zhí)行。另外,如果高速緩存該媒體的對等體的數(shù)目小于n/k,那么,可以為每個(gè)對等體分配一組唯一的關(guān)鍵字。結(jié)果,可以保證每個(gè)對等體保持與眾不同的已編碼消息。這個(gè)策略提供許多好處,但它仍然要求中心協(xié)調(diào)節(jié)點(diǎn)(例如,服務(wù)器)。
因此,在另一個(gè)實(shí)施例中,通過允許每個(gè)對等體選擇k個(gè)隨機(jī)關(guān)鍵字,來消除中心協(xié)調(diào)節(jié)點(diǎn)的這個(gè)角色。如果對等體節(jié)點(diǎn)的數(shù)目大于,n/k,或者沒有利用中心協(xié)調(diào)節(jié)點(diǎn)來分配關(guān)鍵字,那么,某些對等體節(jié)點(diǎn)可以保持相同的關(guān)鍵字。然而,在其中客戶機(jī)被連接到m個(gè)對等體的大多數(shù)媒體流傳送會話中,m通常比n/k小得多。所以,兩個(gè)服務(wù)對等體碰巧保持相同的關(guān)鍵字,并且因此這些對等體之一的一個(gè)關(guān)鍵字無用的概率很小。但是,即使有關(guān)鍵字沖突,當(dāng)客戶機(jī)首先連接到對等體時(shí),它也可以容易地識別這類沖突。在識別這種沖突的情況下,該客戶機(jī)僅僅在流傳送會話的剩余部分內(nèi)使這些重復(fù)的關(guān)鍵字中的一個(gè)無效。因此,客戶機(jī)不需要實(shí)際上在流過程期間處理關(guān)鍵字沖突。
例如,假設(shè)S1和S2分別是服務(wù)對等體1和服務(wù)對等體2的擦除編碼關(guān)鍵字空間,并且S1={1,7,23,43,48},S2={3,7,28,49,99}。顯而易見,關(guān)鍵字空間S1和S2是不同的。但是,關(guān)鍵字7由這兩個(gè)關(guān)鍵字空間來共享,所以,服務(wù)對等體1和服務(wù)對等體2可以保持共享同一關(guān)鍵字(即關(guān)鍵字“7”)的擦除編碼塊。所以,在請求特定編碼塊之前,根據(jù)服務(wù)對等體之一來使關(guān)鍵字“7”無效,以便只從這些對等體之一中檢索由關(guān)鍵字“7”編碼的那個(gè)塊,從而避免由重復(fù)關(guān)鍵字引起的任何解碼沖突。但是,應(yīng)該注意,在一個(gè)服務(wù)對等體在媒體流傳送操作期間脫機(jī)的情況下,如果作為使用一個(gè)或多個(gè)重復(fù)關(guān)鍵字的結(jié)果該脫機(jī)服務(wù)對等體以前處于沖突狀態(tài),那么,可以使另一個(gè)服務(wù)對等體的特定的已無效編碼關(guān)鍵字重新生效。
利用(65536,16)Reed-Solomon碼,每個(gè)數(shù)據(jù)單元被分割成16個(gè)塊。通過使用一組預(yù)先分配的關(guān)鍵字,該對等體選擇高速緩存 個(gè)擦除編碼塊,其中,p是從公式1和2中計(jì)算的參數(shù)。被分配給該對等體的關(guān)鍵字、以及其最大服務(wù)帶寬B組成該對等體的前述可用性向量,因?yàn)樵摽蛻魴C(jī)可以通過使用該對等體可用性向量所提供的信息來確定,該對等體保持多少和什么擦除編碼塊(按數(shù)據(jù)單元/塊ID)。再一次,在最初連接每個(gè)對等體的時(shí)候,該客戶機(jī)解決任何關(guān)鍵字沖突。在流傳送會話期間,客戶機(jī)隨后可以從任何服務(wù)對等體節(jié)點(diǎn)中檢索任何k個(gè)已編碼消息,并對相關(guān)聯(lián)的數(shù)據(jù)單元進(jìn)行解碼。
另外,沒有必要將用于為特定數(shù)據(jù)單元解碼的編碼塊的整個(gè)集合存儲在任何一個(gè)服務(wù)對等體上。換言之,對于任何特定數(shù)據(jù)單元的任何特定服務(wù)對等體所保持的塊的數(shù)目可能小于k。所以,在一個(gè)實(shí)施例中,只生成實(shí)際上正被傳遞到特定對等體的那些編碼塊,而不是浪費(fèi)計(jì)算能力來計(jì)算每個(gè)編碼關(guān)鍵字的每個(gè)已編碼塊。換言之,如果j<k個(gè)塊被存儲在特定的服務(wù)對等體上,那么,只應(yīng)該為該特定數(shù)據(jù)單元生成j個(gè)塊。
3.2P2P網(wǎng)絡(luò)中的PeerStreamer操作的實(shí)現(xiàn)在以下各段中,鑒于前面對PeerStreamer的操作細(xì)節(jié)的討論,來描述PeerStreamer操作的實(shí)現(xiàn)。具體地,以下各段描述客戶機(jī)對服務(wù)對等體的定位;基于所檢索的媒體結(jié)構(gòu)的客戶機(jī)解碼和呈現(xiàn)的設(shè)置;PeerStreamer網(wǎng)絡(luò)連接;流傳送比特率控制;PeerStreamer客戶機(jī)請求和對等體答復(fù);以及,最后是PeerStreamer請求和分級隊(duì)列。
3.2.1定位服務(wù)對等體如上所述,客戶機(jī)所執(zhí)行的第一項(xiàng)任務(wù)是獲得保持服務(wù)媒體的完整或部分副本的相鄰服務(wù)對等體的列表的IP地址以及監(jiān)聽端口。另外,該列表也在媒體流傳送會話期間被更新。如以上所解釋的,用于獲得該列表的一般方法包括1)從服務(wù)器中檢索該列表;2)從已知的服務(wù)對等體中檢索該列表;以及3)在預(yù)先既不知道媒體服務(wù)器,也不知道服務(wù)對等體的情況下,使用用于識別服務(wù)對等體的分布式散列表(DHT)方法。
3.2.2解碼和呈現(xiàn)設(shè)置在獲得服務(wù)對等體列表之后,客戶機(jī)試圖連接到這些服務(wù)對等體中的每一個(gè)。如上所述,一旦被連接,客戶機(jī)就檢索每個(gè)對等體的可用性向量,并解決任何關(guān)鍵字沖突。然后該客戶機(jī)從這些對等體之一中檢索媒體頭部和媒體結(jié)構(gòu)的長度。在檢索了這兩個(gè)長度之后,構(gòu)造媒體頭部和媒體結(jié)構(gòu)的數(shù)據(jù)單元的ID。然后,按如章節(jié)3.2.6中進(jìn)一步詳細(xì)描述的P2P方式來檢索媒體頭部和媒體結(jié)構(gòu)。一旦檢索了媒體頭部,客戶機(jī)就確定應(yīng)該對哪些解碼器和呈現(xiàn)器進(jìn)行初始化,以便在將媒體流傳送到客戶機(jī)時(shí)對它進(jìn)行解碼和呈現(xiàn)。
在使用DirectXTM來實(shí)現(xiàn)的一個(gè)測試實(shí)施例中,該設(shè)置通過首先根據(jù)媒體頭部中所提供的信息來構(gòu)造DirectShowTM過濾器圖來實(shí)現(xiàn)。應(yīng)該注意,這里所描述的PeerStreamer不局限于使用DirectXTM功能的實(shí)現(xiàn),并且,只出于解釋的目的來提供DirectXTM的運(yùn)用及其相對于測試實(shí)施例的討論,用于描述在為客戶機(jī)重放而解碼和呈現(xiàn)流媒體的過程中客戶計(jì)算機(jī)的設(shè)置。
所以,假設(shè)客戶設(shè)置的DirectXTM實(shí)現(xiàn),客戶機(jī)的網(wǎng)絡(luò)組件由DireetShowTM網(wǎng)絡(luò)源過濾器來表示,其輸出被饋入正確的音頻/視頻解碼器DirectXTM媒體對象(DMO)。然后,該DMO被進(jìn)一步連接到適當(dāng)?shù)囊纛l/視頻呈現(xiàn)設(shè)備。例如,圖7示出了客戶機(jī)PeerStreamer媒體流傳送會話的示例DirectShowTM過濾器圖。在這個(gè)例子中,流媒體被非嵌入編碼。音頻比特流按WMA壓縮,視頻比特流按MPEG-4壓縮。
經(jīng)由DirectShowTM框架來使用和執(zhí)行PeerStreamer客戶機(jī)設(shè)置的一個(gè)優(yōu)點(diǎn)是它可以使用在DirectShowTM之下開發(fā)的巨大的現(xiàn)有音頻/視頻編碼器/解碼器庫。例如,利用DirectShowTM,PeerStreamer客戶機(jī)能夠解碼和呈現(xiàn)由各種編解碼器(包括例如MPEG 1/2/4、WMA/WMV、Indeo Video等)或具有DirectShowTM解碼器DMO組件的任何其他編解碼器來編碼的媒體。DirectShowTM也提供附加的音頻/視頻處理模塊,例如,分辨率/色彩空間轉(zhuǎn)換和解除交錯(cuò),以便所解碼的音頻/視頻可以自動(dòng)與客戶機(jī)的音頻/視頻呈現(xiàn)設(shè)備的性能相匹配。
另外,DirectShowTM自動(dòng)處理音頻/視頻軌道的同步。例如,在音頻流保持全部流的參考時(shí)鐘的情況下,當(dāng)播放流視頻時(shí),DirectShowTM確保該視頻流的系統(tǒng)定時(shí)時(shí)鐘盡可能接近于用于解決諸如嘴唇同步等問題的音頻流時(shí)鐘。最后,DirectShow應(yīng)用程序本質(zhì)上是多線程的。因此,在多處理器PC(或啟用了超線程的PC)上,客戶機(jī)的各個(gè)組件(例如,網(wǎng)絡(luò)組件、音頻解碼器、視頻解碼器和音頻/視頻呈現(xiàn)引擎等)的計(jì)算負(fù)載可以被分發(fā)到多個(gè)處理器上。這大大加速了客戶機(jī)的執(zhí)行,并允許使用更復(fù)雜的音頻/視頻解碼器。
最后,也應(yīng)該注意,這里所描述的PeerStreamer不局限于使用DireetXTM功能的實(shí)現(xiàn);并且,出于解釋的目的,提供了DirectXTM的運(yùn)用及其相對于測試實(shí)施例的討論,只用于描述在為客戶機(jī)重放而解碼和呈現(xiàn)流媒體的過程中客戶機(jī)計(jì)算機(jī)的設(shè)置。
3.2.3PeerStreamer網(wǎng)絡(luò)鏈路和數(shù)據(jù)包丟失管理
大多數(shù)媒體流客戶機(jī)(例如,Windows媒體播放器、或RealPlayer)使用在UDP之上所攜帶的公知的實(shí)時(shí)傳送協(xié)議(RTP)。通常為媒體流應(yīng)用程序選擇UDP/RTP,這是因?yàn)?)UDP協(xié)議支持IP多點(diǎn)傳送,它在將媒體發(fā)送到啟用了IP多點(diǎn)傳送的網(wǎng)絡(luò)上的一組節(jié)點(diǎn)的過程中會是有效率的;以及2)UDP協(xié)議不具有任何重發(fā)或數(shù)據(jù)速率管理功能。因此,流傳送服務(wù)器和客戶機(jī)可以實(shí)現(xiàn)行高級數(shù)據(jù)包傳遞功能(例如,前向糾錯(cuò)(FEC)),以確保媒體數(shù)據(jù)包的及時(shí)傳遞。
但是,與以上所標(biāo)識的公知的媒體流傳送方案對比而言,PeerStreamer將TCP連接用作客戶機(jī)與服務(wù)對等體之間的網(wǎng)絡(luò)鏈路。選擇TCP連接而不是常規(guī)的UDP/RTP協(xié)議的一個(gè)原因是由于諸如域內(nèi)路由協(xié)議、ISP商業(yè)模型(收費(fèi)模型)、沿分布樹的擁塞控制等問題,在真實(shí)世界中,沒有廣泛地采用IP多點(diǎn)傳送。
此外,與許多商業(yè)媒體播放器一樣,PeerStreamer客戶機(jī)并入(在測試實(shí)施例中是4s的)流媒體緩沖區(qū),以防止諸如抖動(dòng)和擁塞等網(wǎng)絡(luò)異常。實(shí)際上,給定比客戶機(jī)與服務(wù)對等體之間的往返時(shí)間(RTT)大許多倍的流媒體緩沖區(qū),那么,TCPARQ(自動(dòng)化重復(fù)請求)機(jī)制對于媒體數(shù)據(jù)包在充分的時(shí)間內(nèi)的傳遞而言是足夠好了,以便提供流媒體的流暢的重放。
一般而言,有三種公知的機(jī)制(具有大量公知的變體)用于解決媒體數(shù)據(jù)包丟失。例如,這些機(jī)制通常包括FEC、選擇性數(shù)據(jù)包重發(fā)、以及自動(dòng)重復(fù)請求(ARQ)。PeerStreamer可以使用所有這些數(shù)據(jù)包丟失機(jī)制中的任一種。但是,如以下所解釋的,使用特定的機(jī)制有勝過其他機(jī)制的各種優(yōu)點(diǎn)。
具體地,對于因特網(wǎng)信道(可以被認(rèn)為是具有變化的特征和未知的數(shù)據(jù)包丟失率的擦除通道),固定的FEC方案要么浪費(fèi)帶寬(具有太多的保護(hù)),要么無法恢復(fù)丟失的數(shù)據(jù)包(具有太少的保護(hù))。這樣,它未能有效地利用客戶機(jī)與對等體之間的帶寬資源。所以,利用比RTT大許多倍的流傳送緩沖區(qū)、以及(因而)關(guān)于重發(fā)的許多機(jī)會,基于重發(fā)的出錯(cuò)防止(例如,選擇性重發(fā)和ARQ)比FEC更可取。
考慮到ARQ和選擇性重發(fā),可見到,在使用TCP協(xié)議的因特網(wǎng)信道中,只有當(dāng)許多數(shù)據(jù)包沒有被選擇來重發(fā)的時(shí)候,選擇性重發(fā)將比ARQ強(qiáng)。對于非嵌入編碼媒體,丟失的數(shù)據(jù)包通常會導(dǎo)致嚴(yán)重的重放降級,包括無法解碼和提供特定數(shù)據(jù)包的重放。所以,丟失的數(shù)據(jù)包幾乎總是被重發(fā)。相反,利用嵌入編碼媒體,丟失的數(shù)據(jù)包可能不會阻止媒體重放。但是,任隨機(jī)數(shù)據(jù)包的丟失仍然會使許多導(dǎo)出的數(shù)據(jù)包變得不可用。結(jié)果,只有最高增強(qiáng)層數(shù)據(jù)包可能不會被選擇來重發(fā)。
與選擇性重發(fā)相比較,一旦請求數(shù)據(jù)包,ARQ總是重發(fā)它們;即使它們屬于最高增強(qiáng)層。然而,ARQ方案可以選擇不請求以后媒體數(shù)據(jù)包的最高增強(qiáng)層數(shù)據(jù)包,從而利用選擇性傳輸方案來實(shí)現(xiàn)相同的帶寬使用率和察覺到的媒體重放質(zhì)量。因此,除非網(wǎng)絡(luò)條件變化非常迅速,否則,TCP協(xié)議所使用的ARQ機(jī)制足以處理媒體流傳送中的數(shù)據(jù)包丟失。
將TCP用作網(wǎng)絡(luò)協(xié)議也可提供勝過常規(guī)媒體流傳送方案(例如,以上所標(biāo)識的方案)的幾個(gè)額外的好處。例如,利用TCP,不需要明確地處理流量控制、吞吐量估算、擁塞控制和避免、保活(keep alive)等等。所有這些問題由TCP協(xié)議來自動(dòng)處理。TCP協(xié)議也可以檢測脫機(jī)的對等體,并適度地處理該對等體與客戶機(jī)之間的連接鏈路的關(guān)閉。
3.2.4具有嵌入編碼的PeerStreamer流傳送比特率控制非嵌入編碼的媒體較佳地總是按該媒體的比特率來流傳送,以避免在客戶機(jī)處的媒體重放降級。但是,嵌入編碼媒體的流傳送比特率可以在流傳送會話期間變化。
所以,在一個(gè)實(shí)施例中,每個(gè)嵌入編碼媒體數(shù)據(jù)包的流傳送比特率Rrecv首先由公式5、6和7來計(jì)算,如下所示Rraw=Th·(1+Trft-Tstaging)+Bstaging-Boutstanding公式5Rfilter=(1-α)Rfilter+αRraw公式6Rrecv=min(Rmin,Rinst) 公式7其中,Th是多個(gè)服務(wù)對等體的總計(jì)的服務(wù)帶寬,Tstaging是目標(biāo)分級緩沖區(qū)大小(在測試實(shí)施例中具有默認(rèn)值2.5s),Trft是所需的請求履行時(shí)間(在測試實(shí)施例中具有默認(rèn)值1.0s),Bstaging是分級隊(duì)列中所接收的數(shù)據(jù)包的長度,Boutstanding是將要被接收的未完成答復(fù)的長度,Rmin是基層比特率(只具有必要數(shù)據(jù)單元),α是低通控制參數(shù)。
然后,使用公式5-7的結(jié)果來通過以下總計(jì)的服務(wù)帶寬Th、以及各個(gè)分級和請求隊(duì)列狀態(tài)而控制流傳送比特率Rrecv,這些分級和請求隊(duì)列狀態(tài)在以下章節(jié)3.2.6中進(jìn)一步詳細(xì)描述。一旦確定該流傳送比特率,客戶機(jī)就只發(fā)出對具有低于流傳送比特率Rrecv的比特率的數(shù)據(jù)單元的請求。
在一個(gè)相關(guān)實(shí)施例中,通過也考慮數(shù)據(jù)單元的失真作用,使用更高級的策略來控制比特率Rrecv。但是,這要求客戶機(jī)獲得對數(shù)據(jù)單元的失真(或速率失真斜率)的訪問,它必須被包括在媒體結(jié)構(gòu)中并被發(fā)送到客戶機(jī)。但是,與媒體結(jié)構(gòu)中的現(xiàn)有信息不同,數(shù)據(jù)單元的失真在解碼的過程中是不需要的,因而被認(rèn)為是額外開銷。因此,它是將要被發(fā)送到客戶機(jī)的額外開銷量與速率控制準(zhǔn)確度之間的折衷。
3.2.5PeerStreamer數(shù)據(jù)塊請求和答復(fù)圖8概括地示出了客戶機(jī)數(shù)據(jù)塊請求及其對對等體的答復(fù)的使用期限。具體地,如圖8所示,客戶機(jī)生成該請求,并通過出站TCP連接來將它發(fā)送到特定的服務(wù)對等體。另外,在網(wǎng)絡(luò)傳遞中,TCP可以將該請求與發(fā)給同一對等體的原先的請求捆綁在一起。如果原先的請求在傳輸過程中丟失,那么,TCP也處理該請求的重發(fā)。
在數(shù)據(jù)包請求被傳遞到對等體之后,它被存儲在該服務(wù)對等體的TCP接收緩沖區(qū)中。然后,該對等體處理這些請求,每次處理一個(gè)請求。對于每個(gè)請求,對等體從其磁盤或記憶存儲中讀取所請求的塊(可能被或可能不被加以擦除編碼,取決于所使用的編碼),并將所請求的內(nèi)容發(fā)回到客戶機(jī)。倘若從服務(wù)對等體到客戶機(jī)的TCP套接字被阻斷(即,不再有帶寬可用),那么,服務(wù)對等體將阻斷進(jìn)一步的客戶機(jī)請求,直到TCP連接打開為止。
客戶機(jī)發(fā)出請求的時(shí)間與客戶機(jī)接收其答復(fù)的時(shí)間之間的間隔被定義為請求履行時(shí)間(RFT)。請求通常比其答復(fù)小得多,并且,與用來發(fā)回內(nèi)容的網(wǎng)絡(luò)傳遞時(shí)間相比,處理請求的過程中所涉及的操作(例如,磁盤讀取)通常是不重要的。所以,請求的RFT-T′rft由公式8來計(jì)算,如下所示Trft′=(Bi,outstanding+Bcur)/Thi公式8其中,Thi是對等體i的服務(wù)帶寬,Bi,outstanding是在該請求之前的未被接收的答復(fù)的長度,Bcur是所請求的內(nèi)容的長度。所以,RFT是根據(jù)對等體的服務(wù)帶寬、請求的大小、以及來自該對等體的未被接收的內(nèi)容的大小來確定的。
一旦所請求的內(nèi)容數(shù)據(jù)包到達(dá)客戶機(jī)處,它就被立即移動(dòng)到分級隊(duì)列。在該分級隊(duì)列中,來自多個(gè)對等體的數(shù)據(jù)塊(可以包括擦除編碼塊)被組合和解碼為數(shù)據(jù)單元,這些數(shù)據(jù)單元被進(jìn)一步組合成媒體數(shù)據(jù)包??蛻魴C(jī)周期性地從分級隊(duì)列中除去所傳遞的媒體數(shù)據(jù)包,并將它們壓入對應(yīng)的音頻/視頻解碼器。在媒體數(shù)據(jù)包被解碼器解壓之后,未壓縮的音頻/視頻數(shù)據(jù)流被發(fā)送到音頻/視頻呈現(xiàn)單元,用于客戶機(jī)重放設(shè)備(監(jiān)視器、揚(yáng)聲器等)上的流重放。
在一個(gè)實(shí)施例中,圖8中所示的緩沖區(qū)用來防止網(wǎng)絡(luò)異常(例如,數(shù)據(jù)包丟失和抖動(dòng))。(但是,當(dāng)使用DirectShowTM實(shí)現(xiàn)時(shí),未壓縮的音頻/視頻緩沖區(qū)在DirectShow過濾器圖的控制之下,并且是不可編程的。)在PeerStreamer的一個(gè)測試實(shí)施例中,分級緩沖區(qū)的大小被設(shè)為Tstaging=2.5s,所需的RFT被設(shè)為Trft=1.0s,并且,所壓縮的音頻/視頻緩沖區(qū)被設(shè)為0.5s。因此,在這個(gè)測試實(shí)施例中,PeerStreamer客戶機(jī)的總緩沖區(qū)因而大約是4s。
在其中使用擦除編碼的實(shí)施例中,每個(gè)數(shù)據(jù)塊請求被明確地表達(dá)為某個(gè)數(shù)據(jù)單元的一組擦除編碼塊的請求??梢岳闷鹗級K索引和所請求的塊的數(shù)量來標(biāo)識該擦除編碼塊組。可以通過32位ID來標(biāo)識該數(shù)據(jù)單元。該請求因而采取以下形式Data_Unit_ID[32],Start_Index[4],Number_of_Blocks[4] 公式9其中,括號中的數(shù)字是每個(gè)分量的比特?cái)?shù)。
所以,如公式9所示,在擦除編碼塊的情況下,每個(gè)請求是5字節(jié)長。另一方面,所請求的內(nèi)容在大小方面的范圍是128~2048個(gè)字節(jié)(數(shù)據(jù)單元長度L=2048,k=16)。結(jié)果,請求的大小只是答復(fù)的大約0.24%~3.91%。所以,客戶機(jī)用于發(fā)送請求的上傳帶寬的量相對于請求的內(nèi)容而言非常小。
3.2.6PeerStreamer請求和分級隊(duì)列如上所述,PeerStreamer客戶機(jī)維持單個(gè)分級隊(duì)列,以保持所接收的數(shù)據(jù)塊(可以被擦除編碼);并且,從其中,數(shù)據(jù)塊被匯編成數(shù)據(jù)單元,然后被匯編成媒體數(shù)據(jù)包??蛻魴C(jī)也保持用于服務(wù)對等體中的每一個(gè)的單獨(dú)的請求隊(duì)列,以保持被發(fā)送到每個(gè)對等體的無法履行的請求。圖9示出了請求隊(duì)列和分級隊(duì)列的一個(gè)例子。
分級隊(duì)列是PeerStreamer客戶機(jī)的主要流緩沖區(qū)。所有接收到的內(nèi)容首先被放入該分級隊(duì)列。這些請求隊(duì)列用于三個(gè)目的1)用于執(zhí)行吞吐量控制和負(fù)載平衡;2)用于識別由每個(gè)服務(wù)對等體發(fā)回的答復(fù);以及3)用于處理斷開的對等體。
請求隊(duì)列的第一個(gè)功能是平衡務(wù)對等體之中的負(fù)載。在媒體被擦除編碼的情況下,對數(shù)據(jù)單元的請求被分成多個(gè)擦除編碼塊組的請求,每個(gè)組被定向到一個(gè)對等體。通過以下操作來生成這些請求。一請求數(shù)據(jù)單元,客戶機(jī)就首先檢驗(yàn)對等體的可用性向量,并對該數(shù)據(jù)單元計(jì)算每個(gè)對等體所保持的擦除編碼塊的數(shù)量(ai)。如果所有聯(lián)機(jī)對等體所保持的塊的總數(shù)小于k,那么,該數(shù)據(jù)單元不可檢索。如果不可檢索的數(shù)據(jù)單元是非必要的(即嵌入編碼媒體的非基層),那么,客戶機(jī)只需跳過該數(shù)據(jù)單元。
相反,如果不可檢索的數(shù)據(jù)單元是必要的(即,屬于非嵌入編碼媒體數(shù)據(jù)包、或嵌入編碼媒體數(shù)據(jù)包的基層),那么,客戶機(jī)無法繼續(xù)進(jìn)行流媒體的下載和重放。所以,在一個(gè)實(shí)施例中,它將等待更多的對等體聯(lián)機(jī),以提供這些缺少的塊。在一個(gè)替換實(shí)施例中,客戶機(jī)將跳過整個(gè)媒體數(shù)據(jù)包,并向以后的音頻/視頻解碼器將它標(biāo)記為“缺少的”。其結(jié)果將是所呈現(xiàn)的媒體中的間隙或跳躍。但是,如果無法從對等體群集中重新獲得一個(gè)必要的數(shù)據(jù)單元,那么,以后更多的必要數(shù)據(jù)單元將很可能也是不可檢索的。因此,通常更好的做法是讓客戶機(jī)等待,直到數(shù)據(jù)可用為止,以便為用戶提供更好的重放體驗(yàn)。
在確保特定數(shù)據(jù)單元是可重新檢索的之后,即,∑iai≥k 公式10客戶機(jī)檢驗(yàn)每個(gè)對等體的請求隊(duì)列中的可用空間。需要將每個(gè)對等體的RFT保持在系統(tǒng)常數(shù)Trft左右。在一個(gè)測試實(shí)施例中,1.0s數(shù)量級的Trft提供較好結(jié)果。(注意,使用太短的請求隊(duì)列可能不會有效地利用從客戶機(jī)到對等體的帶寬。)具體地,如果客戶機(jī)所發(fā)送的請求數(shù)據(jù)包被丟失或被延遲,那么,服務(wù)對等體可能沒有什么東西要發(fā)送,這會浪費(fèi)其服務(wù)帶寬。相反,使用過長的請求隊(duì)列可以防止客戶機(jī)迅速適應(yīng)變化,例如,對等體之一的斷開。另外,如果請求隊(duì)列對于所有的對等體在RFT方面都是相同的長度,該請求隊(duì)列的容量變得與其服務(wù)帶寬成比例Thi·Trft。
例如,假設(shè)Trft是1.0s,那么,具有服務(wù)帶寬16kbps的對等體允許其請求隊(duì)列中有2KB的無法履行的請求待決,而具有服務(wù)帶寬1Mbps的對等體允許128KB的無法履行的請求待決。因此,可以向特定對等體請求的擦除編碼塊的數(shù)量由其請求隊(duì)列中留出的空間來定上限ei=min(ai,(Thi·Trft-Bi,outstanding)/bk) 公式11其中,ei是可以向?qū)Φ润wi請求的擦除編碼塊的數(shù)量,bk是擦除編碼塊的大小。
公式11保證客戶機(jī)從不發(fā)出具有大于Trft的預(yù)期的RFT的請求。如果客戶機(jī)無法找到足夠的當(dāng)前可用的擦除編碼塊,即,∑iei<k 公式12它將等待,指導(dǎo)服務(wù)對等體的請求隊(duì)列清除為止。當(dāng)∑iei≥k時(shí),數(shù)據(jù)單元請求只是被形成并被發(fā)送到對等體。向某個(gè)對等體請求的塊的實(shí)際數(shù)目(bi)被計(jì)算如下Σibi=k,bi=min(ei,c·Thi),]]>(公式13)其中,c是滿足∑ibi=k的常數(shù)。
一般而言,以上略述的過程與其服務(wù)帶寬Thi成比例地將服務(wù)負(fù)載分配給每個(gè)對等體(公式13)。它也確??蛻魴C(jī)不會向特定服務(wù)對等體請求比該服務(wù)對等體實(shí)際上所高速緩存或存儲的更多的塊。最后,如公式11所示的,該過程也確保請求的RFT不超過Trft。
請求隊(duì)列的第二個(gè)功能是識別由每個(gè)服務(wù)對等體發(fā)回的內(nèi)容。如上所述,PeerStreamer客戶機(jī)和對等體通過TCP來進(jìn)行通信,它保存數(shù)據(jù)傳輸?shù)捻樞颍⒈WC數(shù)據(jù)包傳遞。而且,每個(gè)對等體依次處理傳入的請求。結(jié)果,不需要明確地識別被發(fā)回的內(nèi)容,因?yàn)樗仨氋澇擅總€(gè)對等體的請求隊(duì)列中待決的第一個(gè)請求。
對于上述的請求隊(duì)列的第三個(gè)功能,該請求隊(duì)列也用來使斷開的對等體的各個(gè)請求重定向。例如,只要特定的服務(wù)對等體與客戶機(jī)斷開,該斷開事件都由TCP協(xié)議來獲得,TCP協(xié)議隨后將該斷開報(bào)告給客戶機(jī)。然后,客戶機(jī)將斷開的對等體的隊(duì)列中待決的所有無法履行的請求再分配給剩余的對等體中的一個(gè)或多個(gè)。用于再分配請求的過程十分類似于用于分配第一個(gè)地方的請求的過程。唯一的例外是在請求再分配時(shí),必須考慮已經(jīng)向斷開的對等體請求的塊的數(shù)目。
最后,只要擦除編碼塊到達(dá)客戶機(jī)處,它們都立即離開TCP套接字。在將到達(dá)的內(nèi)容與待決的請求配對之后,從請求隊(duì)列中除去已履行的請求。然后,所識別的擦除編碼塊被放入分級隊(duì)列。結(jié)果,分級隊(duì)列的大小增加。如果分級隊(duì)列達(dá)到預(yù)定大小Tstaging,那么,不發(fā)送媒體數(shù)據(jù)包/數(shù)據(jù)單元的更多請求。一旦已接收某個(gè)數(shù)據(jù)單元的所有擦除編碼塊,該數(shù)據(jù)單元就被擦除解碼,并被標(biāo)記為“就緒”。如果所有其所請求的數(shù)據(jù)單元就緒,那么,媒體數(shù)據(jù)包變成就緒。音頻/視頻解碼器周期性地從分級隊(duì)列中除去“就緒”的媒體數(shù)據(jù)包。這減小分級隊(duì)列的大小,并可能會觸發(fā)新媒體數(shù)據(jù)包請求的生成。
以上所述的媒體流傳送操作隨后繼續(xù)進(jìn)行,直到完成媒體文件的重放,或直到諸如沒有足夠的對等體可用來流傳送媒體等時(shí)刻,或用戶終止流傳送會話。
3.3PeerStreamer操作以上根據(jù)圖2至圖9描述的過程由圖10中的通用操作流程圖來示出。一般而言,圖10展示了示出PeerStreamer的幾個(gè)操作實(shí)施例的示例性操作流程圖。應(yīng)該注意,由圖10中的折線或虛線來表示的任何方框和方框之間的互連表示這里所描述的PeerStreamer的替換實(shí)施例;并且,如下所述,可以結(jié)合在整個(gè)文檔中描述的其他替換實(shí)施例來使用任何或所有這些替換實(shí)施例。
具體地,如圖10所示,在媒體流傳送操作之前,服務(wù)器200(也可能是對等體220之一)對將要流傳送的媒體進(jìn)行編碼(1000)。如上所述,PeerStreamer能夠利用許多常規(guī)編解碼器(例如,MPEG 1/2/4、WMA、WMV等)中的任何一種來進(jìn)行操作。此外,在編碼過程1000期間,服務(wù)器200也生成前述的媒體頭部和包含媒體結(jié)構(gòu)的伴隨文件。
如上所述,在一個(gè)實(shí)施例中,一旦媒體被編碼(1000),所編碼的媒體數(shù)據(jù)包就被分成(1005)多個(gè)固定大小的數(shù)據(jù)單元。另外,對于所編碼的媒體,媒體頭部和媒體結(jié)構(gòu)也被分成(1005)多個(gè)與用來分割已編碼媒體數(shù)據(jù)包的相同的固定大小的數(shù)據(jù)單元。如以上所解釋的,通過將信息分成(1005)固定長度數(shù)據(jù)單元,來允許客戶機(jī)和服務(wù)對等體在媒體流傳送操作之前預(yù)先分配存儲塊,從而在流傳送過程期間避免計(jì)算上昂貴的存儲器分配操作。另外,較小的數(shù)據(jù)單元的運(yùn)用允許客戶機(jī)對每個(gè)服務(wù)對等體所消耗的確切的帶寬數(shù)量的較精細(xì)的控制,以便在流傳送操作期間滿足客戶機(jī)數(shù)據(jù)單元請求。
除了將已編碼媒體、媒體頭部和媒體結(jié)構(gòu)分成(1005)較小的數(shù)據(jù)單元以外,在一個(gè)實(shí)施例中,附加編碼層還用來在服務(wù)對等體本質(zhì)上不可靠的典型P2P環(huán)境中提供增加的冗余度。具體地,如上所述,在一個(gè)實(shí)施例中,使用基于關(guān)鍵字的高速率擦除彈性編碼過程1010,來將這些數(shù)據(jù)單元進(jìn)一步分成多個(gè)數(shù)據(jù)塊。
這類編碼1010的運(yùn)用確保對等體中的一個(gè)或多個(gè)將具有重建特定的數(shù)據(jù)單元所必要數(shù)據(jù)塊,同時(shí),簡化客戶機(jī)上識別對等體中的哪一個(gè)包含必要數(shù)據(jù)的要求。另外,如上所述,在一個(gè)實(shí)施例中,每個(gè)服務(wù)對等體220所使用的擦除彈性編碼關(guān)鍵字被服務(wù)器200自動(dòng)分配給每個(gè)對等體。但是,在另一個(gè)實(shí)施例中,每個(gè)服務(wù)對等體220僅僅隨機(jī)地選擇擦除彈性編碼關(guān)鍵字。然后,這些關(guān)鍵字連同前述的可用性向量一起被包括在內(nèi);當(dāng)每個(gè)對等體220最初由客戶機(jī)來聯(lián)系時(shí),可用性向量由客戶機(jī)210來檢索。在隨機(jī)關(guān)鍵字實(shí)施例中,在對給定數(shù)據(jù)單元存在關(guān)鍵字沖突的情況下,客戶機(jī)隨后使一個(gè)或多個(gè)對等體的關(guān)鍵字無效。
一旦媒體最初已被編碼(1000)、被分成數(shù)據(jù)單元(1005)并可能進(jìn)一步被擦除編碼(1010),最后得到的數(shù)據(jù)單元或數(shù)據(jù)塊隨后就被分發(fā)(1015)給各個(gè)服務(wù)對等體220。該分發(fā)(1015)會是深思熟慮的,這體現(xiàn)在已編碼媒體的塊或數(shù)據(jù)包僅僅被全部或部分地提供給多個(gè)對等體,它隨后被高速緩存或存儲在那里,用于當(dāng)被與P2P網(wǎng)絡(luò)連接的客戶機(jī)調(diào)用時(shí)的進(jìn)一步的流傳送操作。
或者,如上所述,只要客戶機(jī)210流傳送特定的媒體文件,恢復(fù)的媒體數(shù)據(jù)包都只是編碼操作1000之后的媒體數(shù)據(jù)包。它們可以被分成數(shù)據(jù)單元(1005),并可被進(jìn)一步擦除編碼(1010);并且,客戶機(jī)可能在本地存儲器或存儲內(nèi)維持流傳送到它那里的內(nèi)容的至少一部分。然后,客戶機(jī)被識別為服務(wù)對等體220(在前述對等體列表310中),用于將來的流傳送操作。這個(gè)實(shí)施例的一個(gè)優(yōu)點(diǎn)是包含特定媒體文件的各個(gè)部分的對等體的數(shù)目最初很低,從而增加服務(wù)器本身上的要求,以滿足服務(wù)請求,但隨著時(shí)間的流逝并且更多客戶機(jī)流傳送該媒體,那些客戶機(jī)隨后將能夠擔(dān)當(dāng)用于以后的流傳送請求的對等體。因此,不需要明確地選擇服務(wù)對等體220,以保持將要被流傳送的媒體的全部或一部分的初始高速緩存。結(jié)果,對于試圖識別愿意接受將要被流傳送的媒體的初始高速緩存的對等體,進(jìn)一步減少服務(wù)器上的任何要求。
在任何情況下,一旦媒體已被分發(fā)(1015)給服務(wù)對等體220,客戶機(jī)210隨后就準(zhǔn)備好開始將請求流傳送到那些服務(wù)對等體。另外,如上所述,出于流傳送到客戶機(jī)210的目的,服務(wù)器200也可以擔(dān)當(dāng)服務(wù)對等體220。再有,鑒于以上討論,應(yīng)該清楚,隨著時(shí)間的流逝,特定媒體文件的初始流傳送可以要求更大的服務(wù)器200牽連,并且,更多客戶機(jī)210流傳送該媒體(并且隨后可擔(dān)當(dāng)服務(wù)對等體),實(shí)際上擔(dān)當(dāng)服務(wù)對等體的服務(wù)器上的各個(gè)要求被減少或甚至被消除。
這時(shí),客戶機(jī)210通過首先檢索可用服務(wù)對等體220的列表310,來開始流傳送會話。如上所述,該列表310直接從服務(wù)器200中、從對等體220之一中、或通過使用用于識別潛在服務(wù)對等體的常規(guī)DHT方法315來檢索。一旦客戶機(jī)210檢索了對等體列表310,該客戶機(jī)隨后就連接到每個(gè)服務(wù)對等體220,并從每個(gè)對等體中檢索(1025)可用性向量。另外,在一個(gè)實(shí)施例中,客戶機(jī)210在正在進(jìn)行的流傳送操作期間周期性核對對于對等體列表310的更新(1030)。執(zhí)行這類周期性核對(1030)的一個(gè)優(yōu)點(diǎn)是在大型P2P網(wǎng)絡(luò)中,多個(gè)服務(wù)對等體任何給定的時(shí)刻正在聯(lián)機(jī)和脫機(jī)是可能的。因此,確??蛻魴C(jī)210具有已更新的對等體列表310將允許該客戶機(jī)響應(yīng)于當(dāng)前正將媒體流傳送到該客戶機(jī)的對等體220的衰減或降級。只要列表310的周期性核對(1030)指出對該列表添加新的對等體220,客戶機(jī)210就再次連接到該新的對等體,并檢索(1025)該新的對等體的可用性向量。
一旦客戶機(jī)210檢索(1025)了每個(gè)對等體220的可用性向量,該客戶機(jī)隨后就通過經(jīng)由該客戶機(jī)與那些對等體之間的網(wǎng)絡(luò)連接而請求對應(yīng)于來自這些對等體中的一個(gè)或多個(gè)的信息的數(shù)據(jù)單元,來檢索(1035)將要從這些服務(wù)對等體中的一個(gè)或多個(gè)流傳送的媒體的媒體頭部和媒體結(jié)構(gòu)。
如上所述,媒體頭部通常包含描述該媒體的全局信息,例如,媒體中的通道數(shù)目、每個(gè)通道的屬性和特征(音頻采樣率、視頻分辨率/幀速率)、所使用的編解碼器、媒體的作者/版權(quán)持有者、等等。因此,媒體流傳送會話的起始處的媒體頭部的檢索允許客戶機(jī)220對這些必要的工具進(jìn)行設(shè)置或初始化(1040),以便在該流傳送會話期間接收那些數(shù)據(jù)包之前對隨后接收的數(shù)據(jù)包進(jìn)行解碼(1070)和呈現(xiàn)(1075)。
另外,在檢索(1035)特定流媒體的媒體結(jié)構(gòu)之后,客戶機(jī)分析該媒體結(jié)構(gòu),并計(jì)算在流傳送過程期間將需要被請求的流媒體的數(shù)據(jù)單元的數(shù)據(jù)單元ID(1045)。然后,客戶機(jī)210向服務(wù)對等體220中的一個(gè)或多個(gè)逐個(gè)地請求那些數(shù)據(jù)單元(1050)。
另外,如上所述,在結(jié)合編碼關(guān)鍵字的隨機(jī)對等體選擇來使用擦除編碼的實(shí)施例中,客戶機(jī)210將使對等體220中的一個(gè)或多個(gè)上的重復(fù)關(guān)鍵字無效,以便管理關(guān)鍵字沖突(1055)。在一個(gè)相關(guān)實(shí)施例中,PeerStreamer使用嵌入編碼媒體,并且,隨后根據(jù)可用的服務(wù)帶寬和客戶機(jī)210隊(duì)列狀態(tài)來管理(1060)每個(gè)對等體220的數(shù)據(jù)請求(和流傳送比特率)。在此情況下,數(shù)據(jù)單元的正在進(jìn)行的請求(1050)對應(yīng)于將基于各個(gè)服務(wù)對等體的可用帶寬來提供最小速率失真的那些數(shù)據(jù)包。在任何情況下,如上所述,都根據(jù)是使用嵌入還是非嵌入編碼、對等體的連接狀態(tài)、以及剩下來用于請求和接收缺少的或新近的數(shù)據(jù)單元的時(shí)間,來再次向同一或另一對等體220請求(1050)缺少的或新近的數(shù)據(jù)單元。
最后,一旦根據(jù)客戶機(jī)220請求(1050)檢索了構(gòu)成特定媒體數(shù)據(jù)包的所有數(shù)據(jù)單元,那些數(shù)據(jù)包就被重新匯編(1065)成原始媒體數(shù)據(jù)包。然后,重新匯編的媒體數(shù)據(jù)包被解碼(1070)、被呈現(xiàn)(1075)和被提供,用于常規(guī)的顯示設(shè)備355或揚(yáng)聲器260中的任何一個(gè)或兩者上的重放。
已出于舉例說明和描述的目的來呈現(xiàn)對PeerStreamer的前述描述。它并不意在做到詳盡或?qū)⒈景l(fā)明局限于所揭示的精確形式。按照以上的教導(dǎo),許多修改和變更是可能的。另外,應(yīng)該注意,可以在形成PeerStreamer的其它混合式實(shí)施例所需要的任何組合中使用任何或所有這些上述的替換實(shí)施例。本發(fā)明的范圍意在不受到本詳細(xì)描述的限制,而是受到所附權(quán)利要求書的限制。
權(quán)利要求
1.一種具有計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)可讀介質(zhì),所述計(jì)算機(jī)可執(zhí)行指令用于在對等(P2P)網(wǎng)絡(luò)中提供多媒體數(shù)據(jù)包的客戶機(jī)驅(qū)動(dòng)流傳送,,所述計(jì)算機(jī)可執(zhí)行指令包括將媒體頭部和媒體主體與已編碼的媒體文件分開;在一個(gè)或多個(gè)服務(wù)對等體上高速緩存所述媒體頭部和所述媒體主體的至少一個(gè)或多個(gè)數(shù)據(jù)包,以便在至少一個(gè)所述服務(wù)對等體上高速緩存每個(gè)數(shù)據(jù)包;使用客戶機(jī)計(jì)算機(jī)來檢索所述服務(wù)對等體的列表;使用所述客戶機(jī)計(jì)算機(jī)來從所述服務(wù)對等體列表上的服務(wù)對等體中的一個(gè)或多個(gè)中檢索可用性向量;使用所述客戶機(jī)計(jì)算機(jī)來基于所檢索的可用性向量從所述對等體群集中檢索構(gòu)成所述媒體頭部的數(shù)據(jù)包;使用所述客戶機(jī)計(jì)算機(jī)來對所述媒體主體的每個(gè)數(shù)據(jù)包從所述媒體頭部中計(jì)算數(shù)據(jù)ID;以及使用所計(jì)算的數(shù)據(jù)ID來向一個(gè)或多個(gè)特定服務(wù)對等體請求所述媒體主體的特定數(shù)據(jù)包的傳輸。
2.如權(quán)利要求1所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,高速緩存在每個(gè)服務(wù)對等體中的數(shù)據(jù)包的相對比例p與所述對等體的服務(wù)帶寬成正比,與所述媒體的比特率成反比,并服從1.0的最大相對比例。
3.如權(quán)利要求1所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述媒體是嵌入編碼媒體,并且,所述數(shù)據(jù)包對應(yīng)于已編碼媒體的不同的比特率層,并且其中,高速緩存在每個(gè)服務(wù)對等體中的所述數(shù)據(jù)包的一相對比例p與素?cái)?shù)對等體的服務(wù)帶寬成正比,與所述數(shù)據(jù)包的比特率成反比,并服從1.0的最大相對比例。
4.如權(quán)利要求1的所述計(jì)算機(jī)可讀介質(zhì),其特征在于,還包括響應(yīng)于所述數(shù)據(jù)包傳輸請求,提供所接收的數(shù)據(jù)包的基于實(shí)時(shí)客戶機(jī)的解碼,以提供從一個(gè)或多個(gè)所述服務(wù)對等體到所述客戶機(jī)的流媒體傳輸。
5.如權(quán)利要求1所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,還包括為已編碼的媒體文件生成媒體結(jié)構(gòu)伴隨文件。
6.如權(quán)利要求1所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,在至少一個(gè)所述服務(wù)對等體上高速緩存一個(gè)或多個(gè)數(shù)據(jù)包包括將所述數(shù)據(jù)包分成固定長度的數(shù)據(jù)單元,并在所述一個(gè)或多個(gè)服務(wù)對等體上高速緩存所述數(shù)據(jù)單元。
7.如權(quán)利要求6所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,在將所述數(shù)據(jù)單元高速緩存在所述服務(wù)對等體上之前,每個(gè)數(shù)據(jù)單元被映射到ID空間中的唯一ID,所述ID空間對應(yīng)于所述客戶計(jì)算機(jī)所計(jì)算的數(shù)據(jù)IDs。
8.如權(quán)利要求5所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述媒體結(jié)構(gòu)伴隨文件定義已編碼媒體文件的特征,至少包括已編碼媒體文件的每個(gè)數(shù)據(jù)包的時(shí)間標(biāo)記和長度,并且其中,所定義的特征被所述客戶機(jī)用來計(jì)算所述數(shù)據(jù)IDs。
9.如權(quán)利要求1所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,檢索所述服務(wù)對等體的列表包括以下任何一種從所述服務(wù)對等體之一中檢索該列表;從服務(wù)器計(jì)算機(jī)中檢索該列表;以及執(zhí)行分布式散列表(DHT)查找,以識別所述服務(wù)對等體。
10.如權(quán)利要求1所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,每個(gè)服務(wù)對等體的可用性向量包括由每個(gè)對應(yīng)的服務(wù)對等體保持的已編碼媒體文件的確切部分的簡潔說明。
11.如權(quán)利要求1所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述客戶機(jī)與每個(gè)服務(wù)對等體之間的通信,包括客戶機(jī)傳輸請求和服務(wù)對等體傳輸,是使用TCP通信協(xié)議來實(shí)現(xiàn)的。
12.如權(quán)利要求1所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述客戶機(jī)與每個(gè)服務(wù)對等體之間的通信使用自動(dòng)重復(fù)請求(ARQ)協(xié)議來重發(fā)丟失或延遲的數(shù)據(jù)包。
13.如權(quán)利要求1所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述已編碼媒體文件是被嵌入編碼的。
14.如權(quán)利要求1所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,在向所述客戶機(jī)的流媒體傳輸期間,周期性地更新所述服務(wù)對等體的列表。
15.一種用于在對等(P2P)網(wǎng)絡(luò)中將媒體流傳送到一個(gè)或多個(gè)客戶機(jī)的方法,包括使用計(jì)算設(shè)備以便在一個(gè)或多個(gè)服務(wù)對等體上存儲已編碼媒體文件的一個(gè)或多個(gè)數(shù)據(jù)包,以便每個(gè)數(shù)據(jù)包被高速緩存在至少一個(gè)所述服務(wù)對等體上,所述已編碼媒體文件包括媒體頭部和媒體主體;在每個(gè)服務(wù)對等體上,確定至少定義該服務(wù)對等體上的可用的所存儲的數(shù)據(jù)包的可用性向量;識別所述服務(wù)對等體的列表,并在客戶機(jī)請求之后來將所述列表提供給客戶機(jī)計(jì)算機(jī);使用提供給所述客機(jī)戶計(jì)算機(jī)的服務(wù)對等體列表來下載每個(gè)列出的服務(wù)對等體的可用性向量,并進(jìn)一步將所述媒體頭部文件從所述服務(wù)對等體群集下載到所述客戶機(jī);在所述客戶機(jī)計(jì)算機(jī)上,從所述媒體頭部中計(jì)算關(guān)于已編碼媒體文件的每個(gè)數(shù)據(jù)包的數(shù)據(jù)ID,并使用所計(jì)算的數(shù)據(jù)ID來向一個(gè)或多個(gè)特定服務(wù)對等體請求所述媒體主體的特定數(shù)據(jù)包的順序傳輸;以及響應(yīng)于所述數(shù)據(jù)包傳輸請求對所接收的每個(gè)數(shù)據(jù)包進(jìn)行解碼和呈現(xiàn),以便在所述客戶機(jī)計(jì)算機(jī)上提供實(shí)時(shí)流媒體重放。
16.如權(quán)利要求15所述的方法,其特征在于,還包括計(jì)算至少包括已編碼媒體文件的每個(gè)數(shù)據(jù)包的時(shí)間標(biāo)記和長度的單獨(dú)的媒體結(jié)構(gòu)伴隨文件,并且其中,使用所定義的特征來計(jì)算所述數(shù)據(jù)ID。
17.如權(quán)利要求15所述的方法,其特征在于,使用所下載的媒體頭部來對所述客戶機(jī)計(jì)算機(jī)上的解碼器和呈現(xiàn)器進(jìn)行初始化,用于被傳送到所述客戶機(jī)計(jì)算機(jī)的已編碼媒體文件的數(shù)據(jù)包的順序解碼和呈現(xiàn)。
18.如權(quán)利要求15所述的方法,其特征在于,在一個(gè)或多個(gè)服務(wù)對等體上存儲已編碼媒體文件的一個(gè)或多個(gè)所述數(shù)據(jù)包還包括將每個(gè)數(shù)據(jù)包分成固定長度數(shù)據(jù)單元,并在所述一個(gè)或多個(gè)服務(wù)對等體上存儲所述固定長度數(shù)據(jù)單元。
19.如權(quán)利要求18所述的方法,其特征在于,在將所述數(shù)據(jù)單元存儲在所述服務(wù)對等體上之前,每個(gè)數(shù)據(jù)單元被映射到唯一ID空間中,所述ID空間對應(yīng)于所述客戶機(jī)計(jì)算機(jī)所計(jì)算的數(shù)據(jù)ID。
20.如權(quán)利要求19所述的方法,其特征在于,向一個(gè)或多個(gè)特定服務(wù)對等體請求已編碼媒體文件的特定數(shù)據(jù)包的順序傳輸包括向一個(gè)或多個(gè)所述對等體請求構(gòu)成每個(gè)媒體數(shù)據(jù)包的特定數(shù)據(jù)單元,并使用所述客戶機(jī)計(jì)算機(jī)來再結(jié)合所請求的數(shù)據(jù)單元,以便在對每個(gè)數(shù)據(jù)包進(jìn)行解碼和呈現(xiàn)之前重建每個(gè)媒體數(shù)據(jù)包。
21.如權(quán)利要求15所述的方法,其特征在于,將所述服務(wù)對等體列表提供給所述客戶機(jī)計(jì)算機(jī)包括以下任何一種從所述服務(wù)對等體之一中檢索該列表;從服務(wù)器計(jì)算機(jī)中檢索該列表;以及執(zhí)行分布式散列表(DHT)查找,以識別所述服務(wù)對等體列表。
22.如權(quán)利要求15所述的方法,其特征在于,所述客戶機(jī)與每個(gè)服務(wù)對等體之間的通信,包括客戶機(jī)傳輸請求和服務(wù)對等體傳輸,是通過使用TCP通信協(xié)議來轉(zhuǎn)發(fā)丟失或延遲的數(shù)據(jù)包來實(shí)現(xiàn)的。
23.如權(quán)利要求15所述的方法,其特征在于,被高速緩存在每個(gè)服務(wù)對等體中的數(shù)據(jù)包的一個(gè)相對比例p與所述對等體的服務(wù)帶寬成正比,與所述媒體的比特率成反比,并服從1.0的最大相對比例。
24.如權(quán)利要求15所述的方法,其特征在于,所述媒體是嵌入編碼媒體,并且,所述數(shù)據(jù)包對應(yīng)于已編碼媒體的不同的比特率層,并且其中,被高速緩存在每個(gè)服務(wù)對等體中的數(shù)據(jù)包的一個(gè)相對比例p與所述對等體的服務(wù)帶寬成正比,與所述數(shù)據(jù)包的比特率成反比,并服從1.0的最大相對比例。
25.一種用于提供從一個(gè)或多個(gè)非合作對等體到一個(gè)或多個(gè)客戶機(jī)的協(xié)同接收器驅(qū)動(dòng)媒體流傳送系統(tǒng),包括使用服務(wù)器來為媒體文件編碼并構(gòu)造一伴隨文件,所述伴隨文件定義所編碼的媒體文件中每個(gè)數(shù)據(jù)包的數(shù)據(jù)包時(shí)間標(biāo)記和數(shù)據(jù)包長度,并且然后將所編碼的媒體文件和所述伴隨文件的數(shù)據(jù)包中的一個(gè)或多個(gè)分發(fā)給一個(gè)或多個(gè)服務(wù)對等體;在每個(gè)服務(wù)對等體上,構(gòu)造一可用性向量,所述可用性向量定義該服務(wù)對等體上所保持的已編碼媒體文件的特定數(shù)據(jù)包;從所述客戶機(jī)計(jì)算機(jī)中檢索一個(gè)或多個(gè)所述服務(wù)對等體的列表,所述列表包括足夠的服務(wù)對等體,以便所列出的服務(wù)對等體的總計(jì)保持表示整個(gè)已編碼媒體文件的數(shù)據(jù)包;從所述客戶機(jī)計(jì)算機(jī)聯(lián)系每個(gè)被列出的服務(wù)對等體,并下載每個(gè)被列出的服務(wù)對等體的可用性向量,并且,從所述服務(wù)對等體之一下載所述伴隨文件;在所述客戶計(jì)算機(jī)上,從所述伴隨文件中計(jì)算所編碼的媒體文件的每個(gè)數(shù)據(jù)包的數(shù)據(jù)ID,并結(jié)合所述可用性向量來使用所計(jì)算的數(shù)據(jù)ID,用于向一個(gè)或多個(gè)特定服務(wù)對等體請求所編碼的媒體文件的特定數(shù)據(jù)包的傳輸;以及響應(yīng)于所述數(shù)據(jù)包傳輸請求,對所述客戶機(jī)計(jì)算機(jī)所接收的每個(gè)數(shù)據(jù)包進(jìn)行解碼和呈現(xiàn)。
26.如權(quán)利要求25所述的系統(tǒng),其特征在于,將所編碼的媒體文件和所述伴隨文件的數(shù)據(jù)包中的一個(gè)或多個(gè)分配給一個(gè)或多個(gè)服務(wù)對等體包括將所編碼的媒體文件和所述伴隨文件的每個(gè)數(shù)據(jù)包分成固定長度數(shù)據(jù)單元,并將所述固定長度數(shù)據(jù)單元存儲在所述一個(gè)或多個(gè)服務(wù)對等體上。
27.如權(quán)利要求26所述的系統(tǒng),其特征在于,在將所述數(shù)據(jù)單元存儲在所述服務(wù)對等體上之前,每個(gè)數(shù)據(jù)單元被映射到唯一ID空間中,所述ID空間對應(yīng)于所述客戶機(jī)計(jì)算機(jī)所計(jì)算的數(shù)據(jù)ID。
28.如權(quán)利要求27所述的系統(tǒng),其特征在于,向一個(gè)或多個(gè)特定服務(wù)對等體請求所編碼的媒體文件的特定數(shù)據(jù)包的傳輸包括使用所計(jì)算的數(shù)據(jù)ID向一個(gè)或多個(gè)所述對等體請求構(gòu)成每個(gè)數(shù)據(jù)包的特定數(shù)據(jù)單元,并使用所述客戶機(jī)計(jì)算機(jī)來再結(jié)合所請求的數(shù)據(jù)單元,以便在對每個(gè)數(shù)據(jù)包進(jìn)行解碼和呈現(xiàn)之前重建每個(gè)媒體數(shù)據(jù)包。
29.如權(quán)利要求25所述的系統(tǒng),其特征在于,被高速緩存在每個(gè)服務(wù)對等體中的數(shù)據(jù)包的一個(gè)相對比例p與所述對等體的服務(wù)帶寬成正比例,與所述媒體的比特率成反比,并服從1.0的最大相對比例。
30.如權(quán)利要求25所述的系統(tǒng),其特征在于,所述媒體是嵌入編碼媒體,并且,所述數(shù)據(jù)包對應(yīng)于所編碼的媒體的不同的比特率層,并且其中,被高速緩存在每個(gè)服務(wù)對等體中的數(shù)據(jù)包的一個(gè)相對比例p與所述對等體的服務(wù)帶寬成正比例,與所述數(shù)據(jù)包的比特率成反比,并服從1.0的最大相對比例。
全文摘要
“PeerStreamer”提供用于松散耦合的P2P網(wǎng)絡(luò)的接收器驅(qū)動(dòng)對等(P2P)媒體流傳送。該網(wǎng)絡(luò)中的對等體只執(zhí)行簡單的操作、可以高速緩存流媒體的全部或一部分、不與其他對等體協(xié)作、可能是不可靠的、以及可以在任何給定的流傳送會話期間脫機(jī)或聯(lián)機(jī)。該網(wǎng)絡(luò)中的客戶機(jī)進(jìn)行實(shí)時(shí)操作,以便協(xié)調(diào)對等體、將媒體從多個(gè)對等體流傳送、執(zhí)行負(fù)載平衡、處理對等體的聯(lián)機(jī)/脫機(jī)狀態(tài)、以及執(zhí)行對該流媒體的解碼和呈現(xiàn)。在一個(gè)實(shí)施例中,PeerStreamer使用高速率擦除彈性編碼來允許多個(gè)服務(wù)對等體保持部分媒體而無沖突,以便客戶機(jī)僅僅檢索固定數(shù)量的擦除編碼塊,而不管在哪里檢索和檢索什么特定塊。在另一個(gè)實(shí)施例中,PeerStreamer使用嵌入編碼媒體來根據(jù)可用的服務(wù)帶寬和客戶機(jī)隊(duì)列狀態(tài)而改變流傳送比特率。
文檔編號H04L1/18GK1744500SQ20051009191
公開日2006年3月8日 申請日期2005年8月3日 優(yōu)先權(quán)日2004年9月3日
發(fā)明者李謹(jǐn) 申請人:微軟公司