
Код AS3:
package {
import flash.display.MovieClip;
import flash.net.NetConnection;
import flash.events.NetStatusEvent;
import flash.net.NetStream;
import flash.media.Microphone;
import flash.media.Camera;
import fl.video.*;
import flash.media.Video;
import flash.net.NetGroup;
import flash.net.GroupSpecifier;
public class Main extends MovieClip {
private const CIRRUS_ADDRESS:String = "rtmfp://p2p.rtmfp.net";
private const DEVELOPER_KEY:String = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
private var netConnection:NetConnection;
private var myPeerID;
private var farPeerID;
//streams
private var sendStream:NetStream;
private var recvStream:NetStream;
private var video:Video;
public function Main() {
netConnection = new NetConnection();
// Добавляем детектор (listener) для получаения информации о статусе соединения
netConnection.addEventListener(NetStatusEvent.NET_STATUS, netConnectionHandler);
// Соединяемся со Cirrus
netConnection.connect(CIRRUS_ADDRESS, DEVELOPER_KEY);
}
function netConnectionHandler(e:NetStatusEvent):void {
switch (e.info.code) {
case "NetConnection.Connect.Success":
trace(e.info.code);
myPeerID = netConnection.nearID;
initSendStream();
break;
}
}
// для отправки потока данных пиру
private function initSendStream() {
trace("initSendStream()");
sendStream = new NetStream(netConnection, NetStream.DIRECT_CONNECTIONS);
sendStream.addEventListener(NetStatusEvent.NET_STATUS, netStreamHandler);
sendStream.publish("media");
sendStream.attachAudio(Microphone.getMicrophone());
sendStream.attachCamera(Camera.getCamera());
var sendStreamClient:Object = new Object();
sendStreamClient.onPeerConnect = function(callers:NetStream):Boolean {
farPeerID = callers.farID;
trace("onPeerConnect "+farPeerID);
return true;
}
sendStream.client = sendStreamClient;
}
private function initRecvStream() {
trace("initRecvStream()");
trace("myPerrID = ", myPeerID);
recvStream = new NetStream(netConnection, myPeerID);
recvStream.addEventListener(NetStatusEvent.NET_STATUS, netStreamHandler);
recvStream.play("media");
video = new Video(320, 240);
video.attachNetStream(recvStream);
addChild(video);
recvStream.client = this;
}
function netStreamHandler(e:NetStatusEvent):void {
trace(e.info.code);
if (e.info.code=="NetStream.Publish.Start") {
initRecvStream();
}
}
}
}