[转]linux下的fms2流媒体服务器搭建六部曲之六-----在线视频录制篇

简介:
视频录制的源码好像网上有很多,在此声明,我这个也是抄别人的然后改改优化了一下,有点累,不多说了,直接贴源码吧:


var server_uri:String = "rtmp://215.102.25.XX/gdrc/video";
//FMS地址;跟播放器那边设置一样

var videoName:String = "record";//录制的文件名,可以通过参数传递

var my_nc:NetConnection = new NetConnection ();
//新建一个连接对象,用来连接FMS;

my_nc.connect (server_uri);
//连接FMS;

var my_ns:NetStream = new NetStream (my_nc);
//新建流,用来捕获和播放视频;

var my_cam:Camera = Camera.get ();
video_r.attachVideo (my_cam);
//获得慑像头,并将摄像头获取的视频载入到video_r里.

//my_cam.setQuality (1024, 90);
//设置带宽和质量;

var my_mic:Microphone = Microphone.get ();
//获得MIC;

my_ns.attachVideo (my_cam);
my_ns.attachAudio (my_mic);
//将摄像头图象和MIC声音装载到流.

video_p._visible = false;
//将播放窗口设置为不可见.

//默认上网方式为adsl,这个设置需要在服务器端的main.asc添加一些代码,最后补上
updateBandwidth(2);

function updateBandwidth(b) { 
 if ( b == 1 ) { //modem上网方式设置
  my_cam.setMode(160,120,2);0
  my_cam.setQuality(0, 75);
  my_cam.setKeyFrameInterval(3);
  my_mic.setRate(5);
  video_r._height = 100;
  video_r._width = 150;
 } 
 else if ( b == 2 ) { //adsl上网方式设置
  my_cam.setMode(160,120,5);
  my_cam.setQuality(0, 85);
  my_cam.setKeyFrameInterval(5);
  my_mic.setRate(11);
  video_r._height = 130;
  video_r._width = 175;
 } 
 else { //LAN专线上网方式设置
  my_cam.setMode(160,120,15);
  my_cam.setQuality(0, 90);
  my_cam.setKeyFrameInterval(10);
  my_mic.setRate(22);
  video_r._height = 150;
  video_r._width = 200;
 }
 my_ns.call('setBandwidth', 0, b);
}
/*本来做好了几个按钮可以让用户自己选择上网方式,但是实在太丑了就取消了,可以自行添加
Modem_btn.onPress = function() {
 updateBandwidth(1);
}

DSL_btn.onPress = function() { 
 updateBandwidth(2);
}

LAN_btn.onPress = function() {
 updateBandwidth(3);
}
*/

my_nc.onStatus = function (thisObj:Object)
{
 //trace (thisObj.code);
 if (thisObj.code == "NetConnection.Connect.Success")
 {
  RecordStop ("空闲中");
 }
 else
 {
  trace ("错误:服务器未启动或URI输入错误.");
 }
}

function Record ()
{
 video_r._visible = true;
 video_p._visible = false;
 my_ns.publish (videoName, "record");
 StreamInfo ("NowRecord");
 btn_pr.btn_text.text = "停止";
 RecordInterval = setInterval (RecordTime, 1000);
 txt_videoname.text = "视 频 名:" + videoName;
}

var timeNum:Number = 0;

function RecordTime ()
{
 timeNum ++;
 txt_status.text = "正在录制" + " " + "时间:" + Math.floor (timeNum / 60) + "分" + (timeNum % 60) + "秒";
}

function RecordStop (__status:String)
{
 txt_status.text = "当前状态:" + __status;
 btn_pr.btn_text.text = "录制";
 StreamInfo ("NowStop");
 clearInterval (RecordInterval);
 timeNum = 0;
 if (__status == "录制完成")
 {
  Finished ();
 }
 else
 {
  trace ("a");
 }
}


