`

[转] 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; 

} 

}


sendStream.client = o;

在发布者方面,NetStream.peerStreams属性保存着所有订阅正在分发的NetStream的实例。例如,用sendStream.send()能发送同一数据到所有订阅者。你可以用下面的方法发送信息到指定订阅者。

sendStream.peerStreams.send()

NetConnection.maxPeerConnections 属性指定了允许连接到发布者的对等流的数量。其默认值为8,但实际上,是取决于你的应用程序,你必须考虑到大多数ISP提供非对称的互联网接入服务。图1说明了三个Flash Player实例直接通讯。每个Flash Player的客户端发送和接收两个流,建立一个完全的连接网格。由于互联网下载的能力普遍高于上传的能力,你必须要格外小心,不要超最终用户的上行负荷。


Figure 1. End-to-end connections using the Cirrus service

图1,使用Cirrus服务的端到端连接

NetConnection.unconnectedPeerStreams属性是一个尚未与分发NetStream关联的NetStreams的数组。当一分发流与一个订阅流名称相同时,这个订阅NetStream从这个数组转移到分发的NetStream.peerStreams数组。

Exploring the Video Phone sample application
为了说明如何使用Flash Player 10的端到端功能,我们已经开发了一个Video Phone应用示例。它也是这份文档的一部分。

Video Phone靠一个简单的HTTP服务交换Flash Player peer ID。该脚本作为包的一部分。此WEB服务不提供任何的用户身份认证。Flash Player在成功连接到Cirrus之后,注册一个peer ID。当拨通一个电话时,Video Phone呼叫者通过web服务查找接受者的ID。

为了主办这个Video Phone样例,Adobe专门运行这个web服务。在你建立自己的Video Phone样例时,你必须运行你自己的web服务,并在VideoPhonLabs.mxml中指定WebServiceUrl。你应该重写AbstractIdManger类去实现你自己的peer ID交换机制。例如,XMPP协议、Google 应用服务或Facebook框架。

建立Video Phone应用样例需要以下步骤:

使用提供的reg.cgi Python脚本,运行用于交换peer ID的web服务主机。
用Flash Builder 4创建一个新Flex项目。
将包中的源文件添加到项目中的src文件夹中。
在VideoPhoneLabs.mxml中用DeveloperKey指定你的Cirrus开发者key。
在VideoPhoneLabs.mxml文件中用WebServiceUrl指定web服务的URL。
本Video Phone应用示例使用了电视模型。呼叫建立过程是通过使用端到端NetStream.send() 的信息。由于你只能在已创建的NetStream上使用NetStream.send()方法,Video Phone发布一个所谓的“listener stream”(用固定名称)到其它能连接的Flash Player终端。当A用户(呼叫者)想要与B用户联系,他要订阅B用户的listener stream。这时候, B用户收到呼叫者的peer ID(用onPeerConnect() )并订阅A用户的媒体流。通过这个媒体流,A用户通知B用户有关他的用户友好的名字(用NetStream.send()方法),即用户可以选择接受或是拒绝呼叫。如果接受呼叫,B用户发布媒体流,建立两路通讯。

Where to go from here
在这篇文章中,除了介绍了新RTMFP协议的一些最令人兴奋的功能之外,还概述了新的AS 3 的API。读完本文,你应该对如何使用这个革命性的协议有了一个很好的理解。希望你能运用Flash Player 10 和AIR的端到端和高级媒体能力开发出一鸣惊人的应用软件。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics