專利名稱:一種基于應答驅動的p2p流媒體數據調度方法
技術領域:
本發明涉及網絡流媒體技術領域,特別是一種基于應答驅動的P2P流媒體數 據調度方法。
背景技術:
P2P (Peer-to-Peer,對等網絡)技術是一種基于物理網絡的應用層信息控制 技術,它是分布式計算的重要發展方向,是未來高速網絡中迅速而廣泛地分發各 種數據的基礎。流媒體是指采用流式傳輸的方式在因特網上傳播的媒體格式,如 音頻、視頻或多媒體文件;流媒體技術是未來網絡服務體系的重要組成部分,為 眾多網絡應用提供了必需的平臺。二者結合起來,構成了一種新興的網絡服務一 —P2P流媒體。
流媒體傳輸具有實時性、連續性、數據依賴性等特點。其中實時性要求網絡 中傳輸的各視頻幀數據必須在特定的播放時限之前到達接收方;連續性要求各視 頻幀數據必須按照一定的順序進行播放。壓縮的視頻數據具有兩種類型的數據依 賴性幀間依賴要求接收方在解碼一個優先級較低的視頻幀之前,必須已解碼它 所依賴的其它優先級較高的視頻幀;幀內要求接收方最好在全部接收到組成一幀 的所有數據包之后再進行解碼,否則會引起解碼錯誤從而導致顯示畫面圖像破碎 等現象,甚至引起解碼器程序崩潰而中止播放。
現有的P2P流媒體系統多數基于舊的文件傳輸的P2P設計思路,沒有針對流 媒體的特點進行優化,對于單個節點的播放質量并沒有從網絡結構和數據調度的 高度予以保證,在大范圍應用的情況下,不同節點之間、甚至單個節點在不同時 刻的用戶體驗相差很大。在P2P流媒體系統中,由于網絡的異構性(節點之間帶 寬的不對稱等)、網絡帶寬的抖動、網絡結構的動態性(節點頻繁的加入或退出) 等原因,對流媒體提供服務質量保證成為流媒體技術領域的一個關鍵問題。
近年來,基于流言(gossip)協議的P2P網絡拓撲構造方法得到了大量的應 用,這樣構造的網絡模型稱為網狀模型,較之以往的基于樹狀結構的模型有更強 的魯棒性。在網狀模型中,每個節點有若干直接相連的伙伴節點,它可以同時從 多個結點請求數據,所以這種模型也叫多源模型。根據數據獲取方式的不同,網 狀模型又可分為三種數據驅動的網狀模型、發送者驅動的網狀模型和接收者驅
動的網狀模型。其中數據驅動的網狀模型因其簡單、高效和網絡中傳輸的冗余數 據較少的特點而得到了廣泛的認同。在數據驅動的網狀模型中,媒體數據被分成 若干個大小相當的塊,節點之間以塊為單位來傳送數據。每個節點維護一個自己 的緩沖序列,記錄自己持有哪些數據塊,然后定時把自己緩沖序列的變化發送給 自己所有的伙伴節點,這樣每個節點都能及時地了解它的伙伴節點持有哪些數據 塊。所謂數據調度,就是每個節點定期地向他的伙伴節點請求自己沒有的數據, 由于在網狀模型中可能有多個節點同時持有某塊數據,這時候就要決定向哪個伙 伴節點請求數據,要求既能充分利用每個節點的空閑帶寬使數據盡可能快的收到, 同時又能維持整個網絡的負載均衡,所以這個過程就需要一個智能的調度算法。 理想的調度算法應該在滿足各種網絡條件的限制下,使播放啟動延時最小, 同時使播放過程盡可能流暢。現有技術采用的一些調度算法主要包括隨機調度、 循環調度和最少數據優先調度。其中隨機調度和循環調度對異構網絡的適應性不 好,尤其是網絡帶寬波動時效率很低;而最少數據優先調度不能保證將要播出的 數據及時到達,容易造成播放的不流暢,影響服務質量。
發明內容
針對上述問題,本發明的目的是提供一種能夠在各種網絡條件的限制下達到
近似最優的調度、提供盡可能好的服務質量的基于應答驅動的P2P流媒體數據調 度方法。
為實現上述目的,本發明采取以下技術方案 一種基于應答驅動的P2P流媒 體數據調度方法,其數據調度操作步驟如下(1)初始化操作,從本節點緩沖序 列buffmap的起始位置開始尋找第一個還不存在的數據塊,然后將該數據塊的序 列號賦值給當前數據塊nCurrBlock; (2)判斷nCurrBlock是否不大于本節點的 buffmap中最后一個數據塊的序列號,如果不大于則轉至步驟(3),否則轉至步驟 (9); (3)判斷本節點是否已經持有序列號為nCurrBlock的數據塊,如果已經存 在則轉至步驟(8),否則轉至步驟(4); (4)按照節點選擇方法從本節點的所有 伙伴節點集合partnerSet中選擇一個持有序列號為nCurrBlock的節點并將其賦 值給數據提供節點su卯lier,如果不存在這樣的節點,則將s叩plier置為空值;
(5) 判斷s卿lier是否為空值,如果不為空則轉至步驟(6),否則轉至步驟(8);
(6) 向supplier節點發送請求數據包,請求序列號為nCurrBlock的數據塊;(7) 將supplier節點對應的請求數目reqNum字段值加一,即reqNum[s叩plier]— reqNum[supplier]+l; (8)將nCurrBlock字段值加一,B口 nCurrBlock — nCurrBlock+l,然后轉至步驟(2); (9)本次調度過程結束,等待下一次的調度。 所述步驟(4)中節點選擇方法,其操作步驟如下 (a)初始化操作,定義一個臨時變量i,設i為最小的滿足條件"伙伴節點
partnerSet[i]持有序列號為nCurrBlock的數據塊"的值,如果存在這樣的i, 則將partnerSet[i]賦值給s叩plier,否則令supplier為空值;(b)令臨時變量 i的值加一,即i — i+l; (c)判斷i是否大于當前的伙伴節點數目partnerN咖, 如果不大于則轉至步驟(d),否則轉至步驟(f); (d)判斷下列三個條件是否同 時成立partnerSet[i]持有序列號為 nCurrBlock 的數據塊, reqN咖[ partnerSet [i]]< maxReq ,maxReq 為最大請求數 , reqNum[ partnerSet [i] ] < reqN咖[supplier],如果同時成立則轉至步驟(e), 否則轉至步驟(b); (e)將partnerSet[i]賦值給s叩plier,然后轉至步驟(b);
(f)supplier即為選定的伙伴節點,作為返回值返回給調度主程序,如果supplier 不為空,則本節點可以向它請求序列號為nCurrBlock的數據塊。 當所述節點接收到數據包時的操作步驟如下 (i)本節點從伙伴節點p處收到一個數據包;(ii)判斷該數據包是否是某
一個數據塊的最后一個包,如果是則轉到步驟(iii),否則轉至步驟(v); 將伙伴節點P對應的reqNum減一,即reqNum[p] — reqN咖[p]-l; (iv)更新本 節點的buffmap,同時向本節點的所有除p以外的其他伙伴節點發送buffmap變化 的情況;(v)正常返回。
本發明由于采取以上技術方案,其具有以下優點1、本發明由于使用了數據 調度方法,使得播放端即播放器的啟動延時非常短,同時播放過程能夠盡可能地 流暢,特別是在節點帶寬比節目本身碼率還要低的情況下,效果非常明顯。2、本 發明由于在調度時是根據每個節點實時傳輸數據的情況來決定下一步向哪個伙伴 節點請求數據,因此能夠盡可能地充分利用各個節點的空閑帶寬真正做到"能者 多勞",又最大限度地維護負載均衡,避免某些節點的負擔過重。3、本發明的操 作是完全分布式執行的,因此它不需要測量或估算某個節點的可用帶寬就能使數 據的流向最大可能地與實時帶寬相吻合,減少調度和數據傳輸的冗余性。4、本發 明因為采用以上方案,在保證服務質量的前提下,通過自動調節,可適應如網絡 異構性、帶寬波動、節點頻繁加入或退出等不同的網絡狀況。
圖1是本發明提供的基于應答驅動的P2P流媒體數據調度方法的流程圖 圖2是本發明提供的在請求數據前選擇合適節點的流程圖 圖3是本發明提供的收到數據包時處理的流程圖
具體實施例方式
下面結合附圖和實施例,對本發明進行詳細的描述。
圖1表示的是本發明所提出的基于應答驅動的P2P流媒體數據調度方法的主 流程圖,該調度方法被周期性地調用。在介紹具體的調度步驟之前先介紹其中用
到的幾個輸入參數
partnerSet (伙伴節點集合)這是一個集合,包含該節點所有的伙伴節點,
即直接相連并且有數據交互的節點;
partnerN咖(伙伴節點數目)表示該節點當前連接的伙伴節點數目; nCurrBlock (當前數據塊)當前要請求的數據塊的序列號; supplier (數據提供節點)表示可向該節點提供當前數據塊的伙伴節點; reqN咖[s](請求的數目)表示該節點已經向伙伴節點s請求過但還沒有收
到的數據塊的數目;
maxReq (最大請求數)表示該節點可以同時向一個伙伴節點請求的數據塊的 最大數目,也就是已經發出請求但還沒有收到的數據塊的最大數目;
該節點每連接一個新的伙伴節點p,就將相應的reqNum[p]設置為0。
maxReq是一個預先設定的值,它要根據數據塊的大小來進行設定。如果數據 塊偏大,則maxReq要設的小一些,以避免過多的數據重傳而浪費帶寬;如果數據 塊偏小,則maxReq要設的大一些,以充分利用各個節點的空閑帶寬。
調度方法主程序的操作步驟如下
(1) 初始化操作,從本節點緩沖序列buffmap的起始位置開始尋找第一個還 不存在的數據塊,然后將該數據塊的序列號賦值給當前數據塊nCurrBlock;
(2) 判斷nCurrBlock是否不大于本節點的緩沖圖中最后一個數據塊的序列 號,如果不大于則轉至步驟(3),否則轉至步驟(9)結束本程序;
(3) 判斷本節點是否已經持有序列號為nCurrBlock的數據塊,如果已經存 在則轉至步驟(8)將nCurrBlock字段值加一,否則轉至步驟(4);
(4) 按照一定的方法從本節點的所有伙伴節點列表partnerSet中選擇一個 持有序列號為nCurrBlock的節點并將其賦值給數據提供節點supplier,如果不存 在這樣的節點,則將supplier置為空值,具體的選擇節點的方法參見下面的選擇 合適節點的流程(如圖2所示);
(5) 判斷數據提供節點su卯lier是否為空值,如果不為空則轉至步驟(6), 否則轉至步驟(8)將nCurrBlock字段值加一;
(6) 向s叩plier節點發送請求數據包,請求序列號為nCurrBlock的數據塊;
(7) 將supplier節點對應的請求數目reqN咖字段值加一,艮P : reqNum[supplier] — reqNum[supplier]+l;
(8) 將nCurrBlock字段值加一,艮口 nCurrBlock — nCurrBlock+l,然后 轉至步驟(2);
(9) 本次調度過程結束,等待下一次的調度。
如圖2所示,是請求數據前選擇合適節點的流程圖,將要請求的數據塊的序 列號為nCurrBlock,選擇合適節點的具體操作步驟如下
(1) 初始化操作,定義一個臨時變量i,設i為最小的滿足條件"伙伴節點 partnerSet[i]持有序列號為nCurrBlock的數據塊"的值,如果存在這樣的i, 則將partnerSet [i]賦值給數據提供節點supplier,否則令supplier為空值;
(2) 令臨時變量i的值加一,即i — i+1;
(3) 判斷i是否大于當前的伙伴節點數目partnerNum,如果不大于則轉至步 驟(4),否則轉至步驟(6)令s叩plier即為選定的伙伴節點;
(4) 判斷下列三個條件是否同時成立 partnerSet [i]持有序列號為nCurrBlock的數據塊,
并且請求數目reqN咖[partnerSet [i] ] 〈 maxReq, raaxReq為最大請求數, 并且reqNum[ partnerSet[i] ] < reqNum[supplier],如果同曰寸成立貝U轉至 步驟(5),否則轉至步驟(2);
(5) 將partnerSet [i]賦值給supplier,然后轉至步驟(2);
(6) supplier即為選定的伙伴節點,作為返回值返回給調度主程序,如果 s叩plier不為空,則本節點可以向它請求序列號為nCurrBlock的數據塊。
如圖3所示,是本節點收到數據包時的處理流程,具體操作步驟如下
(1) 本節點從伙伴節點p處收到一個數據包;
(2) 判斷該數據包是否是某一個數據塊的最后一個包,如果是則轉到步驟 (3),否則轉至步驟(5)正常返回;
(3) 將伙伴節點p對應的reqNum減一,即reqN咖[p] — reqNura[p]-1;
(4) 更新自己的緩沖序列buffmap,同時向自己所有的除p以外的其他伙伴 節點發送buffmap變化的情況;
(5) 正常返回。
根據前面具體實施方式
的敘述,可以發現請求數據時,在多個可選的伙伴節 點間選擇合適的節點時的主要依據是各個節點對應的reqNum字段值。這個值在建 立伙伴關系時初始化為0,每次向一個節點請求一個數據塊,就將該節點的reqNum
字段值加一,每次從一個節點收到一個數據塊,就將該節點的reqNum字段值減一, 也就是說調度時是根據每個節點實時傳輸數據的情況來決定下一步向哪個節點請 求數據,真正做到了 "能者多勞",使數據調度與各個節點的可用帶寬相吻合,在 不需要全局信息的情況下達到了近似最優的調度。
權利要求
1、一種基于應答驅動的P2P流媒體數據調度方法,其數據調度操作步驟如下(1)初始化操作,從本節點緩沖序列buffmap的起始位置開始尋找第一個還不存在的數據塊,然后將該數據塊的序列號賦值給當前數據塊nCurrBlock;(2)判斷nCurrBlock是否不大于本節點的buffmap中最后一個數據塊的序列號,如果不大于則轉至步驟(3),否則轉至步驟(9);(3)判斷本節點是否已經持有序列號為nCurrBlock的數據塊,如果已經存在則轉至步驟(8),否則轉至步驟(4);(4)按照節點選擇方法從本節點的所有伙伴節點集合partnerSet中選擇一個持有序列號為nCurrBlock的節點并將其賦值給數據提供節點supplier,如果不存在這樣的節點,則將supplier置為空值;(5)判斷supplier是否為空值,如果不為空則轉至步驟(6),否則轉至步驟(8);(6)向supplier節點發送請求數據包,請求序列號為nCurrBlock的數據塊;(7)將supplier節點對應的請求數目reqNum字段值加一,即reqNum[supplier]←reqNum[supplier]+1;(8)將nCurrBlock字段值加一,即nCurrBlock←nCurrBlock+1,然后轉至步驟(2);(9)本次調度過程結束,等待下一次的調度。
2、 如權利要求1所述的一種基于應答驅動的P2P流媒體數據調度方法,其特征在于所述步驟(4)中節點選擇方法,其操作步驟如下(a) 初始化操作,定義一個臨時變量i,設i為最小的滿足條件"伙伴節點 partnerSet[i]持有序列號為nCurrBlock的數據塊"的值,如果存在這樣的i, 則將partnerSet[i]賦值給supplier,否則令supplier為空值;(b) 令臨時變量i的值加一,即:i — i+l;(c) 判斷i是否大于當前的伙伴節點數目partnerN咖,如果不大于則轉至步 驟(d),否則轉至步驟(f);(d) 判斷下列三個條件是否同時成立 partnerSet [i]持有序列號為nCurrBlock的數據塊, reqN咖[partnerSet [i] ] < maxReq, maxReq為最大請求數, reqNum[ partnerSet[i] ] < reqNum[supplier],如果同時成立則轉至步驟(e),否則轉至步驟(b);(e) 將partnerSet[i]賦值給su卯lier,然后轉至步驟(b);(f) supplier即為選定的伙伴節點,作為返回值返回給調度主程序,如果 supplier不為空,則本節點可以向它請求序列號為nCurrBlock的數據塊。
3、如權利要求1或2所述的一種基于應答驅動的P2P流媒體數據調度方法, 其特征在于當所述節點接收到數據包時的操作步驟如下(i) 本節點從伙伴節點p處收到一個數據包;(ii) 判斷該數據包是否是某一個數據塊的最后一個包,如果是則轉到步驟 (iii),否則轉至步驟(v);(iii) 將伙伴節點p對應的reqNum減一,艮卩reqN咖[p] — reqN咖[p]-1;(iv) 更新本節點的buffraap,同時向本節點的所有除p以外的其他伙伴節點 發送buffmap變化的情況;(v) 正常返回。
全文摘要
本發明涉及一種基于應答驅動的P2P流媒體數據調度方法,其數據調度程序操作步驟如下(1)從本節點緩沖序列的起始位置尋找第一個還不存在的數據塊,將其序列號賦給當前數據塊nCurrBlock;(2)判斷其是否不大于本節點緩沖序列最后一個數據塊的序列號,否則轉至(9);(3)判斷本節點是否已經持有序列號為nCurrBlock的數據塊,若已存在則轉至(8);(4)按照節點選擇方法從本節點所有伙伴節點集中選擇一個序列號為nCurrBlock的節點并將其賦值給數據提供節點,若不存在,則將數據提供節點置空;(5)判斷該節點是否為空,否則轉至(8);(6)向該數據提供節點發送請求數據包,請求序列號為nCurrBlock的數據塊;(7)將數據提供節點對應的請求數目字段值加一;(8)將nCurrBlock字段值加一,后轉至(2);(9)本次調度過程結束。
文檔編號H04L12/56GK101170506SQ200710178859
公開日2008年4月30日 申請日期2007年12月6日 優先權日2007年12月6日
發明者強 付, 瑞 郭, 陳雙甲, 霍龍社, 文 高 申請人:北京廣視通達網絡技術有限公司;北京大學