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

linux下的fms2流媒体服务器搭建六部曲之五:flv播放器制作篇
2010年01月03日
  很多人也许苦于找不到一个稍微简单而又完整的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;
  };
  };
资源下载链接为: https://pan.quark.cn/s/abbae039bf2a 在IT领域,序列化是将对象的状态转换为可存储或传输的形式的过程,而反序列化则是将这种形式恢复为原始对象。本文将深入探讨四种常用的序列化工具:Gson、Jackson、FastJson和ProtoBuf,以及与ProtoBuf相关的proto.exe工具。 Gson(Google Gson):Gson是Google提供的Java库,用于将Java对象转换为JSON字符串,反之亦然。它使用简单,支持复杂的类型转换,包括泛型、枚举、自定义序列化和反序列化策略。Gson的优势在于其灵活性和强大的类型处理能力,使得处理JSON数据非常便捷。 Jackson(FasterXML Jackson):Jackson是另一个流行的Java JSON库,提供流式API、树模型和数据绑定等多种方式来处理JSON。Jackson以其速度和效率著称,支持注解和配置,适应不同的序列化需求。其数据绑定特性允许直接将JSON映射到Java对象,简化了JSON处理。 FastJson(阿里巴巴FastJson):FastJson是阿里巴巴开发的高性能JSON库,支持Java对象与JSON之间的转换。它以极快的速度和较低的内存消耗而闻名,特别适合处理大数据量的场景。FastJson提供简单的API,使得在Java中操作JSON变得直观且高效。 ProtoBuf(Protocol Buffers):ProtoBuf是Google开发的数据序列化协议,将结构化数据序列化为二进制格式,便于存储和网络传输。相比于JSON和XML,ProtoBuf的数据体积更小,解析速度更快。proto.exe是ProtoBuf的编译器,可以将.proto文件编译成不同语言(如Java、Python、C++)的源代码,使得在这些语言中可以直接使用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值