廣播與P2P通道(上) -- 問題與方案


我們設想一下網絡視頻會議的場景:在一個視頻會議虛擬房間中,每個人都需要將自己的視頻數據發送給房間中的其它人,從而實現在同一個地方進行實時會議的效果。為了簡單起見,我們假設,這個虛擬的視頻會議房間中只有三個人,其結構可以簡化描繪如下:

   

客戶端A需要將自己的視頻數據發送給B和C,客戶端B需要發給A和C,客戶端C需要發給A和B。有了這個場景基礎,接下來,我們將從數據傳送通道的角度來分析在這個模型中可以采用的通道方式,以及進行對比並找出最優的通道模型。所謂最優,就是服務器所占用的帶寬(包括上行和下行)最小,因為在現實的視頻會議案例中,帶寬是不可忽視的成本之一。為了下面能進行更具體的數據分析和比較,我們假設視頻的大小為320*240,幀頻為10fps,這樣,一路視頻流經過編碼后,所需的碼率大概為30KByte/s。

1.模型1:最簡單的通道模型

對於上述場景,我們第一反應能想到的解決方案的要點:

(1)所有的視頻數據都經過服務器中轉。

(2)以客戶端A為例,對於采集到的每一幀視頻,調用兩次發送方法,一次發送給B,一次發送給C,都經過服務器中轉。客戶端B和C也是同理。

(3)服務器僅僅轉發數據,不需加入任何其它的邏輯。

現在,我們計算一下服務器的帶寬占用。

上行:30*2*3 = 180KByte/s。(每個客戶端需要上傳兩份相同的視頻流,3個客戶端)

下行:30*2*3 = 180KByte/s。(每個客戶端需要下載另外兩個用戶的視頻流,3個客戶端)

在這種模型下,上下行是完全對稱的。這個模型有個很明顯的缺陷:每個客戶端采集的每一幀視頻都需要上傳兩次。修正這個缺陷也很容易,在服務端引入廣播功能。

2.模型2:在服務端進行廣播

在第一個模型的基礎上,我們在服務端增加廣播功能,將視頻幀的接收者的決定權由客戶端轉交給服務器:

(1)客戶端將采集的每一幀發送給服務器,服務器收到該幀后,根據當前會議的參與者,決定需要將視頻幀轉發給哪幾個客戶端。

(2)以客戶端A為例,對於采集到的每一幀視頻,只需調用一次發送給服務器的方法。

我們再來計算一下服務器的帶寬占用。

上行:30*3 = 90KByte/s。(每個客戶端上傳自己的視頻流,3個客戶端)

下行:30*2*3 = 180KByte/s。(每個客戶端需要下載另外兩個用戶的視頻流,3個客戶端)

在這種模型下,上下行不再對稱了,上行的流量減小了一半,效果還是很明顯的。

3.模型3:結合P2P通道

為了進一步減少服務器的帶寬占用,我們還有一個殺手鐧,那就是在模型2的基礎上使用P2P通道。理想的情況下,A和B以及C相互之間的P2P通道都可以創建成功,這樣,就沒有任何數據需要經過服務器中轉了,所以,服務器的上行和下行的帶寬占用都是0。但是,現實中常見的情況很復雜。比如,假設客戶端C的路由器的NAT是對稱型的,那么,C和A以及C和B之間的P2P通道無法創建成功,但A和B之間的P2P是成功的。基於此假設,我們希望,A和B之間的數據經過P2P通道直接傳送,A和C以及B和C之間的數據只有經過服務器轉發:

(1)A通過P2P通道將視頻幀發送給B,並通過服務器中轉給C。

(2)B通過P2P通道將視頻幀發送給A,並通過服務器中轉給C。

(3)C通過通過服務器將視頻幀中轉給A和B。 

我們再來計算一下服務器的帶寬占用。 

上行:30*3 = 90KByte/s。(每個客戶端都要上傳自己的視頻流,3個客戶端) 

下行:30 + 30 + 30*2 = 120KByte/s。(A需要下載C,B需要下載C,C需要下載A和B)

可見,由於P2P通道的存在,降低了下行帶寬的占用量。 

4.服務器廣播與P2P通道結合深入分析

現在,我們將參與視頻會議的人數擴展到N(N>=2),情況依然是復雜的,某些客戶端之間的P2P通道成功建立,而某些客戶端之間的P2P通道無法創建成功。在這種情況下,如何才能將服務器廣播模型與P2P結合起來了?需要做到以下幾點:

(1)每個客戶端需要記錄自己與哪些用戶創建了P2P通道。

(2)服務器也要知道每個客戶端的P2P通道的狀態。(客戶端的P2P通道狀態發生變化時,及時報告給服務器)

(3)當服務器收到一個視頻幀時,首先,查看當前參與會議的用戶,然后,根據視頻幀的發送者的P2P通道狀態,來綜合決定該視頻幀需要轉發給哪些客戶端。

        (比如本文的例子,服務器收到A的視頻幀,發現A和B之間的P2P是通的,所以,它就只將該幀轉發給C。)

(4)在客戶端發送視頻幀時,又可細分為三種情況:

  a.當某個客戶端發現自己和所有的與會者都建立了P2P通道時,那么,它就不用把視頻幀發送給服務器了。

  b.如果客戶端與所有與會者的P2P通道都沒有建立成功,那么,它只需要將視頻幀發送給服務器。

  c.如果客戶端與部分與會者建立了P2P通道,那么,它不僅需要將視頻幀發送給服務器,還需要將該幀經過每個P2P通道發送一次。

本篇我們提出了廣播消息與經服務器中轉、P2P通道傳送等方案結合時,可能發生的各種情況,以及在每種情況下服務器消耗的上行與下行的帶寬。綜合看來,模型3對服務器帶寬的占用是最少的,但是,其實現也是最復雜的。我們將在下篇詳細介紹基於ESFramework通信框架對上述模型3的完整實現,敬請期待。

 


免責聲明!

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



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