Flex FMS使用(中)
Flex FMS应用(中)1// Flex与FMS建立连接的对象 2privatevar netConn:NetConnection3// FMS服务器的地址,
Flex FMS应用(中)
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 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>