作者:??????來源:zz?????發表時間:2006-06-26?????瀏覽次數:?1348??????字號:大??中??小
原文地址:http://bbs.tvkoo.com/dispbbs.asp?boardID=3&ID=4017&page=1
最近對P2P直播技術進行了一些研究,談談個人對Tvkoo軟件的優缺點的看法,一方面希望Tvkoo能做的更好,另一方面也拋磚引玉一下:
P2P直播的技術難點有:
一、防火墻的穿透:超過90%的電腦都在防火墻后面,如果讓2臺在防火墻后面的電腦能夠實現P2P互聯,這是一個技術的難點。有2種方式:
1.?要求用戶配置TCP端口:BT和電驢采用的方式,配置需要網絡專業知識。一般做法是通過在防火墻上開啟TCP端口來實現,如果開啟了端口或者本身有Internet?IP地址的,為高聯通性電腦;在防火墻內并且沒有開啟TCP端口的電腦,為低聯通性電腦。高聯通性電腦可以和其它的高聯通性電腦已經低聯通性電腦進行P2P;而低聯通電腦只能和高聯通性電腦進行P2P。因此在BT、電驢中,有Internet?IP或者已經在防火墻上開啟端口的電腦速度很快,而在防火墻后面的電腦(一般為局域網上網方式)就比較慢了。而通過局域網方式上網的電腦超過70%,如果沒有網絡基礎,或者沒有網管特殊配置,只能處于低聯通性,速度很慢。
2.?防火墻自動穿透。無需用戶配置,自動讓2臺在防火墻后面的電腦能P2P互聯。P2P連接可以使用TCP和UDP?2種方式。由于WinXP?SP2限制了一個應用程序的TCP連接數,因此采用TCP方式進行P2P的話,要安裝TCP限制的破解軟件。而Tvkoo是使用UDP進行數據傳送的,因此不會有TCP限制。這是為什么有些用戶說:通過Netstat看不到很多的TCP連接而懷疑Tvkoo是不是P2P軟件的原因。
Tvkoo的P2P穿透力是我見到最強的軟件了,當然由于沒有使用TCP,使得在僅允許HTTP訪問的防火墻后面的計算機沒有辦法訪問。Skype在P2P穿透時有一個技巧,讓一些有Internet?IP的電腦使用TCP的80端口,在僅允許HTTP訪問的防火墻后面的電腦通過類似HTTP的訪問方式連接這些80端口的電腦進行P2P連接。Tvkoo也可以考慮一下這個方式。
二、WMV格式的分析
目前P2P直播都是使用WMV格式,通過模擬HTTP服務器的方式,把WMV數據流傳送給Media?Player。這是P2P直播的關鍵點。需要將Media?Encoder發出的HTTP數據進行拆包,然后組成30秒-1分鐘的P2P數據塊,然后通過P2P方式將數據塊發送給Tvkoo客戶端,Tvkoo模擬成HTTP服務器將傳輸完成的數據塊發送給Media?Player。這部分Tvkoo做的也不錯。
三、如何有效的選擇P2P的節點
這是Tvkoo的弱項。因為一臺電腦在P2P傳輸時,最多連接幾十臺其它的電腦。當幾萬臺電腦同時傳送一個P2P數據塊時,要有一個優化算法。比如:美國有5000個用戶,中國電信有5000個用戶,中國網通有5000個用戶,而每個用戶最多只能連30-50個節點,如果不湊巧,一個電信的用戶連接了20個網通的用戶和30個美國的用戶,就不斷的出現斷斷續續的情況了。這就是為什么人一多,Tvkoo就卡,并且Tvkoo要把國外IP封掉的原因了。
有什么好的方式解決這個問題呢?我先拋磚引玉一下:
(1)????作為P2P直播的營運商,可以多設幾臺P2P種子服務器,分布在不同的網段中。比如:北方網通設一臺(組),南方電信設一臺(組),種子的內容是一樣的。種子服務器多了,可以降低優化算法的難度。
(2)????種子服務器和普通節點的優先級:種子服務器的優先級總數低于普通節點的,如果普通節點的速度快了,就減少從種子服務器獲取的數據量。
(3)????全球IP地址表。P2P節點仲裁服務器中,應該有一個全球IP地址表,分中國大陸、香港、臺灣、北美、歐洲、澳洲、其它。中國大陸先按照營運商分:電信、網通、鐵通、聯通、教育網等,再按照省份分類。(網上有下載,可以整理)
(4)????高速網段表。在P2P訪問中,節點動態地將速度快的其它節點IP地址傳回服務器,服務器根據全球IP地址表算出網段,以網段-網段的方式記錄在數據庫中。
(5)????當一個新用戶連入節點時,在全球IP地址表中找到最近的節點,按照比例依次分配最快網段的節點;最近的節點;差一個級別的稍近的節點;隨機節點以及種子服務器。
(6)????P2P在數據傳送中,可以將30秒視頻作為1塊數據包;數據包中按照每16KB作為一個數據塊。每個時間段(如2秒),本節點向其它節點交換一下數據塊的傳送情況,然后計算一下數據包中每個數據塊的擁有率,優先傳送擁有率低的數據塊。在擁有率相當的情況下,隨機選擇。
(7)????在數據交換中,對于傳送慢的節點,定期剔除,然后問節點仲裁服務器要新的節點。
(8)????如果數據包中小于10%的數據塊沒有傳送完畢,在時間充足的情況下,對于余下的數據塊,可以同一個數據塊向多個節點請求。
(9)????節點仲裁服務器也會將新的P2P節點強行加載到另一個節點上,但不能超過節點最大連接數。