16 Replies Latest reply: Feb 29, 2012 12:03 AM by Michael Thornburgh RSS

    Moving from Cirrus to Flash Media Server Enterprise 4.5.1

    danw11

      Hi:

       

      So, I have my realtime audio/video widget application and it works fine through Cirrus.  When it connects through Cirrus it creates uses NetConnection.connect(<cirrus url>, developerkey) and the

      call between user A and user B works fine.

       

      I am now trying to use my flash media server enterprise 4.5.1 provider: Influxis.  They gave me a test account.  When I connect using RTMFP, both clients connect and exchange their peer

      ids (still through my remove web service), but then when user A attempts to call user B, I get a NetConnection.publish fail message or something of the sort.

       

      I am thinking that my problem is in my main.asc file in my FMS account.

       

      I don't know what to put in their in order for user A and user B to talk.  my NetConnection.connect() method is just NetConnection.connect(<my account url at Influxis>);

       

      I feel I shouldn't have to put anything in my main.asc file for this to work since each peer talks to the other directly.....am I wrong on this one?

       

      I can't find any migration information to go from Cirrus to FMS with RTMFP support.  I really want to be able to connect with RTMFP first and then if it fails then connect with RTMP.

       

      This article, http://www.adobe.com/devnet/flashmediaserver/articles/real-time-collaboration.html is dated December 2010, so I am not sure it is the newest in addressing this issue, although I may just set this up and see how it works as a start.

       

      Any ideas would be appreciated.

       

      Thanks,

       

      Dan

        • 1. Re: Moving from Cirrus to Flash Media Server Enterprise 4.5.1
          Michael Thornburgh Adobe Employee

          i'm not familiar with Influxis' offering. however, if you're publishing on a NetStream that was created as

           

            var ns:NetStream = new NetStream(netConnection, NetStream.DIRECT_CONNECTIONS);

             ns.publish("streamname");

           

          then, assuming netConnection is an RTMFP NetConnection, the server has nothing to do with the publishing part and there's no way for it to keep you from publishing.

           

          the Cirrus servers silently ignore any client-server NetStreams that are created. if you are creating any client-server NetStreams with the Influxis server and publishing on it, then it's very likely the Influxis server is sending you an error that you wouldn't've seen with the Cirrus servers (the Cirrus servers are not FMS).

          • 2. Re: Moving from Cirrus to Flash Media Server Enterprise 4.5.1
            danw11 Community Member

            Michael:

             

            So, I basically took the VideoPhoneLabs example found here: labs.adobe.com/technologies/cirrus/samples/

            and simply replaced the code 'netConnection.connect(connectUrl, DeveloperKey);' to a call netConnection.connect(<influxis server url");

             

            I put a main.asc file in the myApp folder, but basically it doesn't do anything. 

             

            Correct me if I am wrong, but I believe you are saying that the main.asc file is not relevent in an RTMFP connection, and that the 2 peers

            should function as they do when I am connected to Cirrus without any special coding.

             

            If this is true, then what I am thinking is that FMS is not providing me a true RTMFP, even though I am using the "rtmfp://<influxis server url>" address.

             

            Thanks and I appreciate your response on this thread.  I would like to build this thread up with more discussion as I meander my way through this

            as I am sure others will find this very useful and I would be glad if they could benefit as well.

             

            Thanks Michael and look forward to more comments, as will supply the same.

             

            Regards,

             

            Dan

            • 3. Re: Moving from Cirrus to Flash Media Server Enterprise 4.5.1
              Michael Thornburgh Adobe Employee

              if you have an RTMFP connection to a server, then there is nothing the server should be able to do to keep you from making a DIRECT_CONNECTIONS NetStream and saying "publish" on it. the server is not involved.

               

              are you sure that your NetConnection is still open when you issue your publish()? VideoPhoneLabs uses the Cirrus "relay" server method, which you must supply yourself on FMS. perhaps FMS is closing the NetConnection on receipt of this unknown command or something.

              • 4. Re: Moving from Cirrus to Flash Media Server Enterprise 4.5.1
                danw11 Community Member

                OK, so what would this FMS "relay" server method look like?  Can you

                provide me an example of one that would work in my main.asc file on FMS?

                • 6. Re: Moving from Cirrus to Flash Media Server Enterprise 4.5.1
                  danw11 Community Member

                  Michael:

                   

                  So, I read these threads.  I added Jozsef's relay method to my main.asc

                  file.  In fact, this is the ONLY method I have in my main.asc file on

                  the FMS server.

                   

                  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);

                           }

                  else

                  {

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

                  }

                       }

                  }

                   

                   

                  When I press the call button, I see the following in the status window

                  of the calling client:

                  ID event: lookupSuccess

                  Calling dan@test.com, id:

                  24773a571c691e05c79df73e90e19ec47320576da904cd5c04eadf4fa43980f4

                  Outgoing stream event: NetStream.Publish.Start

                  NetConnection event: NetConnection.Call.Failed

                   

                  Nothing on the callee status window appears after the connected message

                  (Nothing happens on the callee side at all after the caller presses

                  the call button).

                   

                  So, I looked at the code and found the below segment and now have the

                  following questions.:

                   

                  1) In the netConnection.call method below there are 5 parameters, the

                  first one is the name of the remote method "Relay", but note the next 4.

                       They don't line up with the Relay method signature in the main.asc

                  file.

                   

                  2) How does the callee know about this stream named "media-caller"?

                   

                  3) It is obvious that the o.OnPeerConnect() function is not being called

                  on the callee side, since the message:

                       Callee connecting to media stream.... is never seen there.

                   

                  Any help to connect these dots would be greatly appreciated.  Since

                  Jozsef wrote the VideoPhoneLabs Cirrus app, can you ask him

                  to weigh in on this, if necessary?

                   

                  The goal here is simply to get the VideoPhoneLabs app. that Jozsef wrote

                  and have it work on FMS

                  with some real clear explanation of what needs to be added to the

                  original code that was published in the article.

                  The main.asc file would be included in this explanation as well as any

                  changes to the client side code.

                   

                  Thanks for your help Mike.  I hope to get this to work and I know others

                  will appreciate the complete working adaptation of the excellent

                  VideoPhoneLabs app that Jozsef had earlier put together!

                   

                  Regards,

                   

                  Dan

                   

                   

                  private function placeCall(user:String, identity:String):void

                               {

                                   status("Calling " + user + ", id: " + identity + "\n");

                   

                                   if (identity.length != 64)

                                   {

                                       status("Invalid remote ID, call failed\n");

                                       currentState = CallFailed;

                                       return;

                                   }

                   

                                   netConnection.call(Relay, null, identity, Invite,

                  userNameInput.text);

                   

                                   // caller publishes media stream

                                   outgoingStream = new NetStream(netConnection,

                  NetStream.DIRECT_CONNECTIONS);

                                    

                  outgoingStream.addEventListener(NetStatusEvent.NET_STATUS,

                  outgoingStreamHandler);

                                   outgoingStream.publish("media-caller");

                   

                                   var o:Object = new Object

                                   o.onPeerConnect = function(caller:NetStream):Boolean

                                   {

                                       status("Callee connecting to media stream: " +

                  caller.farID + "\n");

                   

                                       return true;

                                   }

                  • 7. Re: Moving from Cirrus to Flash Media Server Enterprise 4.5.1
                    Michael Thornburgh Adobe Employee

                    i believe there are at least two pages of comments on Jozsef's original article, some of which concern getting VideoPhoneLabs to work with FMS.

                    • 8. Re: Moving from Cirrus to Flash Media Server Enterprise 4.5.1
                      danw11 Community Member

                      Michael:

                       

                      I haven't found any other references (other than the ones you specified above) than this one here http://forums.adobe.com/message/3768213#3768213

                       

                      At the end, Denis_Nazarov states that he has solved his problem, but I am still at a loss.  Can you please specify the references to the two pages of Jozsef's original article that might correct

                      the issue I'm having?

                       

                      Thanks,

                       

                      Dan

                      • 9. Re: Moving from Cirrus to Flash Media Server Enterprise 4.5.1
                        Michael Thornburgh Adobe Employee

                        Jozsef's article is here:

                         

                           http://www.adobe.com/devnet/flashplayer/articles/rtmfp_cirrus_app.html

                         

                        go to the bottom of the page (where the comments are), and click the "2" to go to the second page. then search for "FMS" in the comments section. there are numerous comments and replies from Jozsef regarding getting VideoPhoneLabs to work with FMS.

                        • 10. Re: Moving from Cirrus to Flash Media Server Enterprise 4.5.1
                          Joebear123

                          Dan,

                           

                          I ran into this issue in the past and managed to solve it. Create a new main.asc and open it with a text editor of your choice. Then paste in this:

                           

                          Client.prototype.relay = function( 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 );

                                    }else{

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

                                    }

                               }

                          }

                           

                          I'm not sure if it still works it has been a while but give it a go and let me know.

                          -Joebear

                          • 11. Re: Moving from Cirrus to Flash Media Server Enterprise 4.5.1
                            danw11 Community Member

                            Joebear:

                             

                            Yes.  This did the trick.  Very much appreciated!

                             

                            Dan

                            • 12. Re: Moving from Cirrus to Flash Media Server Enterprise 4.5.1
                              Joebear123 Community Member

                              Hi Dan,

                              Great! I'm glad you got that working. If you ever run into any issues feel free to email Influxis Support the team is always standing by and ready to help

                              -Joebear

                              • 13. Re: Moving from Cirrus to Flash Media Server Enterprise 4.5.1
                                david.garcia.garcia

                                The provided solution allows to establish RTMFP connections between peers, but some functionalities still not work such as Object Replication. Does anyone have a hint on how to debug calls to the RTMFP server to see what methods are being triggered and not found when using Object Replication or any documentation that might shine some light on the problem. I believe Object Replication has some more server specific logic besides the Client.Relay function. NetGroup join works OK, but peer pairs do not connect in a NetGroup.

                                 

                                Thanks.

                                • 14. Re: Moving from Cirrus to Flash Media Server Enterprise 4.5.1
                                  Michael Thornburgh Adobe Employee

                                  i assume that you're using a group specification string, and not a bare peer ID, when making the new NetGroup (otherwise you wouldn't get the NetGroup.Connect.Success). and i assume you've set GroupSpecifier.serverChannelEnabled=true to get the server to bootstrap your group, or it wouldn't work with Cirrus.

                                   

                                  other than peer introductions and group bootstrap, the server is not involved in any way with Object Replication.  and note the Client.relay function is only necessary for compatibility with applications written for Cirrus; it's not a standard thing.

                                   

                                  there is a setting in FMS for whether it will do group bootstrapping completely automatically or if it will be percolated up to server-side script. if your FMS isn't doing automatic group bootstrap for clients that have set serverChannelEnabled=true for their groups, then you might have the server set to not-totally-automatic mode. i'm not 100% sure of the settings for that -- i'm not an FMS expert. the best place to ask is the FMS forums.  i *believe* the setting is in the Application.xml file, and in the "GroupControl" section, there should be a setting that should be

                                   

                                    <GroupControl>

                                        <JoinLeaveEvents mode="None"/>

                                     </GroupControl>

                                   

                                  the "None" setting should cause the server to handle bootstrapping automatically. other settings send events to server-side script.  i think at least one of the sample applications that comes with FMS may handle those events, but i don't know for sure. again, asking in FMS forums should yield better results.

                                  • 15. Re: Moving from Cirrus to Flash Media Server Enterprise 4.5.1
                                    david.garcia.garcia Community Member

                                    Thank you for the hint. I came across the FMS configuration PDF that explains in detail the different options that can be configured in the application.xml file. Nevertheless, it still will not work. The NetGroup connects succesfully but connections between peers in a group are not established (no NeighbourConnect Event) even thoug all peers correctly see the Connect.Success event on the NetGroup. The application perfectly works when using the Adobe developer Server so it must be some configuration issue with my FMS server.

                                    • 16. Re: Moving from Cirrus to Flash Media Server Enterprise 4.5.1
                                      Michael Thornburgh Adobe Employee

                                      are your clients connecting to the same FMS application name/instance on the same FMS?  are you sure that each client is joining with *exactly* the same groupspec?