三、 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 " ;
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 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 }
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>