• [转]linux下的fms2流媒体服务器搭建六部曲之五flv播放器制作篇


        很多人也许苦于找不到一个稍微简单而又完整的flv播放器,我刚开始也找了很久找不到,后来干脆叫朋友帮忙做了个界面,然后自己添加代码做了个,感觉还可以,这里我不敢独享,把源码公开给各位参考一下。

        要做flv播放器,首先你要明白fms2的工作目录,它的工作目录都在安装目录的applications目录下,你需要新建一个目录作为自己的工作目录,比如我新建了gdrc,然后在gdrc里面新建一个streams目录(这个目录名不能改变),这样,在streams下的所有子目录都是你的应用了。默认是_definst_,我为了好管理自己建了video放置视频flv文件,再建audio放置音频,这样我的目录结构就是:applications/gdrc/streams/video、applications/gdrc/streams/audio、applications/gdrc/streams/_definst_。在上一篇中提到的格式转换转换的所有flv文件就是放在applications/streams/video目录下。

        然后,来看看我的flv播放器吧,我是用flash8开发的,只需要几个简单的组件,视频组件、播放按钮、暂停按钮、停止按钮、时间轴再加下面的代码就是一个flv播放器,在第一祯写上下面的代码:

    stop();
    var play_status = false;//视频播放标记,true-正在播放;false-没有播放
    var connect_url = "rtmp://172.16.1.2/gdrc/video";//连接方式rtmp,注意这个连接的后面/gdrc/video跟上面提到的flv目录applications/gdrc/streams/video是对应的。
    var flv = stream;//动态播放flv,该参数名对应外面的参数名比如play.swf?stream=a表示播放a.flv,参数不需要.flv后缀名
    var nc:NetConnection = new NetConnection();
    var ns:NetStream;
    nc.connect(connect_url);
    var streamLength;//flv文件长度
    bt_pause._visible = false;//设置暂停按钮不可见
    var startBF = 2;//开始缓冲秒数
    var mainBF = 6;//空时缓冲秒数

    //初始化
    initStreams = function(){
     ns=new NetStream(nc);
     ns.setBufferTime(startBF);
     video.attachVideo(ns);//把ns附给video视频组件
     ns.onStatus = Onstatus;//动态缓冲
    };
    //动态缓冲,缓冲区满时为3秒,空的时候为10秒
    function  Onstatus(infoObject:Object){
     trace(infoObject["code"]);
     if(infoObject["code"] == "NetStream.Buffer.Full"){
      ns.setBufferTime(startBF);
     }
     if(infoObject["code"] == "NetStream.Buffer.Empty"){
      ns.setBufferTime(mainBF);
     }
    }

    //测试连接
    nc.onStatus = function(info) {
     trace(info.code);
     switch (info.code) {
      case "NetConnection.Connect.Success":initStreams();break;
     }
    }

    //缓冲
    function checkBufferTime(ns:NetStream):Void{
        var bufferPct:Number = Math.min(Math.round(ns.bufferLength/ns.bufferTime*100), 100);
     if(isNaN(bufferPct)){
      bufferPct = 0;
     }
        buffer_txt = "缓冲:"+bufferPct+"%";;
    };

    //获得文件长度,这个长度的获取需要服务器端的支持,要在fms2服务器端编写main.asc,后面会给出
    function FileLength() {
     this.onResult = function(retVal) {
       streamLength = retVal;
     };
    };

    //播放
    doPlay = function(){
     if(play_status == false){
      bar.ball._x = 0;
      play_status = true;
      ns.play(flv);
      //播放进度条
      bar.onEnterFrame=function(){
       nc.call("getFileLength", new FileLength(), flv);
       var nowPlayPercent=Math.round(ns.time/streamLength*100);
       if(isNaN(nowPlayPercent)){
        bar.ball._x = 0;
       }
       else{
        bar.ball._x = nowPlayPercent*490/100;
       }
       if(nowPlayPercent==99){
        play_status = false;
        bar.ball._x = 0;
        bt_play._visible = true;
        bt_pause._visible = false;
        //ns.close();
        delete this.onEnterFrame;
       }
      };
      //缓冲提示
      var buffer_interval:Number = setInterval(checkBufferTime, 100, ns);
     }
     else{
      ns.pause();
     }
    };


    //暂停
    doPause = function(){
     ns.pause();
    };


    //停止
    doStop = function(){
     play_status = false;
     bar.ball._x = 0;
     //ns.seek(0);
     //ns.pause(true);
     ns.close();
    };

    //开始播放
    playNow.onRelease=function(){
     bt_play._visible = false;
     bt_pause._visible = true;
     doPlay();
    };

    //播放按钮
    bt_play.onRelease=function(){
     bt_play._visible = false;
     bt_pause._visible = true;
     doPlay();
    };

    //暂停按钮
    bt_pause.onRelease=function(){
     bt_play._visible = true;
     bt_pause._visible = false;
     doPause();
    };

    //停止按钮
    bt_stop.onRelease=function(){
     bt_play._visible = true;
     bt_pause._visible = false;
     doStop();
    };

    main.asc,放置到fms2安装目录的applications/gdrc目录下

    load("components.asc");

    application.onAppStart = function() {};
    application.onConnect = function(client) {
     application.acceptConnection(client);
     client.getFileLength = function(filename) {
      var tlen = Stream.length(filename);
      return tlen;
     };
     };

  • 相关阅读:
    HP SAN Switch參考文檔地址
    hp,Qlogic,Brocade光纖卡查看方式
    使用nbrbutil工具來處理requested media id is in use, cannot process request
    NBU expired Media,Media ID not found in EMM database
    訪問索引的方法
    Linux光纖卡配置,磁盤掛載,多路徑設置
    Linux 6.5網卡配置
    Oracle ASM
    NBU bplabel命令擦除磁帶數據
    鼠标悬浮显示完整信息
  • 原文地址:https://www.cnblogs.com/taobataoma/p/921992.html
Copyright © 2020-2023  润新知