linux下fms2流媒體伺服器搭建之五—–flv播放器製作篇

來源:互聯網
上載者:User
   很多人也許苦於找不到一個稍微簡單而又完整的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;
 };
 };


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.