There is a new ActionScript 3.0 API in Flash Player 10 to support RTMFP. Connecting to the Stratus service and creating end-to-end media streams are analogous to working with Flash Media Server. Please note that you must use ActionScript 3.0 with either Flash Professional CS4 or Flex Builder 3 targeting Flash Player 10 or AIR 1.5.
As I mentioned before, first you must connect to the Adobe Stratus service:
private const StratusAddress:String = "rtmfp://stratus.adobe.com"; private const DeveloperKey:String = "your-developer-key"; private var netConnection:NetConnection; netConnection = new NetConnection(); netConnection.addEventListener(NetStatusEvent.NET_STATUS, netConnectionHandler); netConnection.connect(StratusAddress + "/" + DeveloperKey);
The developer key is issued when you sign up for an Adobe Developer Connection account and is available on the Adobe Stratus beta service site.
Upon successful connection to Stratus, you get a NetConnection.Connect.Success event. There could be several reason for connection failure. If you provide an
invalid developer key or incorrectly specify Stratus address, you'll receive NetConnection.Connect.Failed. If your firewall blocks outgoing UDP traffic, you'll receive the NetConnection.Connect.Failed event after a 90-second timeout.
After successfully establishing a connection to the Stratus
service, you are assigned a unique 256-bit peer ID (NetConnection.nearID). Other
Flash Player endpoints must know this peer ID in order to receive your published audio/video
streams. It is out of the scope of Flash Player or the Stratus service how these
peer IDs are exchanged among Flash Player endpoints. For exchanging peer IDs, you
may use an XMPP service or a simple web service, as the Video Phone sample application does.
Direct communications between Flash Player instances is conducted using unidirectional NetStream channels. That is, if you want two-way voice conversation, each Flash Player
endpoint must create a sending NetStream and a receiving NetStream.
First, create a sending 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());
This means that media is published as an end-to-end
stream. Since Stratus cannot relay media, you can publish only end-to-end
streams. This stream will include both audio and video from your local default
devices chosen by the Settings Manager.
Note: Audio/video
is not sent out until another Flash Player endpoint subscribes to your media stream.
Now, create the receiving NetStream:
private var recvStream:NetStream;
recvStream = new NetStream(netConnection, id_of_publishing_client);
recvStream.addEventListener(NetStatusEvent.NET_STATUS, netStreamHandler);
recvStream.play("media");
At this point, you hear audio and you can create a Video object to display video. In order to create the receiving NetStream, you must
know the 256-bit peer ID of the publisher (id_of_publishing_client).
In order to receive audio/video, you must know the name of the stream being
published.
The publisher has fine control over which endpoint can receive
its published stream. When a subscriber attempts to receive a published stream, the onPeerConnect() method is invoked (default implementation simply returns true) on the published NetStream.
The publisher could disallow certain Flash Player endpoints to receive its
media:
var o:Object = new Object();
o.onPeerConnect = function(subscriberStream:NetStream):Boolean
{
if (accept)
{
return true;
}
else
{
return false;
}
}
sendStream.client = o;
On the publisher side, the NetStream.peerStreams property
holds all the subscribing instances of the publishing NetStream. For example,
using sendStream.send() will send the same data to
all subscribers. You can use the following to send
information to a specific subscriber:
sendStream.peerStreams[i].send()
The NetConnection.maxPeerConnections property specifies
the number of peer streams that are allowed to connect to the publisher. The
default value is set to 8 but, in practice, depending on your application, you
must consider that most ISPs provide asymmetric Internet access. Figure 1
illustrates the direct communication among three instances of Flash Player. Each Flash
Player endpoint sends and receives two streams, creating a fully connected mesh.
Since Internet download capacity is generally much higher than upload capacity,
you must be extra careful not to overload the end-user's uplink.

Figure 1. End-to-end connections using the Stratus service
The NetConnection.unconnectedPeerStreams property is
an array of NetStreams that are not associated with a publishing NetStream yet. When a publishing stream matches a subscribing stream name, the subscribing NetStream is moved from this array to the publishing NetStream.peerStreams array.