天天看点

转]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;

    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_pause.onRelease=function(){

 bt_play._visible = true;

 bt_pause._visible = false;

 doPause();

//停止按钮

bt_stop.onRelease=function(){

 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;

    本文转自 OldHawk  博客园博客,原文链接:http://www.cnblogs.com/taobataoma/archive/2007/10/12/921992.html,如需转载请自行联系原作者

继续阅读