1. 程式人生 > >Flash中使用RTMFP開發P2P應用的Cirrus服務

Flash中使用RTMFP開發P2P應用的Cirrus服務

Adobe Flash Player 10 和 Adobe AIR 1.5 引入了一個新的通訊協議——Real-Time Media Flow Protocol 即實時媒體流協議,簡稱RTMFP。它具有低延遲、對等的端到端能力、安全性和可擴充套件性,尤其適合於開發實時協作的應用,不僅提供優秀的使用者體驗還降低了操作者的開銷。
      早期的Flash Player版本採用RTMP並且需要FMS 對於互動式的協作應用(例如:adobe Acrobat Connect Pro)或者音/視訊流服務。雖然RTMP是一很優秀的選擇,對於流媒體、共享物件或遠端操作,限定於實時互動式的音視訊通訊需求
為了使用RTMFP,Flash Player終端必須連線到支援RTMFP的伺服器,如:代號Cirrus(以前稱為Stratus)的服務或FMS4,Cirrus是一個提供集合點服務的主機,並輔助Flash Player終端之間建立通訊帳號。不像FMS,Cirrus不支援媒體中繼(media relay)、共享物件、指令碼等。所以使用Cirrus,只能開發Flash Player終端之間直接通訊的應用。
Flash Player已經是WEB線上視訊分發市場的領袖。在引入RTMFP和高階媒體壓縮技術後,Flash Player成為實時通訊領域的領袖。

這篇文章,首先強調了在實時通訊應用程式中採用RTMFP的好處。之後,敘述了管理直接端到端RTMFP連線的AS3 API。最後,介紹了VideoPhone 應用樣例。


RTMFP的優勢:
RTMFP是一個在Flash Player 10 和AIR 1.5 中引入的全新通訊協議。與RTMP的主要不同在於:RTMP是基於TCP並專門用於以前的Flash Player版本,而RTMFP建立於UDP之上。
雖然TCP提供了可靠的資料傳送(對檔案傳輸、電子郵件等非常適合),但它不能提供絲毫的端到端延遲保證。TCP通過在指定時間內重發丟失資料實現可靠的資料傳送。因為實時通訊最重要的目標之一是最小化端到端的延遲(100ms的延遲可能致使會話不能使用),TCP並不適合。傳送錯誤適應能力和恢復能力是絕大多數高階音訊視訊壓縮技術的必需的構成部分,例如已經在Flash Player 10中支援的Speex音訊和H.264視訊編碼。因此不需要TCP提供的可靠傳輸。因此將提供高效而快速的資料傳送的UDP,用於嚴格追求最小化端到端延遲的實時協作應用,是為人所受的。另外UDP優於TCP的地方在於,它讓端到端對等,它可以讓位於NATs之後的兩個客戶端直接傳送資料。


與RTMP比較,RTMFP在實時通訊方面具有以下優勢:
低延遲:由於RTMFP建立於UDP之上,它為實時通訊提供了最小的延遲。最重要的是RTMFP同時提供了可靠和不可靠兩種傳輸服務。當在兩個Flash Player例項之間傳送資料時(如:用NetStream.send()方法),採用可靠傳輸。當傳送Speex音訊例項時,採用不可靠傳輸,提供最小化的延遲。
端到端的媒體傳輸:不需要通過中轉伺服器,即可在兩個Flash Playerp例項之間傳送媒體。RTMP會將所有資料傳送到Flash Medai Server,RTMFP不僅最大限度地降低了端到端的延遲,而且還省掉了連線到中間資料轉接的環節,以至於具有極強的可擴充套件部署能力。
優化資料:傳送音訊資料具有比視訊和其他時間非關鍵資料更高的優先級別。這意味著可以在較緊張的頻寬通訊上增強使用者體驗。
較之前版本,這些功能為實時通訊帶來極大的益處,極大提升了使用者體驗。

防火牆穿越
RTMFP建立於UDP之上,UDP能讓兩個客戶端直接連線,即使它們位於NAT或防火牆之後。為了能讓RTMFP正常工作,你必須允許防火牆的對外UDP傳送。大部分使用者或SOHO防火牆、多數企業防火牆都關閉了UDP傳送功能。

一種解決方案是配置Flash Player用TURN代理。Flash Player支援未經認證的IETF因特網草案。如果網管配置TURN代理為允許外出UDP,可以在mms.cfg中增加一行配置Flash Player。

RTMFPTURNProxy=ip_address_or_hostname_of_TURN_proxy 

直接UDP傳送總是嘗試,TURN代理只是備用:用於UDP傳送不能在Flash Player和Cirrus之間或Flash Player終端之間流動時。

即使你的防火牆打開了對外UDP傳送,也可能由於綜合防火牆不能建立端到端的對等連線。當一個終端位於“均衡防火牆”之後時,也許不能進行端對端通訊。(對於分級防火牆,請參閱   )在這種情況下,你可以使用TURN代理輔助防火牆傳輸。


Cirrus 服務
Flash Player 例項要與另一個例項通訊,就必需連線到Cirrus服務(使用rtmfp://p2p.rtmfp.net)。 Cirrus是一個幫助主持Flash Player例項之間進行聯絡會合的服務,即使它們都位於NATs之後。雖然連線到Cirrus服務非常類似於連線到FMS,但Cirrus不提供任何FMS的特有功能(媒體延遲、共享物件、遠端等)。Flash Player終端在通訊期間必須保持與Cirrus服務的連線。為了使用Cirrus,需要一個開發key,這個可以在建立Adob Developer ID時生成。
在FMS 4中可以使用RTMFP支援。FMS可以讓Flash Player 9 或早期客戶端(用RTMP)與Flash Player 10 客戶端通訊。


安全
RTMFP提供了可靠的終端之間的通訊。它採用128位AES加密Key,協商採用Diffie-Hellmann交流方式。不過,它不能提供像SSL或RTMPS一樣強的終端身份認證。為了幫助終端身份認證,RTMFP和ActionScript 對應用開發者公開安全隨機數。要保證兩個通訊的Flash Player終端的隨機數相匹配。終端使用者可通過校驗這些隨機數,以確保在傳輸過程中沒有受到攻擊。這些隨機數也可以用於開發key連續機構。
值得注意的是Flash Player只能將你允許的麥克和攝像頭髮送到其他的Flash Player終端。