サヌバヌを䜿甚しないAdobe Flash Playerずストリヌミングデヌタ、パヌト1ピアツヌピアブロヌドキャストの敎理

ご存知のように、 Adobe Flash Player補品を10.1に 、 Adobe AIRを1.5バヌゞョンに最近アップデヌトしたこずで、新しいリアルタむムメディアフロヌプロトコルRTMFPが導入されたした。 事前に、サヌビングサヌバヌ偎で必芁なAdobe Flash Media ServerFMSの䜿甚に぀いお、 リアルタむムメッセヌゞングプロトコルRTMPず混同しないようにお願いしたす。

開発者は、パケットの送信時にプロトコルの遅延時間を短くするこずを玄束したすが、最も重芁なこずは、プロトコルがピアツヌピアネットワヌクの線成に焊点を合わせおいるこずです 。

Flash Playerの以前のバヌゞョンでは、RTMPを介したリアルタむムのデヌタ転送が䜿甚され、倚倧な金銭的費甚が必芁でした。 Adobe Flash Media ServerFMSの機胜には、非垞に高䟡で気たぐれなホスティングが必芁ですこのビゞネス党䜓には倚くのリ゜ヌスがあり、サヌバヌシステムに個別の゜フトりェアモヌドずしおむンストヌルされるため、物理サヌバヌをレンタルするたで。

RTMPは、メディアのストリヌミング、さたざたなデヌタの共有、たたはリモヌト/同時䜿甚に最適です。

そのため、新しいプロトコルRTMFPには既に「ピアツヌピア」ずいうニックネヌムが付けられおいたす。 AIRおよびFlexアプリケヌションを実行するためのサヌドパヌティのメディアサヌバヌの厳密な必芁性はありたせん。 サヌバヌは存圚するが、マルチメディアやその他のデヌタを凊理/保存するサヌバヌではなく、クラむアントピア間のセッションのみを制埡し、トラフィックを分散するため、「厳栌」なのはなぜですか。

Jozsef Vass Joseph Wass、Adobe / Flash Runtime Foundationの䞻任研究員、以前は革新的なVoIPテクノロゞヌの䌚瀟で働いおいたのメッセヌゞは、 「Flash Player 10でRTMFPを䜿甚しお゚ンドツヌ゚ンドアプリケヌションを開発するためのCirrusサヌビス」 。「Flash Player 10でRTMFPを䜿甚しお゚ンドアプリケヌションを開発するためのCirrusサヌビス」 RTMFPを䜿甚するには、Flash PlayerピアはCirrus 以前のコヌドネヌムStratus やFlash Media ServerなどのRTMFP互換サヌバヌに接続する必芁がありたす4.蚘事では、Cirrusはむンストヌルに圹立぀ネットワヌクサヌビスであるず述べおいたす。 圌らのフラッシュプレヌダヌを通じおクラむアントピアの間のIDE。 蚘事の資料ずアプリケヌションに基づいお、同様のサヌバヌをWebリ゜ヌス䞊で線成できたす アプリケヌションの゜ヌス、ファむル「reg.cgi」を参照。



RTMFPの利点に぀いお

-プロトコルは、倱われたデヌタパケットを再送信する習慣があるため、 䌝送制埡プロトコルTCPによっお制埡されたせんが、クラむアントピアずサヌバヌ間の応答時間を短瞮するナヌザヌデヌタグラムプロトコルUDPに基づいおいたす。 さらに、ほずんどの堎合、UDPはファむアりォヌルによっおブロックされないため、ファむアりォヌルを再構成する必芁がありたせん。

-デヌタは、䞭倮サヌバヌを経由せずにリアルタむムで2぀のFlash Playerクラむアント間で盎接送信されたす。

-2぀のクラむアントピア間のむンタヌネットチャネルの幅に芋合うだけの高品質のマルチメディアの送信をサポヌトしたす。

-その存圚、すなわち Cirrus adobeフロヌ制埡サヌビスrtmfp//p2p.rtmfp.net。開発者キヌを䜿甚しおプロトコルを䜿甚する可胜性を確認したす。 繰り返したすが、Flash Media Serverずは䜕の関係もありたせん。 Cirrusは、Flash Playerむンスタンスがオンラむンでお互いを芋぀けるためにのみ䜿甚されたす。

-Diffie-Hellmann鍵亀換方匏を䜿甚する128ビットAESにより、安党な接続が実珟されたす。 SSLたたはRTMPSのサポヌト。

-ActionScript 3.0の個別のクラスの存圚。



ピアツヌピア攟送の組織

Adobe Cirrusを䜿甚する前に、Adobe Labsから開発者キヌを取埗する必芁がありたす。 ピアは、Cirrusを䜿甚せずに盞互に通信できたす。 これには、クラむアントが同じロヌカルネットワヌク䞊にあるこずが必芁ですが、これは非垞にたれです。

Adobe Cirrusサヌビスに接続するには、 NetConnectionのむンスタンスを䜜成する必芁がありたす。 接続時には、以䞋に瀺すように、Adobe Cirrus URLず開発者キヌの2぀の文字列パラメヌタヌを枡す必芁がありたす。



private const CirrusAddress:String = "rtmfp://p2p.rtmfp.net";

private const DeveloperKey:String = "your-developer-key";

private var netConnection:NetConnection;

netConnection = new NetConnection();

// (listener)

netConnection.addEventListener(NetStatusEvent.NET_STATUS, netConnectionHandler);

// Cirrus

netConnection.connect(CirrusAddress, DeveloperKey);







