專利名稱:P2p環(huán)境下的數(shù)據(jù)傳輸方法
技術(shù)領(lǐng)域:
本發(fā)明涉及流媒體數(shù)據(jù)傳輸方法,特別涉及P2P環(huán)境下的數(shù)據(jù)傳輸方法。
背景技術(shù):
隨著互聯(lián)網(wǎng)絡(luò)及其接入技術(shù)的快速發(fā)展,網(wǎng)絡(luò)的數(shù)據(jù)傳輸能力得到了快速提升, 這使得過(guò)去無(wú)法大面積應(yīng)用的海量數(shù)據(jù)交互應(yīng)用程序獲得了極大的發(fā)展空間。此類的應(yīng)用 程序包括視頻直播系統(tǒng)、視頻點(diǎn)播系統(tǒng)、多媒體視像會(huì)議、遠(yuǎn)程醫(yī)療等。由于數(shù)據(jù)量過(guò)大, 傳統(tǒng)的客戶端/服務(wù)器模式并不能滿足這些應(yīng)用程序,其服務(wù)器端有限的資源會(huì)被輕易占 滿,使得系統(tǒng)難以大面積部署。因此當(dāng)前這些程序通常轉(zhuǎn)而選擇P2P互助的模式傳輸數(shù)據(jù), 以期快速、高效、廉價(jià)的部署到互聯(lián)網(wǎng)絡(luò)中。 相較于客戶端/服務(wù)器模式,P2P技術(shù)擁有網(wǎng)絡(luò)負(fù)載均衡、易于快速大規(guī)模部署的 優(yōu)點(diǎn)。以P2P視頻直播系統(tǒng)為例,系統(tǒng)中各個(gè)客戶端不但可以從視頻的直接發(fā)布者請(qǐng)求數(shù) 據(jù),同時(shí)還可以從其它客戶端中分享數(shù)據(jù)。這種分享策略雖然會(huì)在一定程度上造成視頻播 放的延遲,但卻可以極大減輕該流媒體發(fā)布者的負(fù)擔(dān)。實(shí)際上,對(duì)于普通的網(wǎng)絡(luò)視頻直播服 務(wù)來(lái)說(shuō),用戶只要能夠流暢收看到所希望看到的直播節(jié)目就會(huì)有很高的用戶滿意度,而并 不會(huì)在意數(shù)秒甚至數(shù)分鐘的延遲。 雖然P2P的理念已經(jīng)廣泛應(yīng)用于各種數(shù)據(jù)傳輸系統(tǒng)中,但是在實(shí)現(xiàn)細(xì)節(jié)方面,仍 然有很多值得深入探討和研究的問(wèn)題 第一,常見(jiàn)的網(wǎng)絡(luò)終端接入技術(shù),如ADSL等,大都存在下載能力大于上傳能力的 問(wèn)題,由于P2P流媒體系統(tǒng)的終端互助特性使得一個(gè)P2P流媒體終端通常需要連接多個(gè)鄰 居節(jié)點(diǎn)才可以獲得穩(wěn)定的數(shù)據(jù)回放效果。如何打散媒體數(shù)據(jù)流、并將子數(shù)據(jù)流指派給鄰居 節(jié)點(diǎn)集合,才能使得P2P流媒體系統(tǒng)的主要性能指標(biāo)最大化,當(dāng)前還沒(méi)有明確方案。
第二, P2P流媒體系統(tǒng)中數(shù)據(jù)交換包含兩種基本策略以數(shù)據(jù)提供節(jié)點(diǎn)為驅(qū)動(dòng)力 量的推策略和以數(shù)據(jù)獲得節(jié)點(diǎn)為驅(qū)動(dòng)力量的拉策略。
(1)推策略指P2P流媒體系統(tǒng)中的數(shù)據(jù)提供節(jié)點(diǎn)在未收到數(shù)據(jù)請(qǐng)求時(shí),主動(dòng)推送
流媒體數(shù)據(jù)到其鄰居節(jié)點(diǎn)。使用推策略可以降低系統(tǒng)客戶端的網(wǎng)絡(luò)時(shí)延,提高用戶體驗(yàn)評(píng)
分;但盲目使用推策略會(huì)導(dǎo)致數(shù)據(jù)的重復(fù)發(fā)送,對(duì)帶寬資源會(huì)造成較大浪費(fèi); (2)拉策略指P2P流媒體系統(tǒng)中數(shù)據(jù)請(qǐng)求節(jié)點(diǎn)顯式發(fā)出媒體數(shù)據(jù)請(qǐng)求消息到其鄰
居節(jié)點(diǎn),鄰居節(jié)點(diǎn)處理該請(qǐng)求消息后決定是否發(fā)送媒體數(shù)據(jù)給該數(shù)據(jù)請(qǐng)求節(jié)點(diǎn)。使用拉策
略可以最大限度地減小數(shù)據(jù)傳輸所占用的帶寬資源;然而,該策略會(huì)在一定程度上犧牲網(wǎng)
絡(luò)的實(shí)時(shí)性。
發(fā)明內(nèi)容
本發(fā)明的一個(gè)目的是克服現(xiàn)有技術(shù)將媒體數(shù)據(jù)流打散成子數(shù)據(jù)流時(shí)不能使P2P 流媒體系統(tǒng)的主要性能指標(biāo)最大化的缺陷,從而提供一種能夠提高性能指標(biāo)的P2P環(huán)境下 的數(shù)據(jù)傳輸方法。
4
本發(fā)明的又一個(gè)目的是克服現(xiàn)有技術(shù)缺乏將推策略和拉策略相結(jié)合的數(shù)據(jù)交換 方法的缺陷,從而提供一種能夠?qū)⑼撇呗院屠呗韵嘟Y(jié)合的P2P環(huán)境下的數(shù)據(jù)傳輸方法。
為了實(shí)現(xiàn)上述目的,本發(fā)明提供了一種P2P環(huán)境下的數(shù)據(jù)傳輸方法,包括
步驟1)、對(duì)所要傳輸數(shù)據(jù)做分割后得到多組子數(shù)據(jù)流; 步驟2)、在用戶所登錄的用戶節(jié)點(diǎn)以及該用戶節(jié)點(diǎn)的鄰居節(jié)點(diǎn)上維護(hù)推送記錄
表,所述推送記錄表用于記錄所在節(jié)點(diǎn)所要推送以及所要接收的子數(shù)據(jù)流的信息; 步驟3)、所述鄰居節(jié)點(diǎn)按照隨機(jī)的順序?qū)⒉煌M的子數(shù)據(jù)流推送給所述用戶節(jié)
點(diǎn),所述用戶節(jié)點(diǎn)接收子數(shù)據(jù)流后結(jié)合所述推送記錄表中的信息為所述鄰居節(jié)點(diǎn)分配該鄰
居節(jié)點(diǎn)負(fù)責(zé)推送的子數(shù)據(jù)流; 步驟4)、所述用戶節(jié)點(diǎn)接收并保存所述鄰居節(jié)點(diǎn)所推送的數(shù)據(jù)。
上述技術(shù)方案中,還包括 步驟5)、所述用戶節(jié)點(diǎn)在某些數(shù)據(jù)無(wú)法及時(shí)到達(dá)時(shí),向除了負(fù)責(zé)該數(shù)據(jù)推送的鄰 居節(jié)點(diǎn)外的其它鄰居節(jié)點(diǎn)請(qǐng)求該數(shù)據(jù)。 上述技術(shù)方案中,在所述的步驟1)中,對(duì)所要傳輸數(shù)據(jù)做分割包括分片、分組;其 中, 所述分片包括將數(shù)據(jù)按照規(guī)定的格式大小分割,得到數(shù)據(jù)分片;所述分組包括將 所述數(shù)據(jù)分片按照所述數(shù)據(jù)分配的標(biāo)識(shí)進(jìn)行分配,同一組的數(shù)據(jù)分片形成子數(shù)據(jù)流。
上述技術(shù)方案中,在對(duì)數(shù)據(jù)分片進(jìn)行分組時(shí),對(duì)所述數(shù)據(jù)分片的標(biāo)識(shí)做取模操作, 將標(biāo)識(shí)取模后所得到的余數(shù)相同的數(shù)據(jù)分片分在同一組中。
上述技術(shù)方案中,所述步驟3)包括 步驟3-1)、各個(gè)鄰居節(jié)點(diǎn)對(duì)所述子數(shù)據(jù)流的序號(hào)做隨機(jī)排列; 步驟3-2)、所述鄰居節(jié)點(diǎn)根據(jù)隨機(jī)排列結(jié)果將相應(yīng)序號(hào)的子數(shù)據(jù)流按序推送給用
戶節(jié)點(diǎn); 步驟3-3)、所述用戶節(jié)點(diǎn)接收到某一鄰居節(jié)點(diǎn)所推送的某一組子數(shù)據(jù)流后,根據(jù) 自身的推送記錄表的信息,決定是否將該子數(shù)據(jù)流分配給該鄰居節(jié)點(diǎn),并將決定后的結(jié)果 通知該鄰居節(jié)點(diǎn)。 上述技術(shù)方案中,所述步驟3-3)包括 步驟3-3-1)、所述用戶節(jié)點(diǎn)接收到某一鄰居節(jié)點(diǎn)所推送的某一組子數(shù)據(jù)流后,若 自身的推送記錄表中記錄拒絕接收該鄰居節(jié)點(diǎn)所推送的該組子數(shù)據(jù)流,則向該鄰居節(jié)點(diǎn)發(fā) 送拒絕消息,該鄰居節(jié)點(diǎn)接收到拒絕消息后,在其自身的推送記錄表中記錄,否則,執(zhí)行下 少; 步驟3-3-2)、若用戶節(jié)點(diǎn)自身的推送記錄表中記錄接收該鄰居節(jié)點(diǎn)所推送的該組 子數(shù)據(jù)流,則在該推送記錄表中記錄不接收其它鄰居節(jié)點(diǎn)所推送的該組子數(shù)據(jù)流,并向該 鄰居節(jié)點(diǎn)發(fā)送接收消息,該鄰居節(jié)點(diǎn)接收到接收消息后,在其自身的推送記錄表中記錄。
上述技術(shù)方案中,所述的步驟5)包括
步驟5-1)、為數(shù)據(jù)設(shè)立未到達(dá)預(yù)警時(shí)刻; 步驟5-2)、在當(dāng)前時(shí)刻到達(dá)該未到達(dá)預(yù)警時(shí)刻時(shí),檢查對(duì)應(yīng)的數(shù)據(jù)是否已經(jīng)到達(dá) 了所述用戶節(jié)點(diǎn),若沒(méi)有到達(dá),則向除了負(fù)責(zé)該數(shù)據(jù)推送的鄰居節(jié)點(diǎn)外的其它鄰居節(jié)點(diǎn)請(qǐng) 求該數(shù)據(jù),否則不做操作;
步驟5-3)、所述鄰居節(jié)點(diǎn)收到請(qǐng)求后,檢查自身是否保存有相應(yīng)的數(shù)據(jù),若有,將
該數(shù)據(jù)發(fā)送給所述用戶節(jié)點(diǎn),否則忽略該請(qǐng)求。 上述技術(shù)方案中,所述的步驟5)還包括 步驟5-4)、若當(dāng)前時(shí)刻大于最晚到達(dá)時(shí)刻時(shí),所請(qǐng)求的數(shù)據(jù)還未到達(dá)所述用戶節(jié)
點(diǎn),則拋棄該數(shù)據(jù)。 本發(fā)明的優(yōu)點(diǎn)在于 1、本發(fā)明將推策略與拉策略相結(jié)合,能夠盡可能地減少數(shù)據(jù)分片丟失情況的出 現(xiàn)。 2、本發(fā)明通過(guò)競(jìng)爭(zhēng)機(jī)制實(shí)現(xiàn)子數(shù)據(jù)流的分配,能夠減少冗余數(shù)據(jù)包的傳輸,提高 整個(gè)系統(tǒng)的性能。
圖1為P2P直播系統(tǒng)的示意圖; 圖2為本發(fā)明的P2P環(huán)境下的數(shù)據(jù)傳輸方法的流程圖; 圖3為本發(fā)明的P2P環(huán)境下的數(shù)據(jù)傳輸方法中為鄰居節(jié)點(diǎn)分配子數(shù)據(jù)流的流程 圖; 圖4為本發(fā)明的P2P環(huán)境下的數(shù)據(jù)傳輸方法中用戶節(jié)點(diǎn)主動(dòng)請(qǐng)求數(shù)據(jù)分片的實(shí)現(xiàn) 過(guò)程的流程圖; 圖5為對(duì)數(shù)據(jù)流的數(shù)據(jù)分片進(jìn)行分組的示意圖;
圖6為本發(fā)明中所涉及的推送記錄表的示意圖;
圖7為當(dāng)前時(shí)刻、預(yù)警時(shí)刻、最晚到達(dá)時(shí)刻間關(guān)系的示意圖。
具體實(shí)施例方式
下面結(jié)合附圖和具體實(shí)施方式
對(duì)本發(fā)明進(jìn)行說(shuō)明。 在下面的實(shí)施例中以P2P環(huán)境為例,對(duì)本發(fā)明的方法進(jìn)行說(shuō)明。在說(shuō)明方法之前, 首先就P2P環(huán)境做一舉例說(shuō)明。 圖1示出了一個(gè)P2P直播系統(tǒng)的示意圖,P2P直播系統(tǒng)是一種典型的P2P應(yīng)用環(huán) 境。在該系統(tǒng)中包括有服務(wù)器和客戶端節(jié)點(diǎn),而客戶端節(jié)點(diǎn)又可以分為直播發(fā)布者和直播 觀看者。上述的服務(wù)器和直播發(fā)布者參與某一直播數(shù)據(jù)的發(fā)布,而直播觀看者則參與該直 播數(shù)據(jù)的接收。由于直播發(fā)布者作為客戶端節(jié)點(diǎn)本身參與流媒體數(shù)據(jù)的分發(fā),因而能夠極 大減輕流媒體服務(wù)器端的工作壓力,促進(jìn)網(wǎng)絡(luò)負(fù)載均衡,提高網(wǎng)絡(luò)資源的使用效率。需要說(shuō) 明的是,圖1所示P2P直播系統(tǒng)中的直播發(fā)布者與直播觀看者的角色并不固定,對(duì)于某一客 戶端節(jié)點(diǎn)而言,它對(duì)于某一直播數(shù)據(jù)可能是發(fā)布者,對(duì)于另一直播數(shù)據(jù)就可能是參與者,甚 至同時(shí)屬于發(fā)布者和參與者。在下文中將以圖1所示的P2P直播系統(tǒng)為例,對(duì)本發(fā)明方法的 實(shí)現(xiàn)過(guò)程進(jìn)行說(shuō)明,但本領(lǐng)域技術(shù)人員應(yīng)當(dāng)了解,本發(fā)明的方法同樣適用于其它P2P應(yīng)用, 如P2P點(diǎn)播平臺(tái)上的數(shù)據(jù)傳輸、基于P2P技術(shù)的VoIP音頻/視頻電話的數(shù)據(jù)傳輸、基于P2P 技術(shù)的視頻會(huì)議的數(shù)據(jù)傳輸。 參考圖2,對(duì)本發(fā)明方法的實(shí)現(xiàn)過(guò)程進(jìn)行詳細(xì)說(shuō)明。 在圖1所示的P2P直播系統(tǒng)中,所要直播節(jié)目的數(shù)據(jù)流的數(shù)據(jù)量很大,需要對(duì)數(shù)據(jù)流做分割操作。在本實(shí)施例中,對(duì)數(shù)據(jù)流分割操作是將一個(gè)數(shù)據(jù)流分割成多個(gè)數(shù)據(jù)分片,所 述的數(shù)據(jù)分片是下文中所涉及的數(shù)據(jù)請(qǐng)求和文件傳輸操作的基本單位。每一個(gè)數(shù)據(jù)分片都 有一個(gè)唯一的分片標(biāo)識(shí),一般而言,數(shù)據(jù)分片的標(biāo)識(shí)按照時(shí)間順序依次生成。如圖5所示,
一個(gè)數(shù)據(jù)流在做分割操作后,按照數(shù)據(jù)分片生成的時(shí)間順序得到諸如標(biāo)記為11、12、13的 數(shù)據(jù)分片。 在得到數(shù)據(jù)分片后,還需要將各個(gè)數(shù)據(jù)分片分配到不同的組中。在一個(gè)實(shí)例中,根 據(jù)分片標(biāo)識(shí)模10的余數(shù),可以將分片分為10組,每組稱之為一個(gè)數(shù)據(jù)分組,或者子數(shù)據(jù)流。 標(biāo)識(shí)為0的子數(shù)據(jù)流指分片標(biāo)識(shí)模10為0的數(shù)據(jù)分片所組成的子數(shù)據(jù)流,標(biāo)志為1的子 數(shù)據(jù)流指分片標(biāo)識(shí)模10為1的數(shù)據(jù)分片所組成的子數(shù)據(jù)流,以此類推,在圖5中示出了數(shù) 據(jù)分片按照該方法分組的示意圖。以這種取模方式打散數(shù)據(jù)流,可以確保某一子數(shù)據(jù)流中 相鄰數(shù)據(jù)分片標(biāo)識(shí)保持一定距離,使得當(dāng)負(fù)責(zé)某一子數(shù)據(jù)流傳輸?shù)泥従庸?jié)點(diǎn)意外退出服務(wù) 時(shí),客戶端回放質(zhì)量不會(huì)嚴(yán)重下降。雖然在上述實(shí)例中將數(shù)據(jù)分片分成了 io個(gè)組,但在其 它實(shí)例中,分組的數(shù)目可以根據(jù)用戶的需要而改變,如5組、16組、20組皆可。雖然在本實(shí) 施例中采用分片、分組的方式實(shí)現(xiàn)數(shù)據(jù)流的分割操作,但在其它實(shí)施例中,本領(lǐng)域技術(shù)人員 也可以采用其它方式實(shí)現(xiàn)數(shù)據(jù)流的分割。 在完成數(shù)據(jù)流分割操作后,P2P直播系統(tǒng)中的任意一個(gè)客戶端節(jié)點(diǎn)都可以發(fā)起直 播請(qǐng)求,但在發(fā)起直播請(qǐng)求前,該客戶端節(jié)點(diǎn)應(yīng)當(dāng)已經(jīng)向P2P直播系統(tǒng)中的服務(wù)器注冊(cè),從 而獲取最新的節(jié)目列表信息,或通過(guò)訪問(wèn)P2P直播系統(tǒng)的網(wǎng)站獲取最新的節(jié)目列表信息 (步驟201)。用戶在客戶端節(jié)點(diǎn)根據(jù)節(jié)目列表信息選定所希望觀看的直播節(jié)目,然后向負(fù) 責(zé)該直播節(jié)目的Tracker服務(wù)器請(qǐng)求當(dāng)前參與該直播節(jié)目的節(jié)點(diǎn)列表。為了將用戶發(fā)起直 播請(qǐng)求時(shí)所在的客戶端節(jié)點(diǎn)與系統(tǒng)中一般的客戶端節(jié)點(diǎn)相區(qū)別,在本發(fā)明中將用戶發(fā)起直 播請(qǐng)求時(shí)所在的客戶端節(jié)點(diǎn)稱為用戶節(jié)點(diǎn)。用戶節(jié)點(diǎn)在得到節(jié)點(diǎn)列表后,就可以按照一定 策略從該列表中選擇不超過(guò)鄰居節(jié)點(diǎn)上限的數(shù)個(gè)節(jié)點(diǎn)作為該用戶節(jié)點(diǎn)的鄰居節(jié)點(diǎn),并與這 些鄰居節(jié)點(diǎn)建立連接(步驟202)。以圖1所示的P2P直播系統(tǒng)為例,假設(shè)有一客戶端節(jié)點(diǎn) C為一次直播請(qǐng)求時(shí)的用戶節(jié)點(diǎn),則為其選定的鄰居節(jié)點(diǎn)可以是節(jié)點(diǎn)A、節(jié)點(diǎn)B。在本實(shí)施 例中規(guī)定鄰居節(jié)點(diǎn)上限為5,在其它實(shí)施例中,鄰居節(jié)點(diǎn)上限的數(shù)目可以根據(jù)情況而發(fā)生改 變。 用戶節(jié)點(diǎn)在選定鄰居節(jié)點(diǎn)后,就可以為每個(gè)鄰居節(jié)點(diǎn)維護(hù)一個(gè)推送記錄表,該記 錄表中記錄了一個(gè)鄰居節(jié)點(diǎn)負(fù)責(zé)推送給該用戶節(jié)點(diǎn)的子數(shù)據(jù)流信息,以及該用戶節(jié)點(diǎn)負(fù)責(zé) 推送給該鄰居節(jié)點(diǎn)的子數(shù)據(jù)流信息(步驟203)。同樣的,在各個(gè)鄰居節(jié)點(diǎn)上也會(huì)維護(hù)一個(gè) 與該用戶節(jié)點(diǎn)有關(guān)的具有相似內(nèi)容的推送記錄表。在圖6中給出了推送記錄表的一個(gè)范 例,假設(shè)圖6所示的推送記錄表中所包含的信息用于維護(hù)前面所提到的用戶節(jié)點(diǎn)C與鄰居 節(jié)點(diǎn)A的子數(shù)據(jù)流推送關(guān)系。從該記錄表可以看出 (1)、在推送記錄的輸入行中記錄的是A向C傳輸子數(shù)據(jù)流的情況。例如,在輸入 行,子數(shù)據(jù)流0列的標(biāo)志為"O",表明A當(dāng)前并沒(méi)有負(fù)責(zé)傳輸子數(shù)據(jù)流0的數(shù)據(jù)分片給C。
(2)、在推送記錄的輸出行中記錄的是C向A傳輸子數(shù)據(jù)流的情況。例如,在輸出 行,子數(shù)據(jù)流n-l列的標(biāo)志為"l",表明C當(dāng)前正在負(fù)責(zé)傳輸子數(shù)據(jù)流n-l的數(shù)據(jù)分片給A。
圖6所示的推送記錄表是用戶節(jié)點(diǎn)C上的用于維護(hù)的C與A之間的子數(shù)據(jù)流推送 關(guān)系的相關(guān)數(shù)據(jù)結(jié)構(gòu),但在鄰居節(jié)點(diǎn)A上也會(huì)有類似的推送記錄表。
7
推送記錄表中的信息會(huì)根據(jù)情況而發(fā)生變化,在下面的說(shuō)明中會(huì)結(jié)合推送記錄表 對(duì)相關(guān)步驟進(jìn)行說(shuō)明。 P2P直播系統(tǒng)中那些被選定為鄰居節(jié)點(diǎn)的節(jié)點(diǎn)隨機(jī)產(chǎn)生前述子數(shù)據(jù)流數(shù)目的全排 列,然后各自按照該全排列的順序發(fā)送相應(yīng)子數(shù)據(jù)流給前述用戶節(jié)點(diǎn),經(jīng)過(guò)隨機(jī)競(jìng)爭(zhēng)機(jī)制 協(xié)調(diào),最終確定每個(gè)鄰居節(jié)點(diǎn)所負(fù)責(zé)的子數(shù)據(jù)流(步驟204)。在圖3中對(duì)本步驟的具體實(shí) 現(xiàn)過(guò)程做了說(shuō)明,下面結(jié)合圖3對(duì)如何確定各個(gè)鄰居節(jié)點(diǎn)所負(fù)責(zé)的子數(shù)據(jù)流的過(guò)程做詳細(xì) 說(shuō)明。 首先各個(gè)鄰居節(jié)點(diǎn)要隨機(jī)生成一個(gè)子數(shù)據(jù)流數(shù)目的全排列(步驟301)。例如,在 前述的一個(gè)實(shí)例中,子數(shù)據(jù)流的分組數(shù)為10個(gè),因此各個(gè)鄰居節(jié)點(diǎn)隨機(jī)產(chǎn)生整數(shù)從0到9 的一個(gè)全排列,如鄰居節(jié)點(diǎn)A產(chǎn)生的全排列為(1、2、9、0、5、3、4、6、8、7)。
接著,各個(gè)鄰居節(jié)點(diǎn)按照前面所得到的全排列的順序發(fā)送相應(yīng)子數(shù)據(jù)流的數(shù)據(jù)分 片給用戶節(jié)點(diǎn)(步驟302)。仍以前文所提到的鄰居節(jié)點(diǎn)A和用戶節(jié)點(diǎn)C為例,鄰居節(jié)點(diǎn)A 需要向用戶節(jié)點(diǎn)C推送數(shù)據(jù),因此鄰居節(jié)點(diǎn)A在根據(jù)全排列的順序依次選取擁有相同子數(shù) 據(jù)流序號(hào)的子數(shù)據(jù)流后,將該子數(shù)據(jù)流中分片標(biāo)識(shí)最小的分片推送給C。如圖5所示,如果 當(dāng)前正在處理全排列中的第一個(gè)數(shù)字l,則鄰居節(jié)點(diǎn)A發(fā)送標(biāo)識(shí)為1的子數(shù)據(jù)流中分片標(biāo)識(shí) 最小的一個(gè),即標(biāo)識(shí)為11的數(shù)據(jù)分片。 最后,用戶節(jié)點(diǎn)在收到鄰居節(jié)點(diǎn)所發(fā)送的數(shù)據(jù)分片后,檢查本地所保存的與相應(yīng) 鄰居節(jié)點(diǎn)有關(guān)的推送記錄表(步驟303),根據(jù)推送記錄表的相關(guān)記錄對(duì)該數(shù)據(jù)分片進(jìn)行處 理。例如,用戶節(jié)點(diǎn)C收到鄰居節(jié)點(diǎn)A發(fā)送的標(biāo)識(shí)為11的數(shù)據(jù)分片后,如果用戶節(jié)點(diǎn)C中 與鄰居節(jié)點(diǎn)A有關(guān)的推送記錄表中輸入行代表子數(shù)據(jù)流1的標(biāo)志位為"0",則丟棄該數(shù)據(jù)分 片,并發(fā)送拒絕消息給鄰居節(jié)點(diǎn)A(步驟304);鄰居節(jié)點(diǎn)A在收到拒絕消息后將本地與C有 關(guān)的推送記錄表中輸出行的子數(shù)據(jù)流1列的標(biāo)志位置"O"(步驟305)。相反,如果前述標(biāo) 志位為"1",則用戶節(jié)點(diǎn)C緩存標(biāo)識(shí)為11的數(shù)據(jù)分片,發(fā)送接收消息給鄰居節(jié)點(diǎn)A,并將本 地與其它鄰居節(jié)點(diǎn)有關(guān)的推送記錄表中輸入行子數(shù)據(jù)流1列的標(biāo)志位置"O"(步驟306); 鄰居節(jié)點(diǎn)A在收到接收消息后,將本地與A有關(guān)的推送記錄表中輸出行的子數(shù)據(jù)流1列的 標(biāo)志位置"l"(步驟307)。雖然在上面的說(shuō)明中,以鄰居節(jié)點(diǎn)A為例,但對(duì)于其它鄰居節(jié)點(diǎn) 的操作也同樣如此。 以上是對(duì)鄰居節(jié)點(diǎn)確定自己所負(fù)責(zé)的子數(shù)據(jù)流的過(guò)程的說(shuō)明。用戶節(jié)點(diǎn)的各個(gè)鄰
居節(jié)點(diǎn)都要做上述的操作,直到完成對(duì)所有子數(shù)據(jù)流的分配(步驟308)。 各個(gè)鄰居節(jié)點(diǎn)在確定自己所負(fù)責(zé)的子數(shù)據(jù)流后,會(huì)不斷地將所負(fù)責(zé)子數(shù)據(jù)流中的
各個(gè)數(shù)據(jù)分片發(fā)送給用戶節(jié)點(diǎn),當(dāng)用戶節(jié)點(diǎn)的緩沖區(qū)中所緩存的數(shù)據(jù)滿足直播條件后,該
用戶節(jié)點(diǎn)開始在媒體播放器上回放直播節(jié)目(步驟205)。用戶節(jié)點(diǎn)在緩存數(shù)據(jù)并開始播放
后,還需要向Tracker服務(wù)器注冊(cè)為數(shù)據(jù)提供節(jié)點(diǎn)(步驟206)。 在上述實(shí)施例中,通過(guò)競(jìng)爭(zhēng)機(jī)制實(shí)現(xiàn)子數(shù)據(jù)流的分配,所有的子數(shù)據(jù)流都被指派 給了一個(gè),且僅一個(gè)鄰居節(jié)點(diǎn),并且與該用戶節(jié)點(diǎn)通信能力較好的鄰居節(jié)點(diǎn)會(huì)以較大概率 承擔(dān)較多的子數(shù)據(jù)流傳輸任務(wù),這會(huì)提高P2P直播系統(tǒng)的整體性能。雖然在數(shù)據(jù)請(qǐng)求的初
期會(huì)有較大量的冗余數(shù)據(jù)出現(xiàn),但根據(jù)在CoolFisl^平臺(tái)上的實(shí)踐證明,所述競(jìng)爭(zhēng)解決機(jī)
制能夠迅速減少冗余數(shù)據(jù)包的傳輸,并且會(huì)較快速地開始視頻數(shù)據(jù)回放。 以上是對(duì)P2P直播系統(tǒng)實(shí)現(xiàn)數(shù)據(jù)傳輸?shù)囊粋€(gè)實(shí)施例的說(shuō)明。在另一個(gè)實(shí)施例中,在前述實(shí)施例的基礎(chǔ)上還包括用戶節(jié)點(diǎn)對(duì)數(shù)據(jù)分片主動(dòng)請(qǐng)求的過(guò)程。眾所周知,P2P環(huán)境
在將數(shù)據(jù)分發(fā)操作單純由服務(wù)器完成改變?yōu)橛杀姸嗫蛻舳斯?jié)點(diǎn)協(xié)同完成以加快分發(fā)速度
的同時(shí),也會(huì)遇到因?yàn)榭蛻舳斯?jié)點(diǎn)隨時(shí)關(guān)機(jī)或故障所造成的分發(fā)操作不穩(wěn)定的問(wèn)題。具體
到前述的P2P直播系統(tǒng),在數(shù)據(jù)流分發(fā)過(guò)程中,某一鄰居節(jié)點(diǎn)可能會(huì)因?yàn)榉N種原因使得其
所負(fù)責(zé)子數(shù)據(jù)流的數(shù)據(jù)分片推送過(guò)程終止,這將會(huì)影響與該鄰居節(jié)點(diǎn)相關(guān)的用戶節(jié)點(diǎn)所接
收數(shù)據(jù)的完整性。因此需要用戶節(jié)點(diǎn)主動(dòng)請(qǐng)求相應(yīng)的數(shù)據(jù)分片(步驟207)。 參考圖4和圖7,用戶節(jié)點(diǎn)主動(dòng)請(qǐng)求數(shù)據(jù)分片的實(shí)現(xiàn)過(guò)程包括如圖7(a)所示,為
一數(shù)據(jù)分片設(shè)定一個(gè)未到達(dá)預(yù)警時(shí)刻,將該預(yù)警時(shí)刻記為twaming(步驟401),顯然,未到達(dá)
預(yù)警時(shí)刻應(yīng)當(dāng)在播放該數(shù)據(jù)分片的時(shí)刻之前,未到達(dá)預(yù)警時(shí)刻的設(shè)定可根據(jù)經(jīng)驗(yàn)實(shí)現(xiàn)。在
當(dāng)前時(shí)刻t。umnt到達(dá)該預(yù)警時(shí)刻時(shí),檢查該數(shù)據(jù)分片是否已經(jīng)到達(dá)了用戶節(jié)點(diǎn),如果仍然
沒(méi)有到達(dá),則用戶節(jié)點(diǎn)隨機(jī)選取負(fù)責(zé)該分片相應(yīng)子數(shù)據(jù)流的鄰居節(jié)點(diǎn)外的其它鄰居節(jié)點(diǎn)中
的一個(gè)、多個(gè)或全部節(jié)點(diǎn)發(fā)送該數(shù)據(jù)分片的數(shù)據(jù)請(qǐng)求消息(步驟402)。 當(dāng)鄰居節(jié)點(diǎn)收到前述的數(shù)據(jù)請(qǐng)求消息后,檢查其緩存中是否存在所述數(shù)據(jù)分片,
如果存在則立即發(fā)送該數(shù)據(jù)分片給請(qǐng)求該數(shù)據(jù)分片的用戶節(jié)點(diǎn),否則直接忽視所述數(shù)據(jù)請(qǐng)
求消息(步驟403)。 當(dāng)請(qǐng)求數(shù)據(jù)分片的用戶節(jié)點(diǎn)收到所述數(shù)據(jù)分片時(shí),如圖7(b)所示,如果當(dāng)前時(shí)刻 指針t。umnt小于最晚到達(dá)時(shí)刻指針td一^,則緩存所述數(shù)據(jù)分片到所述緩存區(qū)域的相應(yīng)位 置,否則表明該數(shù)據(jù)分片的接收時(shí)間已經(jīng)晚于該數(shù)據(jù)分片的播放時(shí)間,因此直接將所述數(shù) 據(jù)分片丟棄(步驟404)。對(duì)于用戶節(jié)點(diǎn)而言,如果當(dāng)前時(shí)刻指針t^,t大于最晚到達(dá)時(shí)刻 指針td一^,此時(shí)雖然數(shù)據(jù)并不完整,但為了實(shí)現(xiàn)直播節(jié)目的同步播放,只能以節(jié)目質(zhì)量的 損失為代價(jià),將缺少所述分片的數(shù)據(jù)模塊交由播放器播放(步驟405)。當(dāng)然在本實(shí)施例中, 由于P2P直播對(duì)時(shí)間的要求較高,所以在某些數(shù)據(jù)分片無(wú)法及時(shí)到達(dá)的情況下,可以丟棄 這些數(shù)據(jù)分片。但如果在對(duì)時(shí)間要求不太高的其它P2P應(yīng)用中,如P2P下載,則可以在接收 到所有數(shù)據(jù)分片后才停止相關(guān)操作。 本實(shí)施例中,在數(shù)據(jù)分片無(wú)法及時(shí)到達(dá)的情況下,由用戶節(jié)點(diǎn)主動(dòng)請(qǐng)求相應(yīng)的數(shù) 據(jù)分片,實(shí)現(xiàn)了鄰居節(jié)點(diǎn)推數(shù)據(jù)分片與用戶節(jié)點(diǎn)拉數(shù)據(jù)分片的結(jié)合,與前一實(shí)施例單純由 鄰居節(jié)點(diǎn)推數(shù)據(jù)分片相比,在數(shù)據(jù)傳輸質(zhì)量上有很大的提高。 最后所應(yīng)說(shuō)明的是,以上實(shí)施例僅用以說(shuō)明本發(fā)明的技術(shù)方案而非限制。盡管參 照實(shí)施例對(duì)本發(fā)明進(jìn)行了詳細(xì)說(shuō)明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解,對(duì)本發(fā)明的技術(shù)方 案進(jìn)行修改或者等同替換,都不脫離本發(fā)明技術(shù)方案的精神和范圍,其均應(yīng)涵蓋在本發(fā)明 的權(quán)利要求范圍當(dāng)中。
權(quán)利要求
一種P2P環(huán)境下的數(shù)據(jù)傳輸方法,包括步驟1)、對(duì)所要傳輸數(shù)據(jù)做分割后得到多組子數(shù)據(jù)流;步驟2)、在用戶所登錄的用戶節(jié)點(diǎn)以及該用戶節(jié)點(diǎn)的鄰居節(jié)點(diǎn)上維護(hù)推送記錄表,所述推送記錄表用于記錄所在節(jié)點(diǎn)所要推送以及所要接收的子數(shù)據(jù)流的信息;步驟3)、所述鄰居節(jié)點(diǎn)按照隨機(jī)的順序?qū)⒉煌M的子數(shù)據(jù)流推送給所述用戶節(jié)點(diǎn),所述用戶節(jié)點(diǎn)接收子數(shù)據(jù)流后結(jié)合所述推送記錄表中的信息為所述鄰居節(jié)點(diǎn)分配該鄰居節(jié)點(diǎn)負(fù)責(zé)推送的子數(shù)據(jù)流;步驟4)、所述用戶節(jié)點(diǎn)接收并保存所述鄰居節(jié)點(diǎn)所推送的數(shù)據(jù)。
2. 根據(jù)權(quán)利要求1所述的P2P環(huán)境下的數(shù)據(jù)傳輸方法,其特征在于,還包括步驟5)、所述用戶節(jié)點(diǎn)在某些數(shù)據(jù)無(wú)法及時(shí)到達(dá)時(shí),向除了負(fù)責(zé)該數(shù)據(jù)推送的鄰居節(jié) 點(diǎn)外的其它鄰居節(jié)點(diǎn)請(qǐng)求該數(shù)據(jù)。
3. 根據(jù)權(quán)利要求1或2所述的P2P環(huán)境下的數(shù)據(jù)傳輸方法,其特征在于,在所述的步驟 1)中,對(duì)所要傳輸數(shù)據(jù)做分割包括分片、分組;其中,所述分片包括將數(shù)據(jù)按照規(guī)定的格式大小分割,得到數(shù)據(jù)分片;所述分組包括將所述 數(shù)據(jù)分片按照所述數(shù)據(jù)分配的標(biāo)識(shí)進(jìn)行分配,同一組的數(shù)據(jù)分片形成子數(shù)據(jù)流。
4. 根據(jù)權(quán)利要求3所述的P2P環(huán)境下的數(shù)據(jù)傳輸方法,其特征在于,在對(duì)數(shù)據(jù)分片進(jìn)行 分組時(shí),對(duì)所述數(shù)據(jù)分片的標(biāo)識(shí)做取模操作,將標(biāo)識(shí)取模后所得到的余數(shù)相同的數(shù)據(jù)分片 分在同一組中。
5. 根據(jù)權(quán)利要求1或2所述的P2P環(huán)境下的數(shù)據(jù)傳輸方法,其特征在于,所述步驟3) 包括步驟3-1)、各個(gè)鄰居節(jié)點(diǎn)對(duì)所述子數(shù)據(jù)流的序號(hào)做隨機(jī)排列;步驟3-2)、所述鄰居節(jié)點(diǎn)根據(jù)隨機(jī)排列結(jié)果將相應(yīng)序號(hào)的子數(shù)據(jù)流按序推送給用戶節(jié)點(diǎn);步驟3-3)、所述用戶節(jié)點(diǎn)接收到某一鄰居節(jié)點(diǎn)所推送的某一組子數(shù)據(jù)流后,根據(jù)自身 的推送記錄表的信息,決定是否將該子數(shù)據(jù)流分配給該鄰居節(jié)點(diǎn),并將決定后的結(jié)果通知 該鄰居節(jié)點(diǎn)。
6. 根據(jù)權(quán)利要求5所述的P2P環(huán)境下的數(shù)據(jù)傳輸方法,其特征在于,所述步驟3-3)包括步驟3-3-1)、所述用戶節(jié)點(diǎn)接收到某一鄰居節(jié)點(diǎn)所推送的某一組子數(shù)據(jù)流后,若自身 的推送記錄表中記錄拒絕接收該鄰居節(jié)點(diǎn)所推送的該組子數(shù)據(jù)流,則向該鄰居節(jié)點(diǎn)發(fā)送拒絕消息,該鄰居節(jié)點(diǎn)接收到拒絕消息后,在其自身的推送記錄表中記錄,否則,執(zhí)行下一止 少;步驟3-3-2)、若用戶節(jié)點(diǎn)自身的推送記錄表中記錄接收該鄰居節(jié)點(diǎn)所推送的該組子數(shù) 據(jù)流,則在該推送記錄表中記錄不接收其它鄰居節(jié)點(diǎn)所推送的該組子數(shù)據(jù)流,并向該鄰居 節(jié)點(diǎn)發(fā)送接收消息,該鄰居節(jié)點(diǎn)接收到接收消息后,在其自身的推送記錄表中記錄。
7. 權(quán)利要求2所述的P2P環(huán)境下的數(shù)據(jù)傳輸方法,其特征在于,所述的步驟5)包括 步驟5-1)、為數(shù)據(jù)設(shè)立未到達(dá)預(yù)警時(shí)刻;步驟5-2)、在當(dāng)前時(shí)刻到達(dá)該未到達(dá)預(yù)警時(shí)刻時(shí),檢查對(duì)應(yīng)的數(shù)據(jù)是否已經(jīng)到達(dá)了所 述用戶節(jié)點(diǎn),若沒(méi)有到達(dá),則向除了負(fù)責(zé)該數(shù)據(jù)推送的鄰居節(jié)點(diǎn)外的其它鄰居節(jié)點(diǎn)請(qǐng)求該數(shù)據(jù),否則不做操作;步驟5-3)、所述鄰居節(jié)點(diǎn)收到請(qǐng)求后,檢查自身是否保存有相應(yīng)的數(shù)據(jù),若有,將該數(shù)據(jù)發(fā)送給所述用戶節(jié)點(diǎn),否則忽略該請(qǐng)求。
8.權(quán)利要求7所述的P2P環(huán)境下的數(shù)據(jù)傳輸方法,其特征在于,所述的步驟5)還包括 步驟5-4)、若當(dāng)前時(shí)刻大于最晚到達(dá)時(shí)刻時(shí),所請(qǐng)求的數(shù)據(jù)還未到達(dá)所述用戶節(jié)點(diǎn),則拋棄該數(shù)據(jù)。
全文摘要
本發(fā)明提供一種P2P環(huán)境下的數(shù)據(jù)傳輸方法,包括對(duì)所要傳輸數(shù)據(jù)做分割后得到多組子數(shù)據(jù)流;在用戶所登錄的用戶節(jié)點(diǎn)以及該用戶節(jié)點(diǎn)的鄰居節(jié)點(diǎn)上維護(hù)推送記錄表,所述推送記錄表用于記錄所在節(jié)點(diǎn)所要推送以及所要接收的子數(shù)據(jù)流的信息;所述鄰居節(jié)點(diǎn)按照隨機(jī)的順序?qū)⒉煌M的子數(shù)據(jù)流推送給所述用戶節(jié)點(diǎn),所述用戶節(jié)點(diǎn)接收子數(shù)據(jù)流后結(jié)合所述推送記錄表中的信息為所述鄰居節(jié)點(diǎn)分配該鄰居節(jié)點(diǎn)負(fù)責(zé)推送的子數(shù)據(jù)流;所述用戶節(jié)點(diǎn)接收并保存所述鄰居節(jié)點(diǎn)所推送的數(shù)據(jù)。本發(fā)明將推策略與拉策略相結(jié)合,能夠盡可能地減少數(shù)據(jù)分片丟失情況的出現(xiàn)。本發(fā)明通過(guò)競(jìng)爭(zhēng)機(jī)制實(shí)現(xiàn)子數(shù)據(jù)流的分配,能夠減少冗余數(shù)據(jù)包的傳輸,提高整個(gè)系統(tǒng)的性能。
文檔編號(hào)H04L29/08GK101697553SQ200910235678
公開日2010年4月21日 申請(qǐng)日期2009年10月12日 優(yōu)先權(quán)日2009年10月12日
發(fā)明者劉悅, 葉靖, 呂建明, 李靜遠(yuǎn), 林思明, 王雷, 程學(xué)旗 申請(qǐng)人:中國(guó)科學(xué)院計(jì)算技術(shù)研究所;