11 Replies Latest reply: Apr 12, 2012 12:02 AM by Michael Thornburgh RSS

    Restart 2011-01-20 22:54:57 UTC

    Michael Thornburgh Adobe Employee

      i just installed a new version of the Codename Cirrus software on the cluster.  unfortunately there were incompatible back-end data format changes in this new version which required a complete shutdown before restart (usually we can do a non-disruptive soft restart that's invisible to end-users).  as a result, the system was completely unavailable from 22:54:04 UTC to 22:54:57 UTC (for 53 seconds at 2:54 PM pacific time).


      the last restart was in june of 2010. 


      the new server software has two interesting new features.


      1) you can now place your developer key as the second parameter to NetConnection.connect() instead of appending it to the connect URI.  this improves security by not having your developer key transmitted (effectively) in the clear as part of the RTMFP Initiator Hello message (which is encrypted with the well-known default session key).


      example: if your developer key is "000000000000000000000000-000000000000", you used to do


         var nc:NetConnection = new NetConnection();



      but now you can instead do


         var nc:NetConnection = new NetConnection();

         nc.connect("rtmfp://p2p.rtmfp.net", "000000000000000000000000-000000000000");


      we haven't yet updated the developer key signup page or samples to indicate this new method, but it is the preferred way.


      2) Codename Cirrus now supports a very simple message relay service, which is intended for sending a short message to another peer connected to the system.  the intention is to simplify the signaling problem for setting up 1:1 P2P communications.  this relay service is not intended to take the place of P2P communication, and we may disable or rate limit it if is used excessively (providing this service consumes a large amount of server resources compared to P2P introduction).  please limit your use of this facility to sending no more than one or two short messages to another peer, hopefully to signal the peer to set up a 1:1 P2P channel.


      to use this facility, you must know the peerID of the peer to which you want to send a message.


      the sender requests a relay as follows:


         // nc is a NetConnection connected to the Codename Cirrus service

         nc.call("relay", null, destPeerID, ...); // "..." is zero or more AMF serializable objects


      the receiver (destPeerID) receives this message on its NetConnection's client object's "onRelay" method:


         public function onRelay(senderPeerID:String, ... args):void







         // on sender peerID 9876 sending to peerID 1234

         nc.call("relay", null, "1234", "INVITE");


         // on receiver peerID 1234, this callback happens

         nc.client.onRelay("9876", "INVITE");


      we're working on incorporating both of these new features into our sample material.

        • 1. Re: Restart 2011-01-20 22:54:57 UTC
          kevnews Community Member

          our p2p software was working fine and today can't connect to the stratus/cirrus server.

          so we resigned up. same problem.

          we used to connect to rtmfp://stratus.adobe.com/blah

          and we connect to rtmfp://p2p.rtmfp.net/blah


          but still fails.

          are things still down?


          • 2. Re: Restart 2011-01-20 22:54:57 UTC
            Michael Thornburgh Adobe Employee

            the service was only down for 53 seconds yesterday.


            if your devkey begins with "8b8c..." then i think you might have something in the second parameter to NetConnection.connect(), perhaps a blank string or otherwise something that doesn't look like a developer key.  if you're putting your developer key in the connect URI, make sure there is no second (or more) parameter to NetConnection.connect().


            if your devkey begins with "3b91...", then you're putting the entire URI as both the first *and* second parameters to NetConnection.connect().  in other words, you're saying


               nc.connect("rtmfp://p2p.rtmfp.net/3b91...", "rtmfp://p2p.rtmfp.net/3b91...");


            but you should be doing one of the following:


              nc.connect("rtmfp://p2p.rtmfp.net/", "3b91...");



            • 3. Re: Restart 2011-01-20 22:54:57 UTC
              Michael Thornburgh Adobe Employee

              i also can see a developer key beginning with "9a20..." in the same boat as the first case i described.


              developer keys "8b8c..." and "9a20..." are using "stratus.adobe.com" as the hostname for the service.  you should change to "p2p.rtmfp.net".

              • 4. Re: Restart 2011-01-20 22:54:57 UTC
                kevnews Community Member

                our developer key starts with 5c...


                and we haven't changed anything since it started working 6months ago. didn't realize a change was required... (?)


                will try the changes you sugged but those keys u mention are not ours.



                • 5. Re: Restart 2011-01-20 22:54:57 UTC
                  kevnews Community Member

                  ok, yeah, the code has "" as the 2nd part in the connect method. removed that and things look fine...


                  • 6. Re: Restart 2011-01-20 22:54:57 UTC
                    TicoBall Community Member

                    I've built an application using Cirrus as a testing platform.  I'd like to deploy it on my own FMS, but the example code seems to be missing the FMS server side code that implements the 'very simple message relay service' (i.e. nc.call(...) functionality).  Can you please provide this so that I can deploy my tested application without being bound to the cirrus server TOS.

                    • 7. Re: Restart 2011-01-20 22:54:57 UTC
                      Michael Thornburgh Adobe Employee

                      Cirrus is not FMS. the implementation of the short message relay service nc.call("relay", null, ...) can't just be copied to an FMS installation (mostly because it's written in C++, not Javascript ).


                      however, it's very simple. it shouldn't be any problem for you to duplicate that functionality (or as much as you need) on FMS with a few lines of server-side Javascript.


                      i have zero personal experience writing FMS server-side Javascript. if you need help implementing this functionality, i'd suggest asking in the FMS forums.

                      • 8. Re: Restart 2011-01-20 22:54:57 UTC
                        TicoBall Community Member

                        This answer is not very satisfying, especially since Cirrus is not commercially available.  I'm a paying customer who wants a turn key baseline p2p video chat implementation that works with FMS.  I haven't been able to find one.  Cirrus is the closest, but you are expecting your customers to reverse engineer the server code to get it to work with FMS.  That just seems wrong.  On top of that, Adobe engineers claim that the cirrus samples should work with FMS (see the comments in this article: http://www.adobe.com/devnet/flashplayer/articles/rtmfp_cirrus_app.html)

                        • 9. Re: Restart 2011-01-20 22:54:57 UTC
                          Jozsef V Community Member

                          The sample app is by no means a turn-key commercial video chat app. First of all, it lacks user authentication. It uses a web-service for user registration and lookup. Second, it does not have any failover for firewall blocking.


                          Please see http://www.adobe.com/devnet/flashmediaserver/articles/real-time-collaboration.html, which describes issues that you need to solve for a commercial video chat application.


                          Nevertheless, here is some SSAS that performs the relay operation that is used in the sample application:



                          function relay(id, command, data)


                               var i;

                               for (i = 0; i < application.clients.length; i++)


                                    if (application.clients[i].farID == id)


                                         application.clients[i].call("onRelay", null, this.farID, command, data);




                                         trace("User not found: " + id);







                          • 10. Re: Restart 2011-01-20 22:54:57 UTC
                            alvet Community Member

                            I believe the relay solution is for the Video Phone Labs sample app. Can I get this to work on Flash Media Server ( FMS ) on Amazon Web Services ( AWS )?

                            From what I understand from the below link Flash Media Server on Amazon Web Services supports peer-assisted multicast streaming. It does not support IP multicast or fusion multicast.

                            http://help.adobe.com/en_US/flashmediaserver/amazonec2/WS6fc2df2b6d2ce24359910e2812c396a83 eb-7ff8.2.html


                            Could you tell me if Video Phone Labs depends on IP multicast or fusion multicast?

                            • 11. Re: Restart 2011-01-20 22:54:57 UTC
                              Michael Thornburgh Adobe Employee

                              VideoPhoneLabs does not use any kind of multicast.