ãåç¥ã®ããã«ã
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ã®è»éãžã®æåŸ
ãåŸ
ã£ãŠããŸãã é »ç¹ã«æçš¿ããããšãçŽæããŸããããããã§ã...é¢çœããã®ãå
±æãããã§ãã