直播P2P技術1-技術入門


 

1. 直播協議

直播協議主要有RTMP,HLS,MPEG-DASH,RTSP,HTTP-FLV等。每種協議都各有長短,比如RTMP延遲低,但誕生於Adobe,依賴於Flash Player,在如今FLash Player面臨被淘汰的時代,RTMP前途未卜;HLS是蘋果基於HTTP開發並主導的流媒體協議,它充分利用了HTTP的通用性,並能根據帶寬自適應碼率,但單個TS文件duration過大(一般為10s),延遲較高;MPEG-DASH類似於HLS,也是基於HTTP的,不同點是DASH單個片段duration靈活可變(如小至3s),且是開發性的流媒體協議,使其得到很多廠商的大力支持。

2. P2P技術

P2P技術是分布式系統的應用之一,通常表現為客戶端之間直接進行數據交換共享。在P2P過程中,所有客戶端的活動形成了一張邏輯上的虛擬網絡,該網絡結構被稱為P2P模型的網絡拓撲。一般網絡拓撲結構有三種:完全網狀,樹狀,基於DHT的環狀,分別如下圖1,2,3所示: 

P2P技術可用於文件共享,流媒體,點對點通信等,如常見的迅雷,視頻網站的P2P插件。

3. 直播P2P技術

常見流媒體直播協議都屬於C/S型,即所有客戶端通過指定協議,從服務端獲取直播數據。當客戶端數量達到一定規模后,服務端將承受巨大的I/O和帶寬壓力。若服務器無法及時處理客戶請求,客戶端卡播率急劇上升,從而影響用戶觀看體驗。

直播P2P技術,簡單來說,就是客戶端之間使用一定協議,交換和共享直播數據,通過減少對服務器的數據請求,來降低服務端的I/O帶寬等方面壓力,從而削減服務器帶寬成本,降低客戶端卡播率。

鑒於通用性與效率,一般很少從底層開始設計一套全新的流媒體直播P2P協議。慣用做法是基於通用協議,實現客戶端的P2P網絡。對基於HTTP的流媒體協議,如HLS,MPEG-DASH等,重寫客戶端數據下載邏輯即可;對非HTTP的流媒體協議實現P2P,如RTMP,RTSP,需要一套切片服務器,切片服務器負責持續地將數據流切成一個個數據片段(類似HLS的TS文件),客戶端在P2P網絡基礎上進行數據片段的下載和交換共享。

設計直播P2P協議,通常關注兩個要素:客戶端延遲,P2P分享率。客戶端延遲是指客戶端播放到的最新數據時間戳與服務器最新產生的數據時間戳的差值,P2P分享率是指客戶端從P2P網絡獲取的數據量與客戶端完整觀看所需的數據量的比值。

為了方便下面討論的不同模型優缺點,作如下定義:

  • 跳數:一個數據塊傳輸過程中經過的節點數
  • 控制請求:所有非實際數據塊傳輸的請求
  • 數據請求:一次實際數據塊的傳輸請求
  • Tc:一次控制請求的傳輸時間
  • Td:一次數據請求的傳輸時間
  • T:一個數據塊從一個節點到另一個節點的總時間
  • Tn:一個數據塊經過n跳到達另一個節點的總時間
  • B:直播碼率
  • Bu:節點上行帶寬
  • Bd:節點下行帶寬
3.1 基於網狀拓撲的直播P2P

網狀拓撲模型,也稱PULL模型,結構如上圖1. 所示。此模型中網絡節點完全對等,數據流動完全隨機無序。節點對等,是指數據可以在節點之間雙向流動,隨機無序是指節點之間交換的所有數據的序列關系是隨機無序的。節點之間交換數據一般由3子過程組成(如下圖4.所示):向對方發送自己數據的bitmap,對比雙方bitmap來決定從對方請求哪些數據塊並發送請求,發送實際數據塊給對方。

注:bitmap是一個bit數組,每一個bit位唯一標識了一個數據塊的有無

PULL模型的優點是每個節點都參與數據的下載和上傳過程,最大利用了節點的資源和計算能力。假設每個節點隨機下載的數據量比例為R(R < 1),則理想情況下,單個節點Bu,Bd滿足Bd>=R*B/8; Bu>=(R/(1-R))*B/8

然而缺點也很明顯:延遲高。假設從發送bitmap到接收bitmap請求的時間為Tc,發送數據獲取請求到接受數據獲取請求的時間為Tc,完全發送一個數據塊到接受一個數據塊的時間為Td,那么一塊數據的單跳傳輸的時間T,必有T>2*Tc+Td。若一塊數據經過n個節點,到達另外一個節點,那么數據塊到達最后一個節點的時間Tn,必有Tn>nT=2n*Tc+n*Td

PULL模型的特點,使其適合應用在延遲較高的直播P2P網絡中,而不適合於延遲要求較低的場景。

3.2 基於樹狀拓撲的直播P2P

樹狀拓撲模型,也稱PUSH模型,結構如圖2. 所示。父節點相比子節點延遲低,下載速率塊,上行帶寬大。一旦兩個節點通過訂閱協議形成父子關系,父節點可以立即持續地向子節點推送數據。一個完整的過程如下圖5. 所示:

由於一次訂閱后,父節點可持續地立即地推送數據給子節點,整個過程快速高效。單跳數據的到達時間T,有T~=Td, n跳數據達到的整體時間Tn,Tn~=n*T

PUSH模型形成的網絡並不是一個對等的P2P網絡,數據流動只能從父節點到子節點。這樣關系直接導致頂層節點P2P上行負載大,非頂層節點未參與P2P下行過程,底層節點(葉子節點)既未參與P2P下行,也未參與P2P上行過程。實際生產環境中,用戶上行帶寬往往是受限制的,即使通過完美算法,使上、下行能力不同的節點,演化到樹中合適的一個位置,也無法彌補壓力集中在少部分非葉子節點上的天生弱點。假設直播的數據碼率為B,對於1-N樹狀模型(指一個父親點最多可以有N個子節點)而言,非葉子節點的上行帶寬Bu,必須滿足Bu>=N*B/8,下行帶寬Bd,必須滿足Bd>=B/8,若B成倍增長,對應的Bu,Bd也將成倍增長。當實際Bd,Bu無法滿足要求時,整棵樹將坍塌。

所以基於樹狀拓撲的模型是一個較理想的網絡拓撲模型,適合於低碼率的直播P2P網絡,而不適合碼率較高的直播場景。

3.3 基於一致哈希的環狀拓撲直播P2P


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM