FMS第二课:播放录制的媒体文件

通过上一节课,我们已经大概了解了FMS的功能以及一个简单的用法。这节课呢!再来看看FMS的另一个入门级的例子。
这个例子就展示了如何播放FMS上的视频文件。
再来想想上节课的比喻:一根管子,一端是FMS,另一端是客户端,现在我们就要在这根管子里建立一个流,这个流运载的是你要播放的流媒体文件数据,这股数据流从FMS流到客户端。我们的终极目标就是让这个流在客户端变出活生生的视频来。
先看看一下整体的代码:
Code
好,那就开始吧!
准备:在FMS安装目录的applications下新建一个文件夹,名字是playstreams,然后在这个文件夹里放一个文件夹名字叫streams,然后在这个文件里再建一个文件夹名字叫_definst_,在这个个_definst_文件夹中放入一个sample.flv文件。为什么这么建?有些麻烦,但是streams/_definst_是视频文件的默认存放位置,有客户端建立流的请求时FMS会自动到这里来找资源。当然,这个默认位置可以修改的。
第一步:建立FMS和客户端之间那个的管子。
1 nc=new NetConnection();
nc.connect("rtmp://localhost/playstreams");
2 nc.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus); 
这个NetConnect(本例中实例化为nc)呢就是FMS与客户端之间的那根管道,FMS与客户端的所有数据都是通过它来传递,在以后建立流也要靠这根管子。在你确定它成功连接之后才能建立流或者其他对象。因为这跟管道负责FMS与客户端之间的连接,及其重要,也很最弱,很容易受到网络环境的影响,所以必须时时关注它的状态,所以我们给它添加了监听。每当有NetStatusEvent.NET_STATUS事件发生就会返回相应的信息。下面我们看看如何处理这个事件,如何处理的明白了,也就懂得如何掌握NetConnection的状态了。
第二步:处理连接状态
private function statusHandler(event:NetStatusEvent):void{
    trace(event.info.code);
        if(event .info.code=="NetConnection.Connect.Success"){
        //建立流
            }
}
NetConnection.Connect.Success表示连接成功,在这种状况下才能继续向下处理。
除了成功状态之外还有什么状态呢?
1,NetConnection.Connect.Rejected 连接被拒绝
2,NetConnection.Connect.Failed 连接失败
3,NetConnection.Connect.AppShutDown 应用关闭了
4,NetConnection.Connect.Closed 连接关闭
不同的状况有不同的处理,处理方式可以参考下面的代码
Code
第三步:建立流
管道已经成功建立起来了,下面就应该建立流。这个流对应着NetStream类。下面代码展示了如何建立流。
ns=new NetStream(nc);                   
ns.addEventListener(NetStatusEvent.NET_STATUS,statusHandler);
ns.client=this;
这个NetStream类的实例也加上了监听。这个NetStatusEvent事件不仅能够返回连接状态的信息,也能够返回流的状态的信息,所以在这里也给NetStream加上了监听,但是事件的处理函数跟NetConnection是一个,也可以不同,看实际情况。
第四步:播放视频
终于要实现目标啦!
客户端由那个类来处理数据流呢?这里我们选择Vedio类,这个类在flash.media包里,但是这个类不是UIComponent,所以待会可能会遇到些麻烦。先不管。这个类如何处理流看下面代码:
//vd是Vedio的一个实例
vd.attachNetStream(ns);
ns.play("sample",0);
还记得ns吗?ns是上面建立的NetStream的实例。就这样我们把这根载有数据的流查到一个Vedio类。最后调用ns.play()方法就完成了流的播放。
这个方法的签名为:public function play( name:Object [,start:Number [,len:Number [,reset:Object] ] ]):void
四个参数,一个name,是上面在FMS建立的应用里stream文件夹下的一个视频文件的名字也是流的名字,默认后缀名为flv,第二个参数指明了开始播放的位置,单位是秒,上面的0表示从头播放,第三个参数指明了播放的时间,这里没写,就默认播放完,第四个参数是是否清楚播放列表里的所有播放。
到目前为止我们已经完成了建立连接,建立流,将流导入Vedio,但是还有个很重要的问题,就是客户端的界面如何办?因为,Vedio不是UIComponent的子类,所以不能直接添到界面里。我的解决方法是:建立一个VideoDisplay组件,用这个组件的addChild方法,把Vedio加到VedioDisplay里,这样就能在界面显示了。
运行一下,应该可以来自FMS的视频了!
posted @ 2009-08-09 19:43  orchid  阅读(950)  评论(1编辑  收藏  举报