- 浏览: 336710 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
wangjun0603:
学习了,写的真好!
native2ascii的简单应用 -
qq672076266:
...
native2ascii的简单应用 -
loyalboys:
...
native2ascii的简单应用 -
hanjinting1004:
...
Flex开发者需要知道的10件事 -
管好你家猫:
学了,文章,
native2ascii的简单应用
久仰“fms”大名很久了,但是一直无瑕了解它。今日一个录音器项目点燃了学习学习它的导火索
一些FMS的基本概念
一、什么是FMS
Macromedia于2002年年末发布了令人惊异的FMS的前一个版本Flash Communication Server MX服务器(简称FCS)。后来该名为Flash Media Server(简称FMS),使用FMS你只需要配备Web摄像头和麦克风,并加上十几行ActionScript脚本便可以完成一个电视会议系统。
FMS给全世界的人带来一种全新的通讯方式。有了FMS服务器,您可以参加实时网络会议;使用FMS的功能在工作中进行协作以及通过Internet或企业Intranet共享信息。
还不只是这一点,Flash Player的强大功能使得实时通讯和应用程序的集成由梦想变为现实,这正是未来网络软件发展的趋势,这都是Flash Player惹的“火”。
Flash Media Server(简称FMS)服务器是用于用户之间相互通讯的新平台,它集成了Flash多媒体交互的特性,又添加了实时音频、实时视频和实时数据流等新特色,使用该平台,你可以通过网络存储录制下来的音频、视频,也可以共享数据对象,并且可以将这些音频、视频和共享数据对象传递给多个客户端,实现实时同步共享。该平台集成了通讯功能和应用程序功能,它通过Flash Player(Flash Player 6或更高)在客户端提供音频共享、视频共享和共享数据流,为用户带来了更为丰富的体验。
二、FMS的传输协议
FMS使用实时通讯协议(RTMP),RTMP 是一种未加密的TCP/IP协议,专门设计用来高速传送音频、视频和数据信息。
使用FMS可以捕获(甚至录制)用户客户端的视频和音频流。信息通过FMS使用Real-Time Messaging Protocol (RTMP)协议被传递到客户端(用户计算机上的Flash Player)。当一个Flash影片应用程序要使用 FMS时,Flash Player就连接到服务器,这样就在客户端Flash Player和FMS之间提供了往复的源源不断的信息流,称为network stream(网络流)。其他的用户也可以同时连接到相同的FMS接收信息、更新数据以及音频和视频,这些都是“网络流”。
三、FMS的特色
FMS是一个完全基于软件环境的多媒体实时通讯环境,代表了当前实时通讯领域内的发展方向,并且,其自身也融合了大量的新特色,用于创建下一代通讯应用程序,这些新特色包括:
1、它提供了一个高效高性能的运行时,该“运行时”不但可以用于执行代码、处理数据内容,并且还可以进行通讯。
2、它将内容、通讯功能和应用程序界面集成进一个通用环境,这个通用环境就是Flash Player,通过强大且分布广泛的Flash Player,使得通过FMS进行通讯变得更加便利。
3、它为交互性提供了强大、高扩展性的对象模型。在为FMS开发Flash通讯应用程序的过程中,您就会慢慢认识到FMS无处不在的面向对象开发的特点。
4、它还建立了一个高效的组件架构模型,使用该组件架构模型可以创建高效的Flash通讯组件,而使用组件和其它的可重用模块,可以使你快速的开发基于FMS的通讯应用程序。
5、它还允许使用应用程序服务器提供的web服务和数据服务,从而可以和其它的应用服务器技术结合起来以创建功能更强大、更完整的富媒体应用程序。
6、它并且可以识别那些处于连接状态和处于未连接状态的客户端,以降低网络负载。
7、使用它,你可以将通讯应用程序客户端轻松的部署在多个平台和设备上,这多亏了Flash Player的广泛使用。
使用FMS和Flash创作环境,你可以非常轻松迅速的创建即时通讯应用程序,它可以让两个或多个的用户实现即时交流(交流可以使用文字、音频和视频)。例如,你可以使用FMS创建会议系统、在线社区、客户支持、销售支持、培训、远程展示或者即时消息系统。FMS是一个实时数据流平台,使用该平台加上客户端Flash Player的支持,可以将实时的数据流通过网络传递到Internet、PDA、iTV或者其它的设备上。
FMS的功能平台由两部分组成:服务器提供通讯方式;Flash影片应用程序(SWF文件)提供终端用户界面。你可以使用Flash创作工具作为开发环境创建Flash影片应用程序,该影片应用程序使用FMS提供的服务(也就是位于FMS上的Flash通讯应用程序)。有时你也可以编写服务端脚本为通讯应用程序添加新的功能,使用服务端脚本可以更灵活的控制共享状态信息,并且可以作为一个负载平衡器调节多用户之间的实时交互。
连接到FMS服务器(Flash/Flex两种实现)
通常做FMS都是和Flash或是Flex结合开发的,特别是在视频流这方面相当的突出,成功案例也不少,比如 http://www.tudou.com, www.ku6.com , http://www.15dv.com 等视频网站都与FMS挂钩。本人也是因为工作需要,趁工作之余来学习这门技术,想通过写博客的方式来巩固和分享学习,更希望爱好或是在从事这方面开发工作的朋友多多指正,交流。OK,本文就以连接FMS服务器作为写作话题,来看看我们学习FMS应该从什么地方出发,逐步的走上更高的台阶。
Adobe公司的产品Flash和Flex都可以结合FMS进行编程,本文示例比较简单,为了多凑几个字我打算通过Flash和Flex两种实现来介绍怎么来实现我们的第一个FMS程序“连接到FMS服务器”。
上山砍柴不忘磨柴刀,那么我们做技术开发肯定也离不开对开发环境,开发工具,开发语言的选择和准备。本文中我们的工具就是Flash CS 4,Flex Builder 3和FMS 3.0,所使用的开发语言是ActionScript 3.0,这里我不想浪费时间去介绍软件的安装,相信看这篇文章的你对于安装软件不会存在有什么难度,OK,下面看看怎么编码实现。
一 、FMS应该做些什么
本文中所使用到的FMS是非常简单的,主要就就是建立一个FMS应用,方法很简单。找到你安装FMS的目录你会发现里面有一个appliations的目录。对的,它就是管理FMS应用的目录,进入该目录在里面建立一个文件夹就OK,我建立的文件夹为"firstFMS"。
二、 Flash连接到FMS服务器
首先建立一个Flash文件(ActionScript 3.0)并将其保存在某个目录(自己决定吧)中。然后打开组件面板(可以按Ctrl+F7)从组件面板中拖拽一个button组件到刚建立好的Flash的舞台(也就是Flash显示东西的那一块地方),然后通过属性面板(可以按Ctrl+F3)将刚拖拽出的button取个名字(Flash中叫他为实例名,舞台中的每一个组件就是一相对应的对象的实例),我取的是 btnConnFMS 。
完成上面两步后回到舞台,鼠标在舞台中空白位置点击一下,然后同样打开属性面板,你会发现现在的属性面板和先前的有些不一样,在发布选项下找到“类”,这里我填写的为“ ConnFMS ”,表示我将要通过 ConnFMS.as这个类文件来对当前的这个Flash进行编码。
上面承诺了由 ConnFMS.as 来负责Flash的编码工作,那该怎么做呢?建立一个ActionScript类文件,保存在之前保存Flash文件的同一目录就OK,记住这个类文件一定是“ ConnFMS.as ”。下面是 ConnFMS.as 的完整代码:
package
{
import flash.net.NetConnection;
import flash.net.NetStream;
import flash.display.MovieClip;
import flash.net.Responder;
import flash.events.MouseEvent;
import flash.events.NetStatusEvent;
import flash.events.AsyncErrorEvent;
public class ConnFMS extends MovieClip
{
private var nc:NetConnection;
public function ConnFMS()
{
btnConnFMS.label="连接到FMS";
}
private function onClickHandler(evt:MouseEvent):void
{
trace("正在连接FMS服务器");
nc = new NetConnection();
nc.connect("rtmp://localhost/firstFMS");
nc.addEventListener(NetStatusEvent.NET_STATUS,onNetStatusHandler);
}
private function onNetStatusHandler(evt:NetStatusEvent):void
{
switch (evt.info.code)
{
case "NetConnection.Connect.Success":
trace("成功连接FMS服务器!");
break;
case "NetConnection.Connect.Rejected":
trace ("访问FMS服务器权限不足,连接被拒绝!");
break;
case "NetConnection.Connect.InvalidApp":
trace("指定的应用程序名称没有找到");
break;
case "NetConnection.Connect.Failed":
trace("连接失败!");
break;
case "NetConnection.Connect.AppShutDown":
trace("服务器端应用程序已经关闭(由于资源耗用过大等原因)或者服务器已经关闭!");
break;
case "NetConnection.Connect.Closed":
trace("与FMS的连接中断!");
break;
}
}
}
}
三、 Flex连接到FMS服务器
首先建立好Flex项目,默认会创建一个MXML文件,简单化实现这里就直接在这个MXML文件里来实现连接FMS。代码上和Flash连接到FMS几乎没有什么差别,主要就是学习NetConnection类来完成,如下代码定义:
2 private var netConn:NetConnection;
3 // FMS服务器的地址,使用rtmp协议
4 private var rtmpUrl:String = " rtmp://localhost/firstFMS " ;
NetConnection指示 Flash Player 是通过持久性的 RTMP 连接连接到服务器,实现这一步操作是通过NetConnection类的connect()方法来完成的。如下:
2 internal function on Init (): void
3 {
4 netConn = new NetConnection();
5 netConn.connect(rtmpUrl);
6 netConn.addEventListener(NetStatusEvent.NET_STATUS,onNetStatusHandler);
7 netConn.addEventListener(AsyncErrorEvent.ASYNC_ERROR,onAsyncErrorHandler);
8 }
connect()方法打开指定rtmp协议地址的FMS服务器的连接。一旦调用该方法NetConnection的对象就会捕捉到FMS返回的一个网络连接状态,通过NetStatusEvent事件监听可以得到返回状态的值(详细见本文前Flash部分), AsyncErrorEvent事件为异步引发异常(既本机异步代码)时调度。关于NetConnection的各种状态的详细请查看本文之前的Flash实例有详细的介绍。
由于实例比较简单,这里我就不在多说废话,下面是通过Flex实现连接到FMS的完整代码:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
<![CDATA[
import mx.controls.Alert;
//Flex与FMS建立连接的对象
private var nc:NetConnection;
//FMS服务器的地址,使用rtmp协议
private var rtmpUrl:String="rtmp://localhost/firstFMS";
//当Flex应用程序启动的时候就建立与FMS服务器的连接
internal function onClick():void
{
nc = new NetConnection();
nc.connect(rtmpUrl);
nc.addEventListener(NetStatusEvent.NET_STATUS,onNetStatusHandler); nc.addEventListener(AsyncErrorEvent.ASYNC_ERROR,onAsyncErrorHandler);
}
private function onClickHandler(evt:MouseEvent):void
{
trace("正在连接FMS服务器");
nc = new NetConnection();
nc.connect("rtmp://localhost/firstFMS");
nc.client=this;
nc.addEventListener(NetStatusEvent.NET_STATUS,onNetStatusHandler);
nc.addEventListener(AsyncErrorEvent.ASYNC_ERROR,onAsyncErrorHandler);
}
private function onNetStatusHandler(evt:NetStatusEvent):void
{
switch (evt.info.code)
{
case "NetConnection.Connect.Success":
trace("成功连接FMS服务器!");
break;
case "NetConnection.Connect.Rejected":
trace ("访问FMS服务器权限不足,连接被拒绝!");
break;
case "NetConnection.Connect.InvalidApp":
trace("指定的应用程序名称没有找到");
break;
case "NetConnection.Connect.Failed":
trace("连接失败!");
break;
case "NetConnection.Connect.AppShutDown":
trace("服务器端应用程序已经关闭(由于资源耗用过大等原因)或者服务器已经关闭!");
break;
case "NetConnection.Connect.Closed":
trace("与FMS的连接中断!");
break;
}
}
private function onAsyncErrorHandler(evt:AsyncErrorEvent):void
{}
]]>
</mx:Script>
<mx:Button x="135" y="89" label="Button" click="onClick()" fontSize="12" fontWeight="normal"/>
</mx:Application>
四、注意事项
通常新手在学习FMS的时候都会遇到一个问题,那就是通过NetConnection连接FMS服务器的时候,连接状态总是返回“NetConnection.Connect.Rejected”这样的状态结果,然后接着还有会有一个“NetConnection.Connect.Failed”状态,是什么原因造成这样的错误的呢?
第一个错误从本文实例中你可以得到,是访问FMS服务器的权限问题,如果FMS没有开设足够的访问权限,通常在访问FMS的客户端都会接受到这样一个异常状态。第二个错误又是怎么产生的呢?这还是又访问权限引起,当客户端没有主够的权限访问FMS服务器,就将返回“NetConnection.Connect.Rejected”状态并自动断开与FMS服务器的连接,“NetConnection.Connect.Failed”状态本身是由于连接服务器失败产生,而这里是因为权限问题而引发的。
前几天很多朋友就在问我这个问题,怎么来解决这个问题呢?如果你是一个技术专研者,如果又你赶兴趣的技术在你面前,你首先会做什么?查看官方提供的文档?实例代码?还是什么? OK,其实要解决这个问题很简单,在FMS服务器安装好后的目录下有一个"applications"目录,里面有两个FMS默认安装的FMS服务器(live和vod),随便打开一个默认安装然后打开里面的"readme.txt"文件会看到下面的字样:
================================================================
Deploying an unsigned vod service
================================================================
1. Create a new folder in the {FMS-Install-Dir}/applications folder.
2. If you are replacing the default Adobe signed live service, back up
the following files:
* main.far
* Application.xml
* allowedHTMLDomains.txt
* allowedSWFDomains.txt
3. Copy files from {FMS-Install-Dir}/samples/applications/vod to the directory you created in step 1.
现在你知道怎么解决上面出现的问题了吗??将这main.far、Application.xml、allowedHTMLDomains.txt和allowedSWFDomains.txt这四个文件复制到你创建的FMS服务器目录下就解决了,运行上面的实例程序,然后可以通过FMS的管理控制台查看到详细的连接信息。
我通常是使用的FMS安装目录下的fms_adminConsole.swf 来查看连接信息,也可以使用FMSfms_adminConsole.htm查看。
服务器连接设置
application.onConnect=function(client,permission){
trace(permission);
if(permission == "admin"){
//服务器同意连接
this.acceptConnection(client)
}else{
//服务器拒绝连接
//this.rejectConnection(client);
application.rejectConnection(client, {msg:"server refuse "+permission+" connecting !"});
}
}
myNetConnection.connect(serverApp, "admin");
switch(evt.info.code)
{
case "NetConnection.Connect.Success":
trace("成功连接FMS服务器!");
break;
case "NetConnection.Connect.Rejected":
/* 注意这里,服务器拒绝你的情况,如果遭到拒绝,将会调用两次mync.onStatus,
第一次"NetConnection.Connect.Rejected"第2次"NetConnection.Connect.Closed" */
trace("遭到服务器拒绝");
trace("服务器返回信息:" + evt.info.application.msg);
break;
case "NetConnection.Connect.InvalidApp":
trace("指定的应用程序名称没有找到");
break;
case "NetConnection.Connect.Failed":
trace("连接失败!");
break;
case "NetConnection.Connect.AppShutDown":
trace("服务器端应用程序已经关闭(由于资源耗用过大等原因)或者服务器已经关闭!");
break;
case "NetConnection.Connect.Closed":
trace("与FMS的连接中断!");
break;
}
(thanks : http://www.51as.com/fms/fms3jiaochen.html )
相关资料一大把:
Flash Media Server 入门教程
http://www.nshen.net/blog/article.asp?id=509
Flash Media Server 起步(2)连接
http://www.nshen.net/blog/article.asp?id=394
Flash Media Server 起步(3)远程共享
http://www.nshen.net/blog/article.asp?id=395
Flash Media Server 起步(4)视频,流。。。
http://www.nshen.net/blog/article.asp?id=397
Flash Media Server 起步(5)连接的一些细节
http://www.nshen.net/blog/article.asp?id=401
Flash Media Server 起步(6)写个简单的聊天室
http://www.nshen.net/blog/article.asp?id=403
Flash Media Server 起步(9)在线列表。。
http://www.nshen.net/blog/article.asp?id=409
Flash Media Server 起步(10)中文编码问题
http://www.nshen.net/blog/article.asp?id=414
Flash Media Server 起步(11)判断影片结束
http://www.nshen.net/blog/article.asp?id=415
http://www.cnblogs.com/aierong/archive/2009/01/09/flex_fms_chat.html
http://www.51as.com/fms/fms-1.html
发表评论
-
应用避免访问浏览器缓存
2011-05-12 17:33 1386项目经常遇到这么个问题:程序做了改动之后,由于浏览 ... -
flex皮肤资源
2011-05-05 15:28 1299如果要找flex皮肤,这里的皮肤真是多。http: ... -
flex利用asdoc生成doc和制作chm
2011-04-02 17:33 1629How to set up ASDoc in Flex Bui ... -
restrict的应用实例
2011-04-02 11:54 11321. 限制某个字符的输入,用符号 ^ 跟上要限制的 ... -
flex中as、instanceof、is、 typeof用法
2011-03-24 09:48 4556“as” 我主要用它做类型转化 假设有一个类叫做 ... -
在Chart上画平均线的三种方法
2011-02-16 14:52 1425在Chart上画平均线的三种方法 ... -
Flex Frameworks
2010-11-12 15:32 1000Some say that if a t ... -
flex4国际化
2010-11-11 16:56 2124国际化变得如此简单 <?xml versi ... -
使用ToolTipManager自定义tooltip
2010-11-05 14:52 2621直接贴代码,一看就懂。 <?xml version=& ... -
flex 校验
2010-11-05 14:41 1035①flex中的校验可以使用mx.validator ... -
Flex中的fx、mx和s命名空间
2010-11-05 13:12 3390Flex 4带给我们的 ... -
socket中writeUTF和writeUTFBytes的区别
2010-11-03 10:25 2797Q:用writeUTF发送数据的时候,后台多 ... -
修改flex默认loading
2010-10-18 13:51 2525一: SWF Flex 2 PreloaderSWF ... -
AIR文件操作
2010-09-26 10:01 2928AIR文件操作(一):AIR文件基础 AI ... -
ActionScript 3.0 Socket编程
2010-09-17 17:25 1171在使用ActionScript3.0进行编程的时候需要注 ... -
as 对象深度拷贝
2010-08-20 10:32 992这是一篇关于as3中对象深度拷贝的问题今天自己总结下,便 ... -
Create a FlexUnit TestCase
2010-04-29 20:34 1045Problem How to create a Fle ... -
as3corelib
2010-04-29 20:10 1487google code :http://code. ... -
FusionCharts
2010-04-28 19:26 2370无意中接触到这个产品FusionCharts,3D ... -
flex datagrid自动换行
2010-04-19 17:10 2887以为datagrid的自动换行有多复杂,其实 ...
相关推荐
【标题】"FMS.rar_flex_flex FMS_fms_site:www.pudn.com" 涉及的核心技术是Adobe Flash Media Server (FMS),它是一个强大的实时流媒体服务器平台,用于发布音视频内容、实时通信以及互动应用程序。这里与Flex一起...
Flex FMS(Flash Media Server)是Adobe公司推出的一款强大的流媒体服务器软件,它允许开发者创建交互式的、实时的视频和音频应用。在这个“Flex FMS 发送和接收视频”的实例中,我们将深入探讨如何利用Flex技术和...
标题"Fms.rar_flex_flex and fms_fms_fms rtmp_fms flex"和描述中的关键词揭示了这个压缩包包含的是与Adobe Flex和Flash Media Server(FMS)相关的项目资源,主要用于创建一个实时通信应用,例如聊天室。Flex是一种...
Flex+FMS写的视频聊天,在本机亲测通过。但唯一不足得是在别的机子上连接不成功。我也不知道为什么。望有才之士能完善。huzhaohui1992@qq.com 如能完善,请给我邮箱一份,在下感激不尽。
3. **连接FMS**:在Flex应用中,使用NetConnection对象建立与FMS服务器的连接。通过调用`NetConnection.connect()`方法,指定FMS服务器的URL。 4. **发布流**:一旦连接成功,你可以创建一个NetStream对象,使用`...
Flex+FMS实现视频直播源码是一种基于Adobe Flex和Flash Media Server (FMS)技术的视频直播解决方案。这个项目提供了一个简单示例,演示了如何利用Flex进行摄像头和音频的捕获与录制,以及如何将这些内容实时推送到...
Flex和FMS3是构建实时互动应用程序的强大工具,尤其适合创建在线聊天室这样的实时通信平台。这个源码和文档集合提供了详细的步骤和技术说明,帮助开发者理解如何利用这些技术实现一个功能完备的聊天室。 Flex是一种...
【Flex 连接到 FMS详解】 Flex 是一种用于构建富互联网应用(RIA)的开源框架,它使用ActionScript编程语言,结合MXML标记语言,能够创建动态、交互性强的Web应用。FMS(Flash Media Server)是Adobe提供的多媒体...
FMS3特别适用于开发基于Flash和Flex的应用,因为这两个技术平台可以无缝集成FMS,创建出具有高质量音视频效果的实时通信应用。 **实时视频聊天的技术原理** 1. **RTMP协议**:RTMP是实时消息协议,用于在客户端(如...
在本文中,我们将深入探讨“FMS 4.5 + Flex mobile 之 Hello World 工程源代码”这一主题,这是针对Adobe Flash Media Server (FMS) 4.5 和 Flex移动开发的一个基础教程项目。这个项目包含了FMS服务器端的ASC脚本...
【标题】中的“通过FMS实现时时视频聊天(Flash|Flex)源码”是指使用Adobe的Flash Media Server (FMS)技术,结合Flash和Flex这两种编程语言,开发出一款能够实现实时视频通信的应用程序。这个标题暗示了我们将在...
首先下载fms服务器安装好,并在fms安装目录的applications目录下新建一个test_video文件夹目录,一定要与flext程序中rtmp://127.0.0.1/test_video的test_video要一致,fms服务器启动后,执行flex程序,即可实现
在本文中,我们将深入探讨如何使用FLEX技术实现视频摄像头录制,并将录制的视频上传到FMS(Flash Media Server)服务器。首先,我们先来理解一下FLEX是什么以及它的核心功能。 FLEX全称为Flex Framework,是Adobe...
Flex Media Server (FMS) 是Adobe公司开发的一款流媒体服务器软件,主要负责处理和分发实时音频、视频内容。FMS中文帮助文档是为开发者提供的一份详细指南,旨在帮助他们理解和利用Flex与FMS之间的交互,从而实现...
本教程将聚焦于使用Adobe Flex和Flash Media Server 3 (FMS3)来实现这样的系统。Flex是基于ActionScript 3的开放源码框架,用于构建富互联网应用程序(RIA),而FMS3则是一个强大的服务器平台,专门用于实时流媒体和...
标题中的“免费多人视频会议功能加强版本(Fms3和Flex开发(附源码))”指的是一个基于Fms3(Flash Media Server 3)和Flex技术开发的多人视频会议系统,该系统不仅提供基本的视频交流功能,还进行了性能优化和功能增强...
在开发使用Flex与FMS交互的应用时,可能会遇到这些常见问题。 1. **访问FMS连接失败(NetConnection.Connect.Failed)** 当遇到此错误时,可能是因为缺少必要的文件或配置不正确。解决方法是检查FMS安装目录下的`...
1. Flex SDK:使用Flex SDK可以创建与FMS3交互的Flash应用程序,实现播放器、直播控制等功能。 2. ActionScript 3:FMS3与ActionScript 3紧密集成,开发者可以通过AS3代码控制服务器行为。 3. API接口:FMS3提供了...
Flex视频会议系统是一种基于Adobe Flex技术构建的在线交互式沟通平台,主要利用FMS(Flash Media Server)服务器作为后台支持,提供高效、稳定的音视频通信服务。Flex是ActionScript 3.0的一个开发框架,它使得...