`
freeroy
  • 浏览: 74552 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

FMS3系列(一):第一个FMS程序,连接到FMS服务器(Flash/Flex两种实现)[转]

阅读更多

     FMS是个很牛X的东西,到底有多牛X我不想在这里多说,有兴趣的朋友可以baidu一把了解一下,如果实在是不想动手,那你就点下面的连接吧,我搜索了点资料简单的总结了一下。

    你可以点击这里了解一些关于FMS的基本知识: 了解一些FMS的基本概念

     通常做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的完整代码:

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> 1 package
 2 {
 3     import flash.net.NetConnection;
 4     import flash.net.NetStream;
 5     import flash.display.MovieClip;
 6     import flash.net.Responder;
 7     import flash.events.MouseEvent;
 8     import flash.events.NetStatusEvent;
 9     import flash.events.AsyncErrorEvent;
10     
11     public class ConnFMS extends MovieClip
12     {
13         private var nc:NetConnection;
14         
15         public function ConnFMS()
16         {
17             btnConnFMS.label="连接到FMS";
18         }
19         
20         private function onClickHandler(evt:MouseEvent):void
21         {
22             trace("正在连接FMS服务器");
23             nc = new NetConnection();
24             nc.connect("rtmp://localhost/firstFMS");
25             nc.addEventListener(NetStatusEvent.NET_STATUS,onNetStatusHandler);
26         }
27         
28         private function onNetStatusHandler(evt:NetStatusEvent):void
29         {
30             switch (evt.info.code)
31             {
32                 case "NetConnection.Connect.Success":
33                     trace("成功连接FMS服务器!");
34                     break;
35                 case "NetConnection.Connect.Rejected":
36                     trace ("访问FMS服务器权限不足,连接被拒绝!");
37                     break;
38                 case "NetConnection.Connect.InvalidApp":
39                     trace("指定的应用程序名称没有找到");
40                     break;
41                 case "NetConnection.Connect.Failed":
42                     trace("连接失败!");
43                     break;
44                 case "NetConnection.Connect.AppShutDown":
45                     trace("服务器端应用程序已经关闭(由于资源耗用过大等原因)或者服务器已经关闭!");
46                     break;
47                 case "NetConnection.Connect.Closed":
48                     trace("与FMS的连接中断!");
49                     break;
50             }
51         }
52     }
53 }

 

 三、Flex连接到FMS服务器

     首先建立好Flex项目,默认会创建一个MXML文件,简单化实现这里就直接在这个MXML文件里来实现连接FMS。代码上和Flash连接到FMS几乎没有什么差别,主要就是学习NetConnection类来完成,如下代码定义:

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->1 //Flex与FMS建立连接的对象
2 private var netConn:NetConnection;
3 //FMS服务器的地址,使用rtmp协议
4 private var rtmpUrl:String="rtmp://localhost/firstFMS"; 

 

   NetConnection指示 Flash Player 是通过持久性的 RTMP 连接连接到服务器,实现这一步操作是通过NetConnection类的connect()方法来完成的。如下:

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->1 //当Flex应用程序启动的时候就建立与FMS服务器的连接
2 internal function onInit():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的完整代码:

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> 1<?xml version="1.0" encoding="utf-8"?>
 2<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
 3    <mx:Script>
 4        <![CDATA[
 5            import mx.controls.Alert;
 6            //Flex与FMS建立连接的对象
 7            private var nc:NetConnection;
 8            //FMS服务器的地址,使用rtmp协议
 9            private var rtmpUrl:String="rtmp://localhost/firstFMS";
10            
11            //当Flex应用程序启动的时候就建立与FMS服务器的连接
12            internal function onClick():void
13            {
14                nc = new NetConnection();
15                nc.connect(rtmpUrl);
16                nc.addEventListener(NetStatusEvent.NET_STATUS,onNetStatusHandler);
17                nc.addEventListener(AsyncErrorEvent.ASYNC_ERROR,onAsyncErrorHandler);
18            }

19            
20            private function onClickHandler(evt:MouseEvent):void
21            {
22                trace("正在连接FMS服务器");
23                nc = new NetConnection();
24                nc.connect("rtmp://localhost/firstFMS");
25                nc.client=this;
26                nc.addEventListener(NetStatusEvent.NET_STATUS,onNetStatusHandler);
27                nc.addEventListener(AsyncErrorEvent.ASYNC_ERROR,onAsyncErrorHandler);
28            }

29        
30            private function onNetStatusHandler(evt:NetStatusEvent):void
31            {
32                switch (evt.info.code)
33                {
34                    case "NetConnection.Connect.Success":
35                        trace("成功连接FMS服务器!");
36                        break;
37                    case "NetConnection.Connect.Rejected":
38                        trace ("访问FMS服务器权限不足,连接被拒绝!");
39                        break;
40                    case "NetConnection.Connect.InvalidApp":
41                        trace("指定的应用程序名称没有找到");
42                        break;
43                    case "NetConnection.Connect.Failed":
44                        trace("连接失败!");
45                        break;
46                    case "NetConnection.Connect.AppShutDown":
47                        trace("服务器端应用程序已经关闭(由于资源耗用过大等原因)或者服务器已经关闭!");
48                        break;
49                    case "NetConnection.Connect.Closed":
50                        trace("与FMS的连接中断!");
51                        break;
52                }

53            }

54            
55            private function onAsyncErrorHandler(evt:AsyncErrorEvent):void
56            {}
57    ]]>
58    </mx:Script>
59    <mx:Button x="135" y="89" label="Button" click="onClick()" fontSize="12" fontWeight="normal"/>
60</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查看。

分享到:
评论

相关推荐

    FMS3系列(五):通过FMS实现时时视频聊天(Flash|Flex)

    在本篇博文中,我们将深入探讨“FMS3系列”的第五部分,主要关注如何通过Adobe Flash Media Server (FMS) 3实现实时视频聊天功能。这个话题对于开发交互性强、实时性高的网络应用来说至关重要,特别是对于那些需要...

    FMS.rar_flex_flex FMS_fms_site:www.pudn.com

    【标题】"FMS.rar_flex_flex FMS_fms_site:www.pudn.com" 涉及的核心技术是Adobe Flash Media Server (FMS),它是一个强大的实时流媒体服务器平台,用于发布音视频内容、实时通信以及互动应用程序。这里与Flex一起...

    flex连接到FMS详解

    【Flex 连接到 FMS详解】 Flex 是一种用于构建富互联网应用(RIA)的开源框架,它使用ActionScript编程语言,结合MXML标记语言,能够创建动态、交互性强的Web应用。FMS(Flash Media Server)是Adobe提供的多媒体...

    通过FMS实现时时视频聊天(Flash|Flex)源码

    【标题】中的“通过FMS实现时时视频聊天(Flash|Flex)源码”是指使用Adobe的Flash Media Server (FMS)技术,结合Flash和Flex这两种编程语言,开发出一款能够实现实时视频通信的应用程序。这个标题暗示了我们将在...

    流媒体服务器---fms3教程

    1. Flex SDK:使用Flex SDK可以创建与FMS3交互的Flash应用程序,实现播放器、直播控制等功能。 2. ActionScript 3:FMS3与ActionScript 3紧密集成,开发者可以通过AS3代码控制服务器行为。 3. API接口:FMS3提供了...

    fms.rar_flex_flex and fms_fms_fms rtmp_fms flex

    标题"Fms.rar_flex_flex and fms_fms_fms rtmp_fms flex"和描述中的关键词揭示了这个压缩包包含的是与Adobe Flex和Flash Media Server(FMS)相关的项目资源,主要用于创建一个实时通信应用,例如聊天室。Flex是一种...

    flex+fms实现视频直播源码

    Flex+FMS实现视频直播源码是一种基于Adobe Flex和Flash Media Server (FMS)技术的视频直播解决方案。这个项目提供了一个简单示例,演示了如何利用Flex进行摄像头和音频的捕获与录制,以及如何将这些内容实时推送到...

    FLEX视频摄像头录制上传到服务器及FMS服务器的安装与配置

    在本文中,我们将深入探讨如何使用FLEX技术实现视频摄像头录制,并将录制的视频上传到FMS(Flash Media Server)服务器。首先,我们先来理解一下FLEX是什么以及它的核心功能。 FLEX全称为Flex Framework,是Adobe...

    fms3视频教程.PDF

    - **FMS通常与Flash或Flex结合使用**:利用这两种工具可以轻松创建基于Web的实时多媒体应用程序,尤其在视频流方面表现突出。 - **案例分析**:土豆网、酷六网等视频网站均采用了FMS技术,这些网站能够流畅地提供...

    Flex和Fms3打造在线聊天室 源码和文档

    2. NetConnection的使用:展示了如何创建NetConnection对象,连接到FMS3服务器,并实现消息的发送和接收。 3. SharedObject的运用:可能讲解了如何使用SharedObject来存储和共享聊天记录,以及如何在用户之间同步...

    flash+FMS斗地主源程序

    【标题】"flash+FMS斗地主源程序"是一个基于Adobe Flash技术和FMS(Flash Media Server)开发的在线多人斗地主游戏项目。这个源程序包括了游戏大厅、游戏房间和聊天功能,允许用户在每个房间内进行多达50桌的游戏...

    adobe FMS入门学习系列教程

    在本教程中,我们将探讨如何开始学习FMS,特别是如何建立一个简单的连接到FMS服务器的程序。 首先,我们需要了解FMS的基本操作。在FMS服务器中,应用程序是通过`applications`目录进行管理的。你可以在这个目录下...

    fms.rar_flex_fms_流媒体

    在IT行业中,流媒体技术是实现在线视频和音频传输的关键技术之一,而Adobe的Flash Media Server(FMS)就是一种广泛使用的流媒体服务器解决方案。本文将深入探讨如何利用FMS作为流媒体服务器,进行实时通信视频聊天...

    fms3中文文档

    - **体系结构概览**:FMS 基于 Client-Server 架构,客户端通过实时消息协议 (RTMP) 连接到服务器,实现双向数据交换。 - **客户端组件**: - **用户界面**:由 Adobe Flash 或 Flex 开发的 SWF 文件构成,负责...

    flash网游基础通讯(FMS,JAVA)

    1. 初始化连接:Flash客户端通过创建NetConnection对象并调用connect方法连接到FMS服务器。 2. 数据传输:通过NetStream对象进行数据流的发送和接收,例如播放视频或音频,或者传递游戏状态数据。 3. 事件监听:...

    Flex +FMS实现视频聊天

    Flex+FMS写的视频聊天,在本机亲测通过。但唯一不足得是在别的机子上连接不成功。我也不知道为什么。望有才之士能完善。huzhaohui1992@qq.com 如能完善,请给我邮箱一份,在下感激不尽。

    FMS 4.5 + Flex mobile 之 Hello World 工程源代码

    在本文中,我们将深入探讨“FMS 4.5 + Flex mobile 之 Hello World 工程源代码”这一主题,这是针对Adobe Flash Media Server (FMS) 4.5 和 Flex移动开发的一个基础教程项目。这个项目包含了FMS服务器端的ASC脚本...

    FMS连接问题解决方案--完结版

    FMS是一种强大的流媒体服务器,用于实时流传输、录制、播放和交互式应用程序。在开发使用Flex与FMS交互的应用时,可能会遇到这些常见问题。 1. **访问FMS连接失败(NetConnection.Connect.Failed)** 当遇到此错误...

Global site tag (gtag.js) - Google Analytics