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



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


相关文章
|
Linux
linux系统中利用QT实现音乐播放器的功能
linux系统中利用QT实现音乐播放器的功能
234 0
|
Linux
Linux制作deb格式安装包教程
Linux制作deb格式安装包教程
820 0
|
消息中间件 数据采集 监控
ELK搭建(五):linux系统日志监控平台搭建
现在的生产系统多使用linux系统,在实际生产过程中我们除了需要监控一些业务日志之外,有时也需要监控linux系统本身的日志,来帮助我们进行一些排错和判断。那么这一期,我们就针对linux系统日志监控平台的搭建来进行讲解 与往期一样,我们针对实际搭建教程更多是快速搭建为主,不做过多的原理性讲解,这一类讲解我们放到后期单独开几期博客来探讨。
1104 0
ELK搭建(五):linux系统日志监控平台搭建
|
Ubuntu Java Linux
alpine Linux与基于alpine制作JDK8镜像
Docker commit 命令 1.下载基础镜像 2.使用此基础镜像创建/启动/进入容器 3.在容器安装自己需要的软件 4.将保存配置完成的容器提交成镜像 语法如下 docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]] OPTIONS说明: -a :提交的镜像作者; -c :使用Dockerfile指令来创建镜像; -m :提交时的说明文字; -p :在commit时,将容器暂停。 实例:将容器a404c6c174a2 保存为新的镜像,并添加提交人信息和说明
|
4月前
|
安全 Linux 图形学
Linux平台Unity下RTMP|RTSP低延迟播放器技术实现
本文介绍了在国产操作系统及Linux平台上,利用Unity实现RTMP/RTSP直播播放的方法。通过设置原生播放模块的回调函数,可将解码后的YUV数据传递给Unity进行渲染,实现低延迟播放。此外,还提供了播放器启动、参数配置及停止的相关代码示例,并概述了如何在Unity中更新纹理以显示视频帧。随着国产操作系统的发展,此类跨平台直播解决方案的需求日益增长,为开发者提供了灵活高效的开发方式。
|
4月前
|
编解码 算法 Linux
Linux平台下RTSP|RTMP播放器如何跟python交互投递RGB数据供视觉算法分析
在对接Linux平台的RTSP播放模块时,需将播放数据同时提供给Python进行视觉算法分析。技术实现上,可在播放时通过回调函数获取视频帧数据,并以RGB32格式输出。利用`SetVideoFrameCallBackV2`接口设定缩放后的视频帧回调,以满足算法所需的分辨率。回调函数中,每收到一帧数据即保存为bitmap文件。Python端只需读取指定文件夹中的bitmap文件,即可进行视频数据的分析处理。此方案简单有效,但应注意控制输出的bitmap文件数量以避免内存占用过高。
|
4月前
|
编解码 安全 Linux
基于arm64架构国产操作系统|Linux下的RTMP|RTSP低延时直播播放器开发探究
这段内容讲述了国产操作系统背景下,大牛直播SDK针对国产操作系统与Linux平台发布的RTMP/RTSP直播播放SDK。此SDK支持arm64架构,基于X协议输出视频,采用PulseAudio和Alsa Lib处理音频,具备实时静音、快照、缓冲时间设定等功能,并支持H.265编码格式。此外,提供了示例代码展示如何实现多实例播放器的创建与管理,包括窗口布局调整、事件监听、视频分辨率变化和实时快照回调等关键功能。这一技术实现有助于提高直播服务的稳定性和响应速度,适应国产操作系统在各行业中的应用需求。
116 3
|
7月前
|
Linux
linux播放器
Linux系统提供多种音乐和视频播放器,如Iceplayer(原Splayer),支持多种音频格式及丰富功能,被誉为Linux版千千静听;Amarok是KDE桌面的强大音乐播放器;Rhythmbox是GNOME的默认播放器,简洁实用;Clementine是跨平台且源自Amarok 1.4的播放器;VLC是跨平台的强大播放器,支持众多音频和视频格式;Audacious则是一款简约轻便的播放器,适合喜欢Winamp风格的用户。每款播放器都有其特色,用户可根据需求选择。
111 3
linux播放器
|
Java Linux 网络安全
Linux(Centos7)下搭建SVN服务器
Linux(Centos7)下搭建SVN服务器
292 1
Linux(Centos7)下搭建SVN服务器
|
Linux 数据安全/隐私保护 Docker
Linux上搭建泰拉瑞亚服务端详细指南
Linux上搭建泰拉瑞亚服务端详细指南
1605 0