function Finished ()
{
 my_ns.close();
 video_r.clear ();
 var thisObj = this;
 var FinishAlert:MovieClip = _root.attachMovie ("Alert", "FinishAlert", 100);
 with (FinishAlert)
 {
  alertTitle.html = true;
  alertTitle.htmlText = "<b>" + "录制完成!" + "</b>";
  _x = video_r._x + (video_r._width - _width) / 2;
  _y = video_r._y + (video_r._height - _height) / 2;
  info.text = "录制完成..请选择下一步操作."
  btn_sub.btn_txt.text = "播放";
  btn_cln.btn_txt.text = "重录";
  btn_sub.onRelease = function ()
  {
   thisObj.PlayVideo ();
   thisObj.closeAlert (FinishAlert);
  }
  btn_cln.onRelease = function ()
  {
   thisObj.Record ();
   thisObj.closeAlert (FinishAlert);
  }
  closed.onRelease = function ()
  {
   thisObj.closeAlert (FinishAlert);
  }
 }
 btn_pr.enabled = false;
}

function closeAlert (__alert:MovieClip)
{
 btn_pr.enabled = true;
 unloadMovie (__alert);
}

function StreamInfo (__status:String)
{
 btn_pr.onRelease = function ()
 {
  if (__status == "NowRecord")
  {
   RecordStop ("录制完成");
  }
  else if (__status == "NowStop")
  {
   Record ();
  }
  else if (__status == "NowPlay")
  {
   Record ();
  }
 }
}

function PlayVideo ()
{
 txt_status.text = "当前状态:" + "正在播放...";
 StreamInfo ("NowPlay")
 video_r._visible = false;
 video_p._visible = true;
 video_p.attachVideo (my_ns);
 my_ns.play ("record");
 btn_pr.btn_text.text = "重录";
 my_ns.onStatus = function (PlayInfo)
 {
  if (PlayInfo.code == "NetStream.Play.Stop")
  {
   my_ns.seek (0);
   my_ns.pause();
   txt_status.text = "当前状态:" + "播放完成...";
  }
 }
}

服务器端main.asc添加后的完整内容:

load("components.asc");

application.onAppStart = function() {};
application.onConnect = function(client) {
 application.acceptConnection(client);
 client.getFileLength = function(filename) {
  var tlen = Stream.length(filename);
  return tlen;
 };
 
 Client.prototype.setBandwidth = function(bw) { 
   if ( bw == 1 ) { // modem settings
  this.setBandwidthLimit( 35000/8, 22000/8 );
   } 
   else if ( bw == 2 ) { // DSL settings
   this.setBandwidthLimit( 800000/8, 100000/8 );
    } 
    else { // LAN settings
   this.setBandwidthLimit( 400000, 400000 );
    }
  }; 
};



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




