Groups | Blog | Home
all groups > macromedia flash flashcom > november 2006 >

macromedia flash flashcom : Syncronizing FMSs


Neeeol
11/21/2006 6:15:34 PM
:frown;

I have been given a research task by my boss. I am NOT (yet) an experienced
FMS programmer, and I have been tasked with finding out how to do the following.

We need to collect live audio/video and screen capture data from numerous
distributed sources all recording at the same time (the same event, actually)
and securly collect it at multpiple locations, insuring that each location is
fully syncronized with the other(s). The idea was to have complete sets of all
the data stored on multiple servers, for a few reasons, including security,
backup and load sharing.

Now, I gather that the best way to do this is by using one or two origin
servers and using edge servers at the remote sites to do the load balancing.
But everything that I have been able to find has been geared to the servers
satisfying requests [u]for[/u] data, not collecting data [u]from[/u] the
clients.

We are already using a FMS to collect data from multiple camera, microphone
and screen capture feeds at a single physical location. Is expanding this to
handle feeds from multiple distributed locations as simple as establishing a
one or two origin server farm and setting up a series of edge servers to
reroute the traffic? And if I use two origin servers, how do I insure that
they stay mirrored and that data streams from a common event, coming in from
different edge servers are all combined into a single event database?

I don't start small. You should see the first wood floor I ever layed! :grin;

If I could be redirected to white papers or the like, that would be great.
Thanks for your help.
ManMachine
11/22/2006 12:00:00 AM
One quick way of synchronizing several different FMS:es is to set up a
SharedObject on each FMS holding the data to be synchronized and letting all
FMS:es connect to each other's SO:s (or all connect through a central "server"
FMS).

/Johan
Neeeol
11/22/2006 3:30:29 PM
Okay, I'll look into shared objects. I guess the issue here would be
recognizing when the second server creates a shared object that it is actually
related to one that is already in existance on the other server. Maybe the way
this should work is that when a new event is initiated, shared objects are
simultaneously created on both servers. Then, when clients calling in to the
second server get established, they would connect to the already existing
object.
ManMachine
12/5/2006 7:57:39 AM
Another way to accomplish this is to let the servers connect to each other and
call methods on the connections. You'd have to set up a command structure like:

nc.call("syncData", callbackFunction, {dataAddress:object/property,
dataValue:value}...etc.

/Johan
Neeeol
12/5/2006 5:40:19 PM
Okay, that's interesting. Unfortunately I don't have enough experience with this to really understand where you're going.

ManMachine
12/6/2006 12:00:00 AM
I haven't done it server to server but according to documentation it should
work the same way as client to server.

Create a named reference to all SO:s to synchronize:

----------------------------------

application.syncSo = {};
syncSo["mySo"] = mySo;

----------------------------------

Server 1 listens to server 2:

application.onConnect(client, params) {
if(params.type=="server") {

client.synchronize = function(dataAddress, dataName, dataValue) {
application.syncSo[dataAddress].setProperty(dataName, dataValue);
return true;
}
}

----------------------------------

Server 2 calls server 1:

var syncNc = new NetConnection();
syncNc.synchronize = function(dataAddress, dataName, dataValue) {
application.syncSo[dataAddress].setProperty(dataName, dataValue);
return true;
}
syncNc.connect(server2Url, {type:"server"});

----------------------------------

Server 2 calls synchronize:

syncNc.call("synchronize", myCallbackObject, "mySo", "myProp", "myVal");

----------------------------------

It's untested but it should work.
Neeeol
12/6/2006 3:38:02 PM
Neeeol
12/7/2006 4:18:22 PM
Johan,

I am really feeling stupid now. application.syncSo does not show up in either
my client-side or server-side action script references. I am looking at the
PDF references published by Adobe for Flash Media Server 2 dated 11/4/2005.
Have I got the wrong references?
ManMachine
12/7/2006 8:30:43 PM
application.syncSo is just a variable I declared above:

application.syncSo = {}; //( {} is shorthand for new Object();

I use it as sort of a global name-value-collection.

AddThis Social Bookmark Button