视频通信RTMFP协议运用综述

时间:2022-06-05 03:30:00

导语:视频通信RTMFP协议运用综述一文来源于网友上传,不代表本站观点,若需要原创文章可咨询客服老师,欢迎参考。

视频通信RTMFP协议运用综述

随着网络技术的发展,网络用户的期望越来越高,对于实时高质量视频通信的需求不断上升。据LifeSize公司2011年年的报告显示,视频通信在全球的市场规模已达到2O亿美元,并将保持l5%一20%的年增长率逐年攀升,市场前景十分广阔。然而,基于传统的媒体流协议的视频应用对于网络带宽的占用相对较高,从而限制了视频的清晰程度和传输速度。针对该问题,P2P对等网络技术的产生为视频通信的发展打开了新思路。P2P技术自产生至今已逾十年,经历了全面的发展和完善,已在实时交流、视频点播/直播、文件共享、分布式计算等领域得到了广泛应用。采用P2P技术实现视频通信,将极大地减小运营商的压力,同时提高用户的使用体验。从而,基于P2P对等网络技术的视频通信协议成为该领域研究的热点问“。至20l0年12月,AdobeFlashPlayer10的客户端装机率已高达到97%。由此可知,FlashPlayer已成为当今使用最为广泛的播放器之一。Adobe公司在其最新产品FlashPlayer10和AIr1.5中,率先使用了对等协议联网实时媒体流协议(rtmfp),并在最新的Flashmediaserver中提供了服务端的支持,使FlashPlayer可以实现应用层组播和P2P功能。这一解决方案,对硬件平台要求不高,而且具有跨平台的特性,甚全可以支持移动设备平台,其优势不言而喻。本文针对这一最新的发展趋势,对RTMFP协议进行深入研究,并给出了该协议在P2P视频通信领域的应用原型。

lRTMFP协议研究

1.1RTMFP工作原理

