`
wgcode
  • 浏览: 579780 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

利用FMS做在线视频录制

阅读更多

Flash Media Server..

Flash 8 && Flash 8 Player (-______-)

一个摄像头,一个麦克.
打开FLASH,新建一个FLASH文档.

CTRL + L调出库..在库的右上角有个三角,点一下.然后选择"新建视频元件";

命名为:video

在主场景里新建2个图层,一个名字叫 video_record,另一个叫video_play;

将库里的视频元件分别拖到这2个图层中.起名字叫video_r和video_p.video_r是用来录视频的.video_p是用来放视频的.

(下面起新建MC啊,或命名一类的我就不写了.只做程序介绍.如果连MC命名都不知道的话相信也看不懂这教程.大家见谅!)

程序部分:

var server_uri:String = "rtmp://localhost/tensharp";
//FMS地址;

var videoName:String = "KeeRula";
//视频名.

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;
//将播放窗口设置为不可见.

my_nc.onStatus = function (thisObj:Object)
{
//trace (thisObj.code);
if (thisObj.code == "NetConnection.Connect.Success")
{
  RecordStop ("空闲中");
  //执行录制停止方法.并将状态设置为空闲
}
else
{
  trace ("错误:服务器未启动或URI输入错误.");
}
}
//onStatus这里是指服务器的连接状态.

function Record ()
{
video_r._visible = true;
//将录制窗口设为可见.
video_p._visible = false;
//播放窗口设置为不可见.
my_ns.publish (videoName, "record");
//关键就在这句了.写了这么多全围绕它来的.record为录制.
StreamInfo ("NowRecord");
//执行StreamInfo方法,并将参数设置为NowRecord;
btn_pr.btn_text.text = "停止";
//按钮文字:停止.
RecordInterval = setInterval (RecordTime, 1000);
//统计录制时间.
}
//方法:录制.

var timeNum:Number = 0;
//录制时间.

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

function RecordStop (__status:String)
{
//__status是当前状态文字.
txt_status.text = "当前状态:" + __status;
btn_pr.btn_text.text = "录制";
StreamInfo ("NowStop");
//执行StreamInfo方法..并将参数设置为NowStop;
clearInterval (RecordInterval);
timeNum = 0;
//不录了..要把统计时间清空.
if (__status == "录制完成")
{
  Finished ();
}
//这个应该不用偶说了..
}
//方法:空闲或录制完成.

function Finished ()
{
my_ns.close();
//完成了..就要关闭录制.
var thisObj = this;
var FinishAlert:MovieClip = _root.attachMovie ("Alert", "FinishAlert", 100);
//这个是一个弹出框.具体看库里的MC:Alert.
with (FinishAlert)
{
  alertTitle.html = true;
  alertTitle.htmlText = "" + "录制完成!" + "";
  info.text = "录制完成..请选择下一步操作."
  _x = video_r._x + (video_r._width - _width) / 2;
  _y = video_r._y + (video_r._height - _height) / 2;
  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);
}
//关闭那个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 (videoName);
//开始播放.
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 = "当前状态:" + "播放完成...";
  }
}
//流状态信息...详细的请自己 trace (PlayInfo.code);
}
 //方法:播放视频.

//需要注意的是用FMS播放的时候不用写路径.因为FMS录的视频直接存在FMS默认的流文件目录里了.
//录的视频的存放路径:FMS安装目录:/application/站点/streams/_definst_

如果上面看个差不多了可以自己动手做一下了.祝大家好运 (By:KeeRula)(:
具体MC这一类请看FLA文件.
下载地址:http://www.cincn.com/attachments/month_0606/e200662103113.rar 
另注:此教程及附带源文件仅做网友个人交流学习使用.请勿用于商业用途.需要商业版请单独联系

分享到:
评论

相关推荐

    2024嵌入式大厂面经C++首创

    2024嵌入式大厂面经C++首创提取方式是百度网盘分享地址

    C++ 高性能爬虫代码,带UI

    C++ 高性能爬虫代码,带UI

    2024嵌入式面试资料裕日软件C笔试题

    2024嵌入式面试资料裕日软件C笔试题提取方式是百度网盘分享地址

    黑色素瘤分类数据集10015张7类别.7z

    数据集类型:图像分类用,不可用于目标检测无标注文件 数据集格式:仅仅包含jpg图片,每个类别文件夹下面存放着对应图片 图片数量(jpg文件个数):10015 分类类别数:7 类别名称:[“0”,“1”,“2”,“3”,“4”,“5”,“6”] 更多信息:blog.csdn.net/FL1623863129/article/details/139561265

    2024年高尿酸及痛风疾病医药行业分析报告.pptx

    行业报告

    自由生活条件中老年人体力活动的分类研究

    体力活动对老年人的身心健康有很大影响。研究表明 65 岁以上的老年人缺少必要的体力锻炼,会增加跌倒的风险、会阻碍行动、会降低肌肉力量和丧失自主能力。积极的生活方式有助于老年人降低残疾和慢性病的风险,从而提高老年人的身心健康和幸福指数。世界卫生组织的一份报告表示,积极运动的老年人肌肉适应力强,器官功能正常,因此他们跌倒的风险比较低,并且拥有很高的认知能力。世界卫生组织建议老年人每周进行 30 分钟或 30 分钟以上的体力活动,每周 5 次不低于 10 分钟的适度体力活动或高水准的体力活动,来确保老年人的健康需求。因此,通过长期对日常活动等数据特征分析,可以更好的规划出,每天体力活动和久坐的时间比,从而提高老年人生活的质量。近年来,由于可穿戴设备在加工率、电池寿命、小型化和成本效益等方面的科技进 步,可穿戴监控设备得到快速发展。在过去的几年里,我们做了大量的工作,利用加速计、陀螺仪等惯性传感器设备,对老年人的体力活动进行监督测量。大多数现有的系统都是根据青少年指标获得数据集进行开发验证的,很少有系统将老年人纳入其数据采集范围。Rosario 等研究人员,用 PAC 系统对年轻人进行测试,并

    上市公司污染排放当量(2007-2022).xlsx

    详细介绍及样例数据:https://blog.csdn.net/T0620514/article/details/139567890

    基于Selenium的Java爬虫实战(内含谷歌浏览器Chrom和Chromedriver版本116.0.5841.0)

    资源包括: 1.Java爬虫实战代码 2.selenium学习笔记 3.代码演示视频 4.谷歌浏览器chrom116.0.5841.0 chrome-linux64.zip chrome-mac-arm64.zip chrome-mac-x64.zip chrome-win32.zip chrome-win64.zip 5.谷歌浏览器驱动器Chromedriver116.0.5841.0 chromedriver-linux64.zip chromedriver-mac-arm64.zip chromedriver-mac-x64.zip chromedriver-win32.zip chromedriver-win64.zip 特别说明:Chrome 为测试版(不会自动更新) 仅适用于自动测试。若要进行常规浏览,请使用可自动更新的标准版 Chrome。)

    2024嵌入式面试资料禾赛科技2021嵌入式开发

    2024嵌入式面试资料禾赛科技2021嵌入式开发提取方式是百度网盘分享地址

    基于Selenium的Java爬虫实战(内含谷歌浏览器Chrom和Chromedriver版本115.0.5790.90)

    资源包括: 1.Java爬虫实战代码 2.selenium学习笔记 3.代码演示视频 4.谷歌浏览器chrom115.0.5790.90 chrome-linux64.zip chrome-mac-arm64.zip chrome-mac-x64.zip chrome-win32.zip chrome-win64.zip 5.谷歌浏览器驱动器Chromedriver115.0.5790.90 chromedriver-linux64.zip chromedriver-mac-arm64.zip chromedriver-mac-x64.zip chromedriver-win32.zip chromedriver-win64.zip 特别说明:Chrome 为测试版(不会自动更新) 仅适用于自动测试。若要进行常规浏览,请使用可自动更新的标准版 Chrome。)

    华为OD机试C卷- 欢乐的周末(Java & JS & Python & C).md-私信看全套OD代码及解析

    私信博主免费看所有华为OD真题、考试报告、手撕代码、面试记录

    基于Selenium的Java爬虫实战(内含谷歌浏览器Chrom和Chromedriver版本115.0.5773.4)

    资源包括: 1.Java爬虫实战代码 2.selenium学习笔记 3.代码演示视频 4.谷歌浏览器chrom115.0.5773.4 chrome-linux64.zip chrome-mac-arm64.zip chrome-mac-x64.zip chrome-win32.zip chrome-win64.zip 5.谷歌浏览器驱动器Chromedriver115.0.5773.4 chromedriver-linux64.zip chromedriver-mac-arm64.zip chromedriver-mac-x64.zip chromedriver-win32.zip chromedriver-win64.zip 特别说明:Chrome 为测试版(不会自动更新) 仅适用于自动测试。若要进行常规浏览,请使用可自动更新的标准版 Chrome。)

    2023全球财富报告(英)-2023-76页.pdf

    2023全球财富报告(英)-2023-76页.pdf

    2024嵌入式面试资料指针经验总结

    2024嵌入式面试资料指针经验总结提取方式是百度网盘分享地址

    C++ MPI多进程并发

    C++ MPI多进程并发

    毕设:企业员工绩效考评系统的设计与实现-java语言的前后端分离的webapp

    本项目是java语言的前后端分离的webapp: ● 前端:html+mui+jquery,HBuilder开发,nginx部署 ● 后端:jdk8+springboot+mybatisPlus,idea开发,tomcat部署 ● 由于前后端分开开发,会产生跨域问题,故开发中用nginx做代理服务器 企业员工绩效考评系统是一个涉及人力资源管理、数据分析和技术实现的复杂项目。使用Java语言进行前后端分离的Web应用开发是一个不错的选择,因为它能够提供稳定、可扩展和易于维护的解决方案。以下是一个基于Java语言的企业员工绩效考评系统的设计与实现建议: 1. 需求分析 用户角色:确定系统的主要用户角色,如员工、部门经理、人力资源部门等。 核心功能: 员工自我评估:员工可以定期进行自我评估,提交工作表现和目标完成情况。 上级评估:部门经理可以对下属员工进行绩效评估,并提供反馈。 数据汇总与分析:人力资源部门可以汇总员工绩效数据,进行统计分析和报告生成。 实时通知与提醒:系统能够及时通知员工和管理者有关绩效评估的相关信息。 2. 技术选型 前端:HTML5、CSS3、JavaScript(可

    2024嵌入式面试资料2022交大捷普社招-C开发

    2024嵌入式面试资料2022交大捷普社招-C开发提取方式是百度网盘分享地址

    毕业设计-基于四元数变换的彩色图像水印算法设计与实现.zip

    毕业设计-基于四元数变换的彩色图像水印算法设计与实现. 题目:基于四元数变换的彩色图像水印算法设计与实现 ● 变换算法: QDFRNT, 四元数分数阶随机变换 、 QDFRFT, 四元数分数阶傅里叶变换 ● 水印算法: ● 基于 SVM 的自适应彩色图像水印算法 ● 基于量化的自适应彩色图像水印算法 ( TODO ### 一、引言 #### 1.1 研究背景 随着数字技术的飞速发展和广泛应用,图像已成为信息传播的重要形式之一。然而,由于图像易于复制和篡改,版权保护问题日益突出。水印作为一种有效的版权保护手段,通过在图像中嵌入不易察觉的标志或图案来标识图像的所有权,从而防止未经授权的复制和分发。传统的水印方法主要依赖于像素级别的操作,如改变图像的颜色或纹理,但这些方法容易被分析和去除。近年来,四元数变换作为一种非线性几何变换,被应用于图像处理领域,为水印算法的改进提供了新的思路。 #### 1.2 研究目的 本研究的目的是设计和实现一种基于四元数变换的彩色图像水印算法。通过在水印图像上施加四元数变换,使得水印对原图像的视觉质量影响最小,同时提高算法的鲁棒性,使其能够在多种图像处理操作(

    2024年小型通用减速机行业分析报告.pptx

    行业报告

    华为OD机试C卷- 迷宫问题(Java & JS & Python).md-私信看全套OD代码及解析

    私信博主免费看所有华为OD真题、考试报告、手撕代码、面试记录

Global site tag (gtag.js) - Google Analytics