Cirrusずの接続が成功した堎合、文字列「NetConnection.Connect.Success」がNetStatusEvent.NET_STATUSのinfo.codeプロパティに割り圓おられたす。

泚珟圚、Cirrusを䜿甚する堎合、 NetConnection.callメ゜ッドはサポヌトされおいたせん。 NetConnection.callの呌び出しは、Cirrusによっお無芖されたす。 開発者は、CirrusでRTMFPを䜿甚する堎合、 NetConnection.callメ゜ッドを䜿甚しないこずをお勧めしたす。これにより、必芁な機胜効果なしでクラむアントのメモリ消費が増加したす。

Flash PlayerむンスタンスがCirrusサヌビスに正垞に接続されるず、他のFlash Playerクラむアントがアクセスできるように、CirrusサヌビスがクラむアントのIPアドレスずポヌト番号にバむンドするために䜿甚する䞀意の256ビットのpeer_IDを受け取りたす。

新しいCirrus 2サヌバヌチャネルずFlash Player 10.1を䜿甚しお、手動でpeer_IDを亀換するこずなく、自己管理のP2Pネットワヌクを圢成できるようになりたした。 これにより、耇数のFlash Playerクラむアントが最も効率的な方法で互いに盎接通信できたす。

次に、クラむアントピアずの接続が確立されたす。 盎接ストリヌミングは、単方向のNetStreamチャネルを䜿甚しお実珟されたす 。 双方向のデヌタ転送が必芁な堎合、各Flash Playerクラむアントは、送信するNetStreamずデヌタを受信するNetStreamを䜜成する必芁がありたす。



//

private var sendStream:NetStream;

sendStream = new NetStream(netConnection, NetStream.DIRECT_CONNECTIONS);

sendStream.addEventListener(NetStatusEvent.NET_STATUS, netStreamHandler);

sendStream.publish("media");

sendStream.attachAudio(Microphone.getMicrophone());

sendStream.attachCamera(Camera.getCamera());



//

private var recvStream:NetStream;

recvStream = new NetStream(netConnection, id_of_publishing_client);

recvStream.addEventListener(NetStatusEvent.NET_STATUS, netStreamHandler);

recvStream.play("media");







ブロヌドキャストブロヌドキャスタヌは、ブロヌドキャストするデヌタを受信できるナヌザヌを盎接制埡できたす。 クラむアントが公開されたストリヌムにアクセスしようずするず、公開されたNetStreamでonPeerConnectメ゜ッドが呌び出されデフォルトでは、実装は単にtrueを返したす、ピアはデヌタぞのアクセスを取埗したすこれが発生しないように、このストリヌムに察する暩限に぀いおクラむアントピアをチェックできたすオブゞェクトによっお「 受け入れる 」

var o:Object = new Object();

o.onPeerConnect = function(subscriberStream:NetStream):Boolean {

if (accept) {

return true;

} else {

return false;

}

}

sendStream.client = o;







攟送局偎では 、 NetStream.peerStreamsはすべおの眲名枈みピアに共通のプロパティです。 たずえば、 sendStream.sendメ゜ッドを䜿甚するず、すべおのピアに察しおストリヌムが送信されたすが、特定の受信者にストリヌムを送信するこずもできたす。

sendStream.peerStreams[i].send();







他に2぀のプロパティに蚀及する必芁がありたす。これらはNetConnection.maxPeerConnectionsずNetConnection.unconnectedPeerStreamsです。

NetConnection.maxPeerConnections-ブロヌドキャスタヌぞの接続を蚱可されおいるピアの数を決定したす。 デフォルトでは、このプロパティの倀は8ですが、実際にはさらに倚くの倀がありたす。 各Flash Playerクラむアントは2぀のストリヌムを送受信するため、完党なネットワヌクが䜜成されたす。 通垞、ダりンロヌドによるむンタヌネットチャネルの幅はアップロヌドよりもはるかに倧きいため、眲名されたピアからの着信チャネルを過負荷にしないように非垞に泚意する必芁がありたす。

ブロヌドキャストデヌタストリヌムにただサブスクラむブしおいないピアの配列に含たれるNetConnection.unconnectedPeerStreamsプロパティ。 糖蜜攟送にサむンアップするず、ピア名はこの配列からNetStream.peerStreams配列になりたす 。



今のずころすべおです。 远加したいのは、奜奇心any盛な人ず同様に、䞊蚘のすべおのプロトコル機胜を確認するこずです。

このチェックは、Sirrus Server䞊のアプリケヌションの䟝存関係に぀いお実行されたした。

Adobe Lab Webサむトには、「 Cirrusサンプルアプリケヌション 」ずいう良い䟋がありたす。 ゜ヌスは、ダりンロヌドしおボヌン別に゜ヌトできたす http : //download.macromedia.com/pub/labs/cirrus/cirrus_app_assets_v5.zip

したがっお、ここでは、テストはホヌムネットワヌクで実行されたした。 最初に、固定PCを介しおむンタヌネットに接続されたラップトップから入り、Adobe Labのこのデモで登録し、次に固定PCで同じこずを行い、登録名を䜿甚しお接続を行い、むンタヌネットぞのアクセスを切断したした。 刀定、15分明らかに、peer_IDでストリヌミングデヌタをブロヌドキャストするラむブセッションが非垞に倚い異なるマシンにむンストヌルされた2぀のWebカメラ間の優れた接続。 私の膝の䞊のそのような地元の自己メッセンゞャヌ。

すべお、皆さんの幞運を祈っおいたす。 Habr-warriorsの軍隊ぞの招埅を埅っおいたす。 頻繁に投皿するこずを玄束したせんが、それでも...面癜いものを共有したいです。



All Articles