zoukankan      html  css  js  c++  java
  • 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的视频了!
  • 相关阅读:
    C#
    C#
    SQLServer
    C#
    使用Spring Boot快速构建应用
    mysql (master/slave)复制原理及配置
    Mysql 半同步复制配置
    Mysql+keeplived+lvs
    Mysql实时双备
    mysqlbinlog 用法
  • 原文地址:https://www.cnblogs.com/orchid/p/1542372.html
Copyright © 2011-2022 走看看