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

简介:
FMS是个很牛X的东西,到底有多牛X我不想在这里多说,有兴趣的朋友可以baidu一把了解一下,如果实在是不想动手,那你就点下面的连接吧,我搜索了点资料简单的总结了一下。
    你可以点击这里了解一些关于FMS的基本知识:  了解一些FMS的基本概念
     通常做FMS都是和Flash或是Flex结合开发的,特别是在视频流这方面相当的突出,成功案例也不少,比如 [url]http://www.tudou.com[/url],  [url]www.ku6.com[/url] ,  [url]http://www.15dv.com[/url] 等视频网站都与FMS挂钩。本人也是因为工作需要,趁工作之余来学习这门技术,想通过写博客的方式来巩固和分享学习,更希望爱好或是在从事这方面开发工作的朋友多多指正,交流。OK,本文就以连接FMS服务器作为写作话题,来看看我们学习FMS应该从什么地方出发,逐步的走上更高的台阶。
     Adobe公司的产品Flash和Flex都可以结合FMS进行编程,本文示例比较简单,为了多凑几个字我打算通过Flash和Flex两种实现来介绍怎么来实现我们的第一个FMS程序“连接到FMS服务器”。
     上山砍柴不忘磨柴刀,那么我们做技术开发肯定也离不开对开发环境,开发工具,开发语言的选择和准备。本文中我们的工具就是Flash CS 4,Flex Builder 3和FMS 3.0,所使用的开发语言是Action. 3.0,这里我不想浪费时间去介绍软件的安装,相信看这篇文章的你对于安装软件不会存在有什么难度,OK,下面看看怎么编码实现。

一 、FMS应该做些什么 
     本文中所使用到的FMS是非常简单的,主要就就是建立一个FMS应用,方法很简单。找到你安装FMS的目录你会发现里面有一个appliations的目录。对的,它就是管理FMS应用的目录,进入该目录在里面建立一个文件夹就OK,我建立的文件夹为"firstFMS"。
 
二、Flash连接到FMS服务器
     首先建立一个Flash文件(Action. 3.0)并将其保存在某个目录(自己决定吧)中。然后打开组件面板(可以按Ctrl+F7)从组件面板中拖拽一个button组件到刚建立好的Flash的舞台(也就是Flash显示东西的那一块地方),然后通过属性面板(可以按Ctrl+F3)将刚拖拽出的button取个名字(Flash中叫他为实例名,舞台中的每一个组件就是一相对应的对象的实例),我取的是 btnConnFMS
     完成上面两步后回到舞台,鼠标在舞台中空白位置点击一下,然后同样打开属性面板,你会发现现在的属性面板和先前的有些不一样,在发布选项下找到“类”,这里我填写的为“ ConnFMS”,表示我将要通过 ConnFMS.as这个类文件来对当前的这个Flash进行编码。
     上面承诺了由 ConnFMS.as来负责Flash的编码工作,那该怎么做呢?建立一个Action.类文件,保存在之前保存Flash文件的同一目录就OK,记住这个类文件一定是“ ConnFMS.as”。下面是 ConnFMS.as的完整代码:
 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类来完成,如下代码定义:
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()方法来完成的。如下:
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的完整代码:
 1 <? xml version = " 1.0 "  encoding = " utf-8 " ?>
 2 < mx:Application xmlns:mx = " [url]http://www.adobe.com/2006/mxml[/url] "  layout = " absolute " >
 3      < mx:. >
 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:. >
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版本安装选择错误引起,如果安装的是Flash media streaming server就会出现类似上面的问题,建议安装Flash media interactive server版本。
        运行上面的实例程序,然后可以通过FMS的管理控制台查看到详细的连接信息。我通常是使用的FMS安装目录下的fms_adminConsole.swf 来查看连接信息,也可以使用FMSfms_adminConsole.htm查看。




本文转自 beniao 51CTO博客,原文链接:http://blog.51cto.com/beniao/137935,如需转载请自行联系原作者