RTMFP协议全称为对等协议联网实时媒体流协议(Real-TimeMediaFlowProtoco1)。始现于AdobePlayerl0与AIR1.5,并在AdobePlayerl0.1中得到了进一步的完善。该协议基于UDP(UserDatagramProtoco1),允许客户端之间建立点对点的通讯连接,即FlashPlayer用户之间可以不通过服务器端直接建立连接,从而实现客户端之间的数据传输[。其基本工作原理及实现过程描述如下:首先,客户端在进行直接数据传输之前,必须连接到AdobeCirrus服务或者支持RTMFP协议的AdobeFlashMediaServer,以获得一个惟一的ID,作为客户端的惟一标识;之后,该客户端就可以通过UDP流音频,视频或者数据信息。任何连接到同一服务端的其它客户端,可以根据ID直接接收之前客户端的各种流信息,具体流程如图1所示。

1.2RTMFP优势

根据Adobe公司的官方解释,与RTMFP协议最为相似的是RTMP协议,因而本文通过与RTMP协议的对比来分析RTMFP协议的优点。RTMP协议全称是实时消息传送协议(RealTimeMessagingProtoco1),…个专门为传输视频、音频和数据而设计的TCP/IP协议,最早在FlashPlayer6中。RTMP协议可以在客户端与服务端保持一个持久的连接,并允许实时通信。协议定义了多个可以独立动作的通道,分别负责不同的功z月~l-,[。根据客户端与服务端的连接环境,RTMP协议将音视频等数据分割为一定大小的数据包,并在数据包加入头部信息,指定数据将被传送到的通道ID,如果有必要的话,还会注明数据生成的时间戳,然后进行传输,其工作原理如图2所示。图2RTMP协议工作图相对于基于TCP的RTMP协议,基于UDP的RTMFP协议具有以下优势:,①较低的延迟:UDP协议的实时性明显要优于TCP协议,在端对端通信中,更低的延迟就意味着更良好的用户体验;②P2P的通信:RTMP协议中,所有客户端通过FMS传送数据,而RTMFP协议则允许客户端之间进行直接的通信,从而进一步减少了通信延迟;③更低的带宽开销:显而易见,端对端的音视频流直接传输,对作为中央服务器的FMS的带宽占用会更少。另外在FlashPlayer10中,添加了对于Speex音频编码的支持,从而在同等通话质量的前提下可以实现更高的压缩率,使用更少的带宽,同时,Speex编码方案还有较强的容错性,在部分数据包丢失的情况下仍然可以良好运行,这一特性尤其适用于基于UDP协议的通信环境下;④迅速的连接恢复功能:基于RTMFP协议的网络连接,可以在断开后迅速地重建,具有更强大的环境适应性;⑤允许IP变动:基于RTMFP协议的网络会话允许客户端动态切换,同时保持会话处于激活状态不被打断。基于以上分析,可见RTMFP协议在实时媒体流传输方面有着巨大的优势,加之客户端为互联网上使用和安装率最高的FlashPlayer,其发展及应用前景更加让人充满期待。

1.3RTMFP协议的实现及技术支持

1.3.1组的概念及实现

在RTMFP协议里,每一个连接到服务器的客户端都被当作一个节点(peer),多个相互可见的节点在服务端组成一个组(group)。组内同时保存着各成员之间的路由信息,从而使组内任意两节点之间存在一条直接或间接的连接路径。而一个新的节点可以通过自定义代码处理或者FlashMediaServer自动处理的方式加入一个组。作为客户端的FlashPlayer,负责与组进行通信,组织和优化,以减少延迟,同时维护整个组的连接状态。‘组内成员可以实现如下功能:①组播通信流:一个或者多个发送者可以向组中全体成员发送组播流数据;②直接路由信息到某一节点:③通过对象复制技术,在组内共享对象。

1.3.2AnctionScript3.0中对RTMFP的支持

ActionScript是Flash中的脚本语言,为flash内容及应用程序提供强大的交互支持、优秀的用户体验以及数据处理等多种功能。ActionScript代码通常先被编译成字节码格式,然后嵌入到SWF文件中,由FlashPlayer中的ActionScript虚拟机(AVM)执行。ActionScript3.0在原有版本的基础上进行了全面升级,除了更加符合标准和规范之外,其使用的新型虚拟机AVM2提升了执行的整体效率。与ActionScript密不可分的还有Flex,一个企业级的富互联网应用(RIA)表示层解决方案。另外,在AS3.0中提供了诸多工具类支持基于RTMFP协议的应用的开发,例如NetConnection,NetStream,NetGroup,NetGrouplnfo,GroupSpecifier等类。

1.3.3服务端支持

在Adobe的实验网站上,研发代号为Cirrus的技术对使用RTMFP协议的开发应用提供了支持【4】。最新版的Cirrus2支持RTMFP组,覆盖网络,对象复制等特性。这-N务方便了用户开发基于RTMFP的应用,不过需要先向网站申请developerID才能进行测试开发。目前只支持用户开发实现P2P实时通讯的应用。除Cirrus之外,在最新版的FlashMediaServer中,已经提供了对RTMFP的支持,用户可以安装开发者版本进行相应的开发研究。

2应用探索:P2P视频通信应用

2.1应用系统设计

开发基于RTMFP协议的视频P2P通信应用,需要使用到服务器端和客户端的相关技术。该应用系统。2.1.1服务器端技术服务器方面,现在有两种方案可选,一足直接中请developerID使用Adobe官方提供的Cirrus服务,另一种是下载并安装最新的FlashMediaServer4151,然后创建RTMFP应用。本示例采用Cirrus服务。

2.1.2客户端技术

客户端方面由HTML嵌入SWF实现,要求至少使用FlashPlayerlO,本示例采用1O.3版本,住打开用页面时,会进行对FlashPIayer插件的检测,如果/f符合要求则会提示用户到相应网站升级。正确运行的客户端中,用户可以使用自己的用户名连接服务器,连接成功后,获得惟一的PeerID;一个成功连接的用户可以根据另一个用户注册名对相用户进行视频电话请求;收到请求的用户可以选择接受或者拒绝邀请:在建立连接以后,两用户除了进行音视频通话之外,还可以相互发送文本信息。

2.1.3客户端ID共享技术

客户端ID管理服务提供客户合法性验汪和PeerlD共享功能,通过该服务可以实现客户端lD的共享,并对末注册用户进行蔽。具体的实现方式可以采用ActionScript中的RemoteShare0biect或者其他的WebService实现。本例采用基于Python的cgi实现lD管理的webservice。

2.2应用系统实现

现将本应系统实现过程上的关键部分述如下。

2.2.1客户端ID管理服务

客户端ID管理服务采用Python实现,数据存储使用sqlite数据库。建立了一张用户注册表,存储所有活动用户的信息,表的字段内窬包括用户的用户名,用户的ID以及修改时间。该服务提供对用户ID信息的增、删、改、查操作,该服务有效地保护了系统用户的安全,凡是非本系统注册用户,均无法查询到个人的相关信息,进而也无法与本系统内用户进行通信。具体的实现代码中,通过判断请求中附带的参数,从而选择对数据库进行相应的操作,并将操作结果以XML的形式返回给调用者,如在进行用户查询时,会以如下形式返回结果,供客户端解析:<result><user>username<user><identity>id</identity><registered></registered></result>在本系统中,采用ActionScript编写IdManager类提供ID相关的增删改查操作。

2.2.2用户连接

具体的用户连接操作,通过ActionScript中的NetConnection类实现。NetConnection类建立服务器与应用程序之间的双向连接,建立了连接之后,可以NetStream对象通过该连接发送流,也可以通过NetConnection.call0来对服务端或客户端的应用进行调用l6J。NetConnection调用connect(url,parameters)方法连接服务器时,服务器会调用application.onConnect来处理该客户端的请求,如果返回true或者执行acceptConnection(client)~,lJ连接成功,返回false或者执行rejectConnection《~lient)则拒绝连接,如果返回null或者不返回则将进入未决状态。连接过程及可能的状态如图4所示:图4客户连接状态图连接成功后,NetConnection对象将获得nearlD和fID属性,其中nearlD为客户端的惟一标识,farlD为服务端相对应的应用实例的标识。在本系统中,用户进行功能连接之后,会调用IdManager中的register方法,将用户名及用户获得的nearID插入到lD管理服务中。

2.2.3邀请用户通话与结束通话

用户在成功连接服务器之后,输入欲联系的用户名称,点击Call按钮,服务器将根据所邀请的用户名到客户端ID管理服务去查询相应的用户lD,如果用。户ID不存在,则邀请失败;如果成功查询到用户ID,则触发looupSuccess事件,事件处理中使用netConnection.call0方法,尝试与相应的用户lD建立连接。如果对方拒绝邀请,则建立通信失败;如果对方接受邀请,则建立通信,开始流的发送与接收。在用户选择结束通话以后,先将用户名从客户端ID管理服务注销,然后分别将用于发送和接收的NetStream对象的close方法进行关闭,则两节点问的连接关闭,通话结束。

2.2.4流的发送与接收

对于视频流和音频流的处理,我们使用NetStream类,该类的实例可以看作是NetConnection对象实例中的一个通道,使用此通道可以通过publish方法流,也可以使用play订阅其他用户的流,该流数据的内容可以是实时的数据,也可以以先前录制好的数据文件。在建立基于RTMFP的P2P直连时,可以使用NetStream.DIRECTCONNECT1ONS参数传入NetStream的构造参数。同类节点的连接请求,会通过netstream.client.onPeerConnect方法进行处理,该方法返回true表示与节点建立连接,否则拒绝连接。具体到发送视频和音频流方面,发送者通过生成NetStream实例,使用其attach_Audio和atachVideo方法连接本地的视频和音频流,然后可以使用punish(“streamname”''''1的方法一个名为streamname包含了音频和视频的流。而在接收数据流的时候,接收者同时使用NetStream对象,传入主叫者ID作为构造参数,然后通过play(“streamname”o1方法播放由发相应ID发送者的相应名称流数据。最终将该NetStream对象通过Video对象的attachNetStream方法传入到一个Video实例里,就可以将接收到的音视频数据正常播放。如下图5:

2.2.5文本聊天

除了音视频流的处理,还可以进行消息发送。使用NetStream的send方法,将可以将消息发送给对方。例如,使用发送者的发送流实例,调用其send方法,传入接收方消息处理函数的名称,以及消息内容,如outgoingStream.send("onReceive”,name,text),那么接收方相应的onReceive函数就可以接收到name和text,进行显示和其他相应的处理了。这样就实现了P2P的文本聊天功能。

3结语

本文深入研究了Adobe最新的RTMFP协议的原理、内容,及特点,并对其在P2P视频通信方面的应用进行了初步的探索,最后结合示例对具体的应用过程进行了说明。研究表明,P2P与FlashPlayer的结合具有很强的应用前景和市场潜力,有着强大的竞争力。相信今后随着RTMFP协议的日渐成熟以及应用范围的不断扩大,对于P2P应用领域,特别是音视频等多媒体内容服务,将产生极大的推动作用在企业级应用中,基于Flash的P2P多媒体协作系统以其高效率、低成本且跨平台的特点,将对现有企业的工作方式产生巨大的影响。