專利名稱:一種p2p流媒體數據請求方法
技術領域:
本發明涉及計算機網絡流媒體技術領域,更具體地,本發明涉及一 種P2P流媒體數據請求方法。
背景技術:
數據請求分配是目前P2P流媒體技術領域中的一個關鍵技術問題。 按照分配粒度,P2P流媒體系統中使用的數據請求分配方法主要分為兩 類,分別是基于數據層的粗粒度分配和基于數據包的細粒度分配。在基 于數據層的粗粒度分配方法中,主要是基于多重描述編碼(MDC)的數據 分配方法,所述方法對每條多重描述編碼子流采用獨立多播樹進行傳輸, 接收方根據自身帶寬情況選擇加入到多棵多播樹中,適應節點的異構性, 但是,多重描述編碼的效率比分層編碼的效率低,同時,多重描述編碼 的各個分層之間的解碼不存在依賴關系。基于數據包的細粒度分配方法 主要分為兩種, 一種是基于TCP友好(TCP-friendly)帶寬測試的數據 分配方法,在不知發送節點可用帶寬的條件下,確保每個數據包僅被一 個發送節點發送;另一種是基于前向糾錯編碼(FEC)的數據分配方法, 可以在突發丟包網絡環境中,減小數據包的丟失概率。
上述現有的數據請求分配方法,或者以整個數據段為單位向入節點(本地節點向某個或某幾個節點請求數據,這些,皮請求的節點稱為本地 節點的入節點)進行數據請求,或者以數據包為單位輪流向入節點進行 數據請求。對于前者,在剛開始播放的時候,如果數據段比較大,因為 入節點根據數據包的優先級進行響應,序號較小并具有較高優先級的數 據包往往集中在同一個數據段中,所述同一數據段發向一個入節點,而 一些優先級較低的數據包放在另 一個數據段中,發向另外一個入節點, 從而導致部分優先級高的數據包得不到及時的響應,而部分優先級較低 的數據包在另外一個入節點得到優先響應。對于后者,在數據請求到達 入節點中某個或某幾個節點的緩沖區末端時,即部分入節點可供請求的 最新數據數目已經不能達到正常播放碼率所要求的數據包的數目時,由 于該方法以數據包為單位輪流向入節點進行數據請求,將造成擁有稀有 數據包的入節點同時也承擔共有數據包的請求響應,從而導致擁有稀有 數據包的入節點負載過大,變成網絡中的瓶頸節點。
發明內容
為克服現有技術中的數據資源不能有效利用、帶寬不能合理分配的
缺陷,本發明提出一種P2P流媒體數據請求方法。 一種P2P流媒體數據請求方法,包括
步驟IO)、用戶節點加入P2P網絡,獲得入節點列表,向所述列表中 的入節點發送請求,檢測丟包情況,獲得各入節點的上行帶寬;
步驟20)、根據所述各個入節點的上行帶寬,向所述各個入節點分配 數據請求步驟210)、當本地緩沖區的大小小于預設值時,將要請求的數據包 按照優先級從大到小進行排序,按照排序結果依次將所述各個數據包按 照一定的塊大小進行分塊,并分配給各個入節點,直至已分配的數量達 到所述入節點的請求量;
步驟220 )、當本地緩沖區的大小大于預設值時,依次檢測從各入節 點能獲得的數據包的個數,根據所述數據包個數的比例,確定所述各入 節點分配的請求量。
其中,數據包請求過程中,記錄所述用戶節點的唯一標識號,如果 發往某個入節點的數據包丟失,則下次優先選擇其他用戶節點發送所述 丟失數據包的請求。
在步驟IO)中,在所述請求發送之前,檢測上上次發送隊列的全部 和上次發送隊列的前半部分的數據包是否存在丟包,或者檢測上上次發 送隊列的數據包是否存在丟包。
其中,當還未開始播放時,在每次請求數據前,檢測上上次發送隊 列的全部和上次發送隊列的前半部分是否有數據包未收到,如果有數據 包未收到,將所述數據包的播放位置值和對應的唯一標識號加入緊急隊 列,同時統計所述唯一標識號相應的入節點的丟包數。
其中,當已經開始播放時,在每次請求數據前,只檢測上上次發送 隊列是否有數據包未收到,如果有數據包未收到,將所述數據包的播放 位置值和對應的唯一標識號加入緊急隊列,同時統計所述唯一標識號相 應的入節點的丟包數。
其中,所述方法進一步包括步驟110)、將所述緊急隊列中的序列號按照優先級的大小排序; 步驟120)、在數據請求前,優先處理所述緊急隊列的數據請求,檢
測要請求的數據包的序列號是否過期,如果過期則放棄請求,如果沒有
過期,則請求所述數據包;
步驟130)、檢查所述緊急隊列中要請求的數據包對應節點的唯一標
識號是否為空,如果不為空,在請求數據時,優先將所述數據包的請求 向節點唯一標識號不同于所述緊急隊列所記錄的唯一標識號的節點發送。
其中,步驟210)中,根據所述入節點一次能夠同時發送的數據包的 大小,確定所述塊的大小;為保證數據勻速發送,所述入節點將整個數 據請求分作許多個時隙來發送;所述一次能夠同時發送的數據包的大小 是指一個時隙所i^節點發送的數據包的數目。
其中,步驟220 )進一步包括將相鄰序號的所述各數據包請求分配 給同一個入節點,直至分配數量達到所述入節點的請求量,然后將鄰接 的下一個數據包請求發送給下一個入節點,循環進行,直至本次數據包 請求分配結束。
通過應用本發明,使得用戶節點根據初始時對各入節點帶寬的探測 情況和所要請求數據包的優先級大小,對各個入節點進行數據請求,加 快數據到達速度,減少單點故障帶來的影響,在數據請求末端靈活調整 連續請求數據塊的大小,從而能更快請求到最新的數據包,達到流暢播 放的目的。
圖1為P2P流媒體網絡結構圖; 圖2為用戶節點加入P2P網絡流程圖; 圖3為數據請求流程圖; 圖4為丟包檢測處理流程具體實施例方式
下面結合附圖和具體實施例,對本發明提供的一種P2P流媒體數據 請求方法作進一步說明。
圖1示出P2P流媒體網絡結構,數據源服務器為流媒體直播提供數 據源,數據中轉服務器負責在各流媒體直播區域中轉數據源的數據,相 當于各個直播區域的數據源服務器,各直播區域中的先加入的節點直接 和數據中轉服務器連接,獲取流媒體數據,并為后加入的節點提供數據 信息。
圖2示出節點加入P2P網絡的流程,用戶節點A (下面稱節點A)加 入圖1所示的P2P直播網絡,節點A首先連接本區域的索引服務器,即 圖中所示的索引服務器l,索引服務器l根據節點A的IP地址在已有的 網絡節點中選擇與其網絡距離最近并且播放位置相近的節點列表返回給 節點A。
節點A向所獲得的節點列表中的所有節點發送連接請求,設圖1中 用戶節點B (簡稱節點B)和用戶節點C (簡稱節點C)在節點列表中, 例如節點A向節點B發送連接請求,如果連接成功,則節點A將節點B設置為其入節點,節點B將節點A設置為其出節點,并定期向節點A發 送自己的緩沖區映像,告知節點A目前節點B緩沖區所有的數據包的情 況。
節點A根據節點列表中所有入節點所返回的緩沖區映像中播放位置 (index)值確定節點A自身的起始播放點(Playinglndex )。
圖3示出用戶節點發送數據請求的流程,節點A根據自己的緩沖區 情況,向入節點發送數據請求。
節點A根據向各個入節點的上上次的請求量(Last2ReqNum)確定 本次向該入節點的請求量;
如果是第一次請求,由于各個入節點的異構性,無法預知各個入節 點的上行帶寬,在第一次數據請求時,根據播放碼率的M倍,向各個入 節點均分請求量,M為自定義量,優選地,M取1.2-1.4。本次請求的目 的是探測各個入節點的上行帶寬,在第一次檢測丟包情況的時候,可以 根據各個入節點的丟包情況獲得各個入節點的上行帶寬的估計值,如果 某些節點不存在丟包情況,說明這些節點具有足夠的上行帶寬,如果需 要,可以增加對這些節點的數據請求量。
如果是第二次請求,節點A根據入節點中向各個節點的上次的請求 量(LastReqN咖)確定本次向該節點的請求量,如果某些節點存在丟包 情況,則把上次對該節點的請求量(LastReqNum)減去丟包數進行請求, 如果某些節點不存在丟包現象,此時默認請求速度處在快增長狀態,則 繼續向該節點增加請求量N, N取較大值,可以快速逼近入節點上行帶寬, 并且,向各個入節點的請求總量控制在碼率的M倍,M為自定義量,優選地,M取1.2-1. 4。
第三次請求及以后的每次請求,節點A根據入節點中向各個節點的 上上次的請求量(Last2ReqNum)確定本次向該節點的請求量,如果某些 節點存在丟包情況,則把上次對該節點的請求量(LastReqNum)減去丟 包數進行請求,如果某些節點不存在丟包現象,此時默認請求速度處在 快增長狀態,則繼續向該節點增加請求量N, N取較大值,可以快速逼近 入節點上行帶寬,并且,向各個入節點的請求總量控制在碼率的M倍,M 為自定義量,優選地,M取1.2-1. 4。
如圖4所示,當本地緩沖區(Buffer)的百分比未達到開始播放百 分比(START-PERCENT ),此時還未開始播放,丟包檢測采用立即檢測機 制,即本次發送數據之前檢測上上次發送隊列(Last-SentQue)和上次 發送隊列(This-SentQue)的前半部分數據是否到達。當本地緩沖區的 百分比達到START-PERCENT后,此時已經開始播放,丟包檢測釆用隔輪 檢測機制,即在本次發送數據之前檢測上上次發送隊列(Last-SentQue) 的數據包是否有丟包(具體檢測方法見后面敘述的丟包檢測方法)。
如果不存在丟包,根據目前請求速度所處的狀態,進行請求增加, 即如果處于初始快增長狀態,則請求量增加N, N取值越大,可以越快逼 i^節點上行帶寬,如果請求速度狀態處于慢速狀態,增加一個小量n, n<N;如果發現存在丟包,將丟失的數據加入緊急隊列中,如果丟包數小 于預先設定的值一最大延遲數(MAX-DELAY-NUM ),則本次請求量設置為 上上次的請求量(Last2ReqNum)減去丟包數,當采用立即檢測機制時, 本次請求量設置為上次的請求量(LastReqNum)減去丟包數;如果丟包數大于一個預先設定的值一最大延遲數(MAX-DELAY-NUM),則將請求量 設置為(Last2ReqNum-MAX-DEUY-NUM),當采用立即檢測機制時,請求 量設置為(LastReqNum-MAX-DELAY-NUM)。
根據請求過程中測量的各個入節點的上行帶寬,向各個入節點分配 本次請求的請求量。
當本地緩沖區(Buffer)的大小小于預設值(SWITCH-PERCENT)時, 根據實時性(或者優先級大小)的要求將要請求的數據包從高到低進行 排序,按照排序結果依次將各個數據包按照一定的塊大小(假設為K)進 行分塊分配給各個入節點,直至已分配數量達到該入節點的請求量,此 時的塊大小取決于目標節點一次能夠同時發送的數據包的大小,由于節 點的異構性,每個節點一次能夠同時發送的數據包大小會有所不同。發 送端為保證數據勻速發送會將整個數據請求分作許多個時隙來發送,這 里所指的一次能夠同時發送的數據包的大小表示的是一個時隙發送端所 發送的數據包的數目。
當本地緩沖區(Buffer)的大小大于預設值(SWITCH-PERCENT)時, 依次檢測從各入節點能獲得的數據包的個數(Retr ivNum)并根據各個入 節點的RetrivNum比例確定各入節點本次分配的請求量,將相鄰序號的 各數據包請求分配給同一個節點,直至分配的數量達到該入節點的請求 量,然后將鄰接的下一個數據包請求發送給下一個入節點,如此循環, 直至本次分配完畢。
數據包請求過程中,記錄請求發送目的節點的唯一標識號(ID),如 果遇到發往某個節點的數據包丟失,則下次發送是優先選擇其他節點發送該數據包的請求。 丟包檢測方法
采用雙發送隊列機制,即使用兩個發送隊列, 一個發送隊列
This一SentQue存儲本次發送請求的數據包的序列號值(index)和發送目 的節點的唯一標識號(ID),另一個發送隊列Last-SentQue存儲上次發 送請求的數據包的序列號值(index)和發送目的節點的唯一標識號(ID);
請求時,在This-SentQue當中記錄請求數據包的序列號值(index ) 和請求發送的目的節點的唯一標識號(ID);
當本地緩沖區大小小于START-PERCENT時(此時還未開始播放),在 每次請求數據前,檢測Last-SentQue隊列和This—SentQue的前半部分 中是否還有數據包未收到,如果有數據包未收到,則將數據包的序列號 值(index)和對應的唯一標識號(ID)加入緊急隊列(Urgent Que ),使 用下述的緊急隊列處理方法進行處理,同時才艮據唯一標識號(ID),統計 相應的入節點的丟包數;
當本地緩沖區大小大于START—PERCENT時(此時已經開始播放),在 每次請求數據前,只檢測Last-SentQue隊列是否有數據包未收到,如果 有數據包未收到,則將數據包的序列號值(index)和對應的唯一標識號 (ID)加入緊急隊列(UrgentQue ),使用下述的緊急隊列處理方法進行 處理,同時根據唯一標識號(ID ),統計相應的入節點的丟包數。
緊急隊列(UrgentQue)處理方法
將緊急隊列中的序列號值(index)按照優先級的大小排序; 每次數據請求前優先處理緊急隊列的數據請求,當處理緊急隊列數據請求時,首先檢測要請求的數據包的序列號值(index)是否過期,如 果過期則放棄請求,如果沒有過期,則請求該數據包;
檢查緊急隊列中要請求的數據包對應節點的唯一標識號(ID)是否 為空,如果不為空,在請求數據時,優先將該數據包的請求向節點唯一 標識號(ID)不同于緊急隊列所記錄的唯一標識號(ID)的節點發送。
總的來說,在本實施例中,首先根據初始時對各入節點帶寬的探測 情況和所要請求的數據包的優先級大小,對各個入節點所進行的數據請 求輪塊分配,在播放的初始階段,以單個數據包為單位,按照優先級的 大小將優先級較大的數據包分別先向不同的入節點發送請求,其次再發 送優先級較低的數據包請求,使優先級較高的數據包請求能夠得到快速 的響應,從而加快數據響應速度;同時在數據請求末端靈活調整連續請 求數據塊的大小,采用一定大小的數據塊為單位,向各個入節點發送數 據請求,將公共擁有的數據請求發往擁有公共數據比重較大的入節點, 而把稀有數據請求發往擁有稀有數據比重較大的入節點,以平衡各個入 節點的帶寬負載,從而減少單點故障帶來的影響,并且結合丟包重傳機 制,最終達到流暢播放的目的。
最后應說明的是,以上所述實施例僅用以說明本發明的技術方案而 非對其限制,并且在應用上可以延伸到其他的^"改、變化、應用和實施 例,同時認為所有這樣的修改、變化、應用、實施例都在本發明的精神 和范圍內。
權利要求
1、一種P2P流媒體數據請求方法,包括步驟10)、用戶節點加入P2P網絡,獲得入節點列表,向所述列表中的入節點發送請求,檢測丟包情況,獲得各入節點的上行帶寬;步驟20)、根據所述各個入節點的上行帶寬,向所述各個入節點分配數據請求步驟210)、當本地緩沖區的大小小于預設值時,將要請求的數據包按照優先級從大到小進行排序,按照排序結果依次將所述各個數據包按照一定的塊大小進行分塊,并分配給各個入節點,直至已分配的數量達到所述入節點的請求量;步驟220)、當本地緩沖區的大小大于預設值時,依次檢測從各入節點能獲得的數據包的個數,根據所述數據包個數的比例,確定所述各入節點分配的請求量。
2、 權利要求l的方法,其中,數據包請求過程中,記錄所述用戶節點的唯一標識號,如果發往某個入節點的數據包丟失,則下次優先選擇其他用戶節點發送所述丟失數據包的請求。
3、 權利要求l的方法,在步驟IO)中,在所述請求發送之前,檢測上上次發送隊列的全部和上次發送隊列的前半部分的數據包是否存在丟包,或者檢測上上次發送隊列的數據包是否存在丟包。
4、 權利要求3的方法,其中,當還未開始播放時,在每次請求數據前,檢測上上次發送隊列的全部和上次發送隊列的前半部分是否有數據包未收到,如果有數據包未收到,將所述數據包的播放位置值和對應的唯一標識號加入緊急隊列,同時統計所述唯一標識號相應的入節點的丟包數。
5、 權利要求3的方法,其中,當已經開始播放時,在每次請求數據前,只檢測上上次發送隊列是否有數據包未收到,如果有數據包未收到,將所述數據包的播放位置值和對應的唯一標識號加入緊急隊列,同時統計所述唯一標識號相應的入節點的丟包數。
6、 權利要求4或者權利要求5的方法,進一步包括步驟110)、將所述緊急隊列中的序列號按照優先級的大小排序;步驟120)、在數據請求前,優先處理所述緊急隊列的數據請求,檢測要請求的數據包的序列號是否過期,如果過期則放棄請求,如果沒有過期,則請求所述數據包;步驟130)、檢查所述緊急隊列中要請求的數據包對應節點的唯一標識號是否為空,如果不為空,在請求數據時,優先將所述數據包的請求向節點唯一標識號不同于所述緊急隊列所記錄的唯一標識號的節點發送。
7、 權利要求l的方法,其中,步驟210)中,根據所述入節點一次能夠同時發送的數據包的大小,確定所述塊的大小;為保證數據勻速發送,所述入節點將整個數據請求分作許多個時隙來發送;所述一次能夠同時發送的數據包的大小是指一個時隙所述入節點發送的數據包的數目。
8、 權利要求l的方法,其中,步驟220 )進一步包括將相鄰序號的所述各數據包請求分配給同 一個入節點,直至分配數量達到所述入節點的請求量,然后將鄰接的下一個數據包請求發送給下一個入節點,循環進行,直至本次數據包請求分配結束。
全文摘要
本發明提供一種P2P流媒體數據請求方法,針對P2P網絡異構性,根據不同節點的帶寬,對不同節點進行相應的數據請求。用戶節點根據初始時對各入節點帶寬的探測情況和所要請求的數據包的優先級大小,對各個入節點進行數據請求和輪塊分配,加快數據到達速度,同時減少單點故障帶來的影響;在數據請求末端,靈活調整連續請求數據塊的大小,可以更快請求到最新的數據包,并且結合丟包檢測重傳機制,達到流暢播放的目的。
文檔編號H04L12/56GK101459585SQ20071017958
公開日2009年6月17日 申請日期2007年12月14日 優先權日2007年12月14日
發明者浩 任, 馮偵探, 王勁林, 杭 蘇, 蘇少煒, 魯逸峰 申請人:中國科學院聲學研究所