天天看點

flash player10.1 + FMS4中的p2p功能

在fms4以前Adobe隻允許在stratus中才能使用p2p功能。令人高興的是,在最新釋出的fms4中,p2p功能已經內建進來了,這将給實時視訊類的應用帶來更高的效率,adobe這次很給力!

為了使用p2p,開發用的flex sdk至少要4.1以上(當然最高版本是代号為hero的4.5版本,可從adobe的官網下載下傳),另外還需要fms4(同樣可從adobe官網下載下傳開發版本)。

先上完整代碼吧:

在這段代碼中我們看到了一個全新的NetGroup對象,要使用p2p,“接收方”與“接收方”必須先加入到“相同名稱"的NetGroup中。而且要發送的資料,必須分解有順序的一塊一塊(通常用有序數組來儲存這些資料塊),然後"發送方"調用addHaveObjects方法設定待發送的資料塊,而"接收方"則調用addWantObjects請求需要接收的塊。

一旦"接收方"調用了addWantObjects方法後,"發送方"便會進入"NetGroup.Replication.Request"狀态,此時"發送方"響應"接收方"的請求,将需要的資料塊以udp協定發送過去,然後“接收方”會收到"NetGroup.Replication.Fetch.SendNotify"的資料到達通知,如果成功接收,将進入“NetGroup.Replication.Fetch.Result”狀态,全部接收完成後,開發人員可根據需要将這些塊重新合并成原始對象。

處理過程示意圖如下:

flash player10.1 + FMS4中的p2p功能

文中代碼最終的運作截圖:

flash player10.1 + FMS4中的p2p功能

測試方法:發送方先點選“生成初始資料”,然後點選“添加要發送的資料”,最後接收方點選“接收資料”

此外,如果多開幾個"接收方",可以驗證一下“接收方”收到資料後是否能變成資料提供者,向其它接收方提供資料,也就是所謂的p2p中"人越多,速度越快,傳輸越穩定"的現象

flash player10.1 + FMS4中的p2p功能

但是,FMS4中的p2p也不是完美無缺,實際測試下來,目前尚不能打洞,即所有peer端如果在同一個網段,傳輸是正常的,但是如果不是同一個網段則無法進行p2p。

不過,如果參與p2p的機器越多,接收到資料的用戶端根據文中的代碼處理,也可以變成發送方,這表示有可能本來在同一個網段的其它使用者原本沒有資料來源,但是隻要本網段有一個使用者接收到資料後(比如這個使用者有多重網絡),本網段的其它使用者也能接收資料了,這在一程度上能解決打洞的沖突。