`

[转] 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的端到端和高级媒体能力开发出一鸣惊人的应用软件。
分享到:
评论

相关推荐

    RTMFP, flash to java

    在“RTMFP, flash to java”这个主题中,我们关注的是如何在ActionScript 3 (AS3)编写的Flash应用程序与Java应用程序之间通过RTMFP进行通信。这种通信方式在实时互动应用,如视频聊天、多人在线游戏或者数据共享等...

    P2P on the Flash Platform with RTMFP.pdf

    ### P2P在Flash平台上的应用与RTMFP技术 #### 标题解析 文档标题“P2P on the Flash Platform with RTMFP.pdf”直接指出了本文档的主题:即如何利用RTMFP(Real Time Messaging Flash Protocol)实现在Flash平台上...

    flashP2P协议rtmfp解析.docx

    RTMFP协议的设计充分考虑了P2P环境中的效率和安全性,通过高效的加密机制和rendezvous服务,实现了Flash应用中的低延迟、高带宽的多媒体通信。在理解RTMFP协议的基础上,开发者可以更好地构建和优化基于Flash的P2P...

    RTMFP:rfc7425.pdf

    尽管Adobe Flash已经被广泛淘汰,并且Adobe公司已经宣布了Flash Player的终止日期,但是了解RTMFP协议的工作原理和实现细节,对于那些仍然需要维护老旧Flash应用的开发者而言,仍然具有一定的实用价值。此外,从技术...

    Flash P2P 游戏入门

    本文旨在深入探讨Flash P2P游戏的入门知识,包括RTMFP的基本概念、Flash Player中P2P功能的演变以及如何利用这些技术构建P2P游戏。 ### RTMFP:Flash中P2P的基础 RTMFP是Adobe于Flash Player 10中引入的协议,并在...

    rtmfp vs 测试 demo

    它允许应用程序通过互联网直接进行低延迟的数据传输,例如在Flash Player和Adobe AIR应用中常见。RTMFP充分利用UDP(User Datagram Protocol)的特性,提供较低的延迟和较高的带宽效率,尤其适用于实时媒体流应用。 ...

    rtmfp协议规范.pdf

    ### RTMFP协议规范知识点详解 #### 一、引言 RTMFP(Real-Time Media Flow Protocol)是一种专为安全传输实时视频、音频以及数据消息而设计的端到端通信协议。该协议由Adobe公司提出,并在2013年的互联网草案中...

    rtmfp 测试代码

    6. **应用开发**:对于初学者,这个测试代码提供了一个学习如何在Flash环境中搭建P2P视频传输应用的机会。开发者可以借此了解如何初始化RTMFP连接,设置数据通道,以及如何处理音视频流。 7. **实际应用**:RTMFP被...

    RTMFP协议分析文档

    RTMFP(Real Time Messaging Flash Protocol)是一种由Adobe Systems开发的专用于Flash Player之间的实时通信协议。它利用P2P技术,允许两个或多个Flash Player实例之间进行直接的数据交换,而无需通过服务器转发,...

    如何搭建视频直播网站.视频直播网站服务器架构(Flash P2P点播,RTMP,RTMFP,FMS,单播,多播,CDN,直播云).zip

    如何搭建视频直播网站.视频直播网站服务器架构(Flash P2P点播,RTMP,RTMFP,FMS,单播,多播,CDN,直播云).zip

    RTMFP 的p2P实现

    RTMFP(Real-Time Media Flow Protocol)是一种专为实时媒体通信设计的协议,它由Adobe Systems开发并应用于其Flash Player和Adobe AIR平台中。P2P(Peer-to-Peer)技术则是通过网络上的多个对等节点共享资源的一种...

    Flash P2P流媒体服务器系统

    Flash P2P流媒体服务器系统(简称P2PS)使用Flash Player客户端和RTMFP协议进行P2P视频直播/点播,极大的节省了服务器昂贵带宽。  工作流程:直播可通过Adobe Flash Media Live Encoder以及其它支持RTMP协议的发布...

    类似FMS的RED5开源FLASH流媒体服务器源码

    RED5开源FLASH流媒体服务器是一种类似Adobe Flash Media Server (FMS)的解决方案,它提供了实时流传输服务,支持多种媒体格式,并且完全免费且开放源码。RED5由Java编写,因此具有跨平台的特性,可以在运行Java环境...

    Red5是一个开源的Flash服务器代码

    Red5是一款基于Java开发的开源Flash服务器,它为开发者提供了实时流媒体和交互性应用程序的服务。这个技术的主要目的是为了支持Adobe Flash Player以及其他可以与Flash Media Server(FMS)交互的客户端,提供类似的...

    RTMFP 协议文档(rfc7016)

    RTMFP 协议文档(rfc7016)

    Adobe.Flash.Media.Server.3.开发者向导.简体中文版

    8. **API与服务**:介绍Flash Media Server提供的各种API,如Admin API、Application API,以及如何使用这些接口进行二次开发和自定义功能。 9. **案例分析**:提供实际的应用场景分析和示例代码,帮助开发者更好地...

    flash 实现P2P实用代码

    Flash是Adobe开发的一种交互式矢量图形和多媒体平台,广泛应用于网页动画和多媒体内容。在Flash中实现P2P功能,可以让用户之间直接交换数据,降低服务器负载,提高传输效率。以下将详细讲解如何使用Flash的RTMFP协议...

    PHP for Flash FMS源码

    2. **RTMP协议**:了解如何使用Flash Player与FMS通过RTMP协议进行数据交换,包括实时视频流、音频流和自定义数据包。 3. **AMF数据序列化**:AMF是一种高效的二进制数据格式,用于在Flash客户端和服务器之间交换...

    管理Flash Media Server

    ### 管理Flash Media Server的关键知识点 #### 一、Flash Media Server简介 - **Flash Media Server**(简称FMS)是由Adobe Systems开发的一款用于实时流媒体传输的强大平台。它支持多种流媒体协议,如RTMP(Real-...

    Learning Flash Media Server 3

    《Learning Flash Media Server 3》是一本专注于Adobe Flash Media Server 3技术的教程,适合希望深入理解和应用Flash媒体服务的专业人士。这本书详细介绍了如何利用FMS3构建实时交互的、高性能的多媒体应用程序。 ...

Global site tag (gtag.js) - Google Analytics