目录
相关文章
|
1月前
|
IDE 网络安全 开发工具
IDE之vscode:连接远程服务器代码(亲测OK),与pycharm链接服务器做对比(亲自使用过了),打开文件夹后切换文件夹。
本文介绍了如何使用VS Code通过Remote-SSH插件连接远程服务器进行代码开发,并与PyCharm进行了对比。作者认为VS Code在连接和配置多个服务器时更为简单,推荐使用VS Code。文章详细说明了VS Code的安装、远程插件安装、SSH配置文件编写、服务器连接以及如何在连接后切换文件夹。此外,还提供了使用密钥进行免密登录的方法和解决权限问题的步骤。
382 0
IDE之vscode:连接远程服务器代码(亲测OK),与pycharm链接服务器做对比(亲自使用过了),打开文件夹后切换文件夹。
|
1月前
|
运维 Java Linux
【运维基础知识】Linux服务器下手写启停Java程序脚本start.sh stop.sh及详细说明
### 启动Java程序脚本 `start.sh` 此脚本用于启动一个Java程序,设置JVM字符集为GBK,最大堆内存为3000M,并将程序的日志输出到`output.log`文件中,同时在后台运行。 ### 停止Java程序脚本 `stop.sh` 此脚本用于停止指定名称的服务(如`QuoteServer`),通过查找并终止该服务的Java进程,输出操作结果以确认是否成功。
35 1
|
1月前
|
IDE 网络安全 开发工具
IDE之pycharm:专业版本连接远程服务器代码,并配置远程python环境解释器(亲测OK)。
本文介绍了如何在PyCharm专业版中连接远程服务器并配置远程Python环境解释器,以便在服务器上运行代码。
293 0
IDE之pycharm:专业版本连接远程服务器代码,并配置远程python环境解释器(亲测OK)。
|
1月前
|
存储 网络协议 Java
【网络】UDP回显服务器和客户端的构造,以及连接流程
【网络】UDP回显服务器和客户端的构造,以及连接流程
52 2
|
1月前
|
Apache 数据中心 Windows
将网站迁移到阿里云Windows系统云服务器,访问该站点提示连接被拒绝,如何处理?
将网站迁移到阿里云Windows系统云服务器,访问该站点提示连接被拒绝,如何处理?
|
1月前
|
弹性计算 安全 Windows
通过远程桌面连接Windows服务器提示“由于协议错误,会话将被中断,请重新连接到远程计算机”错误怎么办?
通过远程桌面连接Windows服务器提示“由于协议错误,会话将被中断,请重新连接到远程计算机”错误怎么办?
|
1月前
|
SQL 数据库
SQL-serve数据库不能连接本地服务器的解决方案
SQL-serve数据库不能连接本地服务器的解决方案
171 0
|
6天前
|
机器学习/深度学习 人工智能 弹性计算
什么是阿里云GPU云服务器?GPU服务器优势、使用和租赁费用整理
阿里云GPU云服务器提供强大的GPU算力,适用于深度学习、科学计算、图形可视化和视频处理等多种场景。作为亚太领先的云服务提供商,阿里云的GPU云服务器具备灵活的资源配置、高安全性和易用性,支持多种计费模式,帮助企业高效应对计算密集型任务。
|
8天前
|
存储 分布式计算 固态存储
阿里云2核16G、4核32G、8核64G配置云服务器租用收费标准与活动价格参考
2核16G、8核64G、4核32G配置的云服务器处理器与内存比为1:8,这种配比的云服务器一般适用于数据分析与挖掘,Hadoop、Spark集群和数据库,缓存等内存密集型场景,因此,多为企业级用户选择。目前2核16G配置按量收费最低收费标准为0.54元/小时,按月租用标准收费标准为260.44元/1个月。4核32G配置的阿里云服务器按量收费标准最低为1.08元/小时,按月租用标准收费标准为520.88元/1个月。8核64G配置的阿里云服务器按量收费标准最低为2.17元/小时,按月租用标准收费标准为1041.77元/1个月。本文介绍这些配置的最新租用收费标准与活动价格情况,以供参考。
|
6天前
|
机器学习/深度学习 人工智能 弹性计算
阿里云GPU服务器全解析_GPU价格收费标准_GPU优势和使用说明
阿里云GPU云服务器提供强大的GPU算力,适用于深度学习、科学计算、图形可视化和视频处理等场景。作为亚太领先的云服务商,阿里云GPU云服务器具备高灵活性、易用性、容灾备份、安全性和成本效益,支持多种实例规格,满足不同业务需求。

热门文章

最新文章