很多人也許苦於找不到一個稍微簡單而又完整的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;
};
};