[转] Flash Player 10中使用RTMFP开发点到点应用的Cirrus服务(二)
http://bbs.9ria.com/viewthread.php?tid=79761&extra=page%3D1%26amp%3Borderby%3Ddateline%26amp%3Bfilter%3D2592000
原文地址:http://www.panovr.org/
ActionScript 3 API supporting RTMFP
为了支持RTMFP,Flash Player 10 中提供了一些新的AS 3 API。连接到Cirrus服务并创建类似于FMS下的端到端的媒体流。请注意,你必需在Flash Professional(CS4或更新版本)或者Flash Builder 4中使用AS 3,目标设置为Flash Player 10或AIR 1.5。
正如我之前所说,你需要先连接到Cirrus服务。
private const CirrusAddress:String = "rtmfp://p2p.rtmfp.net";
private const DeveloperKey:String = "your-developer-key";
private var netConnection:NetConnection;
netConnection = new NetConnection(); netConnection.addEventListener(NetStatusEvent.NET_STATUS, netConnectionHandler); netConnection.connect(CirrusAddress + "/" + DeveloperKey);
当你用Adobe Developer Connection帐户登录到Cirrus beta服务站点上时,会分配一个开必key。
当成功连接到Cirrus上时,你获取一个NetConnection.Connect.Success 事件。有几个连接失败的可能原因。如果你提供一个无效的开发key,或者指定了错误的Cirrus地址,你会收到 NetConnection.Connect.Failed事件。如果你的防火墙锁定了对外UDP传送,你会在90秒超时后,收到 NetConnection.connect.Failed事件。
在成功建立与Cirruse服务的连接后,将分配一个唯一的256位peer ID给你。为了接收你发布的音频、视频流,其它的Flash Player终端必需知道这个peer ID。怎样在相关Flash Player终端间交流这些peer ID,属于Flash Player或Cirrus服务范围之外。为了交换peer ID,可以用XMPP服务或一个简单的WEB服务,像Video Phone 样例一般。
Flash Player实例之间的直接通讯要使用单向 NetStream通道。如果你想要两个音频会话,每一个Flash Player都必须创建一个发送NetStream和一个接收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());
这意味着媒体被发布为端到端的流。由于Cirrus不能中转媒体,你只能发布为端到端的流。这个流包括了本地默认设备的音频和视频,你可以通过Settings Manager选择默认的设备。
注意:直到有FlashPlayer同意接收媒体流,音频/视频才会被发送。
现在,创建接收流:
private var recvStream:NetStream;
recvStream = new NetStream(netConnection, id_of_publishing_client);
recvStream.addEventListener(NetStatusEvent.NET_STATUS, netStreamHandler); recvStream.play("media");
这时候,你将听到声音,你也能创建一个Video对象来显示视频。为了创建接收NetStream,你必需知道发布者的256位peer ID。为了接收音频/视频,你必需知道发布的流的名称。
Advanced topics
发布者可在终端之上精细控制哪些可以接收他发布的流。当一个用户试图去接收一个分发流时,在发布NetStream上的onPeerConnect( )方法被调用(默认返回true)。发布者可以驳回某些Flash Player终端接收媒体的请求。
var o:Object = new Object(); o.onPeerConnect = function(subscriberStream:NetStream):Boolean {if (accept) {return true; } else { return false; } }