相关文章
|
1月前
|
安全 Java Linux
Websoft9:为开发者打造的高效 Linux 服务器面板
Websoft9 是一款以开源应用部署与管理为核心的服务器面板,采用“环境即服务”模式。它通过运行环境标准化、自动化配置、安全融合和资源管理四个方面实现平台与环境的深度协同。支持多语言框架预集成、云原生组件整合,提供 200+ 应用模板一键部署,并具备全流程安全防护和统一资源监控能力,助力开发者高效管理和扩展应用环境。
56 0
|
5天前
|
安全 Linux
阿里云linux服务器使用脚本通过安全组屏蔽异常海外访问ip
公网网站可能会遭受黑客攻击导致访问异常,使用此脚本可以屏蔽掉异常IP 恢复访问。也可自行设置定时任务定期检测屏蔽。
86 28
|
6天前
|
关系型数据库 MySQL Linux
在Linux环境下备份Docker中的MySQL数据并传输到其他服务器以实现数据级别的容灾
以上就是在Linux环境下备份Docker中的MySQL数据并传输到其他服务器以实现数据级别的容灾的步骤。这个过程就像是一场接力赛,数据从MySQL数据库中接力棒一样传递到备份文件,再从备份文件传递到其他服务器,最后再传递回MySQL数据库。这样,即使在灾难发生时,我们也可以快速恢复数据,保证业务的正常运行。
64 28
|
18天前
|
JavaScript Linux Python
在Linux服务器中遇到的立即重启后的绑定错误:地址已被使用问题解决
总的来说,解决"地址已被使用"的问题需要理解Linux的网络资源管理机制,选择合适的套接字选项,以及合适的时间点进行服务重启。以上就是对“立即重启后的绑定错误:地址已被使用问题”的全面解答。希望可以帮你解决问题。
68 20
|
24天前
|
Ubuntu Linux
Linux系统管理:服务器时间与网络时间同步技巧。
以上就是在Linux服务器上设置时间同步的方式。然而,要正确运用这些知识,需要理解其背后的工作原理:服务器根据网络中的其他机器的时间进行校对,逐步地精确自己的系统时间,就像一只犹豫不决的啮齿动物,通过观察其他啮齿动物的行为,逐渐确定自己的行为逻辑,既简单,又有趣。最后希望这个过程既能给你带来乐趣,也能提高你作为系统管理员的专业素养。
101 20
|
2月前
|
关系型数据库 应用服务中间件 Linux
Linux云服务器如何搭建LNMP环境
LNMP环境是Linux系统中常用的Web服务架构,由Linux、Nginx、MySQL/MariaDB和PHP组成,适用于高效托管动态网站。本文以CentOS 7为例,详细介绍了LNMP环境的搭建步骤,包括Nginx、MariaDB和PHP的安装与配置,以及最终通过创建`index.php`文件验证环境是否成功部署。具体操作涵盖配置YUM仓库、安装服务、编辑配置文件、启动服务等关键步骤,确保用户能够顺利搭建并运行LNMP环境。
71 1
Linux云服务器如何搭建LNMP环境
|
1月前
|
存储 运维 监控
深度体验阿里云系统控制台:SysOM 让 Linux 服务器监控变得如此简单
作为一名经历过无数个凌晨三点被服务器报警电话惊醒的运维工程师,我对监控工具有着近乎苛刻的要求。记得去年那次大型活动,我们的主站流量暴增,服务器内存莫名其妙地飙升到90%以上,却找不到原因。如果当时有一款像阿里云 SysOM 这样直观的监控工具,也许我就不用熬通宵排查问题了。今天,我想分享一下我使用 SysOM 的亲身体验,特别是它那令人印象深刻的内存诊断功能。
|
1月前
|
Linux 虚拟化 Docker
Linux服务器部署docker windows
在当今软件开发中,Docker成为流行的虚拟化技术,支持在Linux服务器上运行Windows容器。流程包括:1) 安装Docker;2) 配置支持Windows容器;3) 获取Windows镜像;4) 运行Windows容器;5) 验证容器状态。通过这些步骤,你可以在Linux环境中顺利部署和管理Windows应用,提高开发和运维效率。
163 1
|
3月前
|
安全 大数据 Linux
云上体验最佳的服务器操作系统 - Alibaba Cloud Linux | 飞天技术沙龙-CentOS 迁移替换专场
本次方案的主题是云上体验最佳的服务器操作系统 - Alibaba Cloud Linux ,从 Alibaba Cloud Linux 的产生背景、产品优势以及云上用户使用它享受的技术红利等方面详细进行了介绍。同时,通过国内某社交平台、某快递企业、某手机客户大数据业务 3 大案例,成功助力客户实现弹性扩容能力提升、性能提升、降本增效。 1. 背景介绍 2. 产品介绍 3. 案例分享
|
4月前
|
运维 监控 Linux
推荐几个不错的 Linux 服务器管理工具
推荐几个不错的 Linux 服务器管理工具
348 6

热门文章

最新文章