.net,Flex,Fms,视频会议,视频聊天相关开发技术大本营
随笔-122  文章-0  评论-3956 

Fms3和Flex打造在线视频录制和回放

 
Flex,Fms3系列文章导航
  1. Flex,Fms3相关文章索引

本篇是视频聊天,会议开发实例系列文章的第2篇,该系列所有文章链接如下: 
http://www.cnblogs.com/aierong/archive/2008/12/30/Flex.html#sp

1.关于Fms3和Flex的简单应用可以看我上篇
http://www.cnblogs.com/aierong/archive/2009/01/09/flex_fms_chat.html

2.准备工作
在fms安装目录下的application中,新建一个文件夹test_video1,然后启动fms服务器

3.打开Fb3,创建一个项目

4.在主mxml中拖动控件,界面如下:

具体代码如下:
<mx:VideoDisplay x="34" y="10" height="200" width="360" id="vd_main"/>
<mx:TextInput x="34" y="224" text="te" width="208" id="txt_filename"/>
<mx:Button x="250" y="224" label="record" id="btn_record"/>
<mx:Button x="327" y="224" label="stop" id="btn_stop"/>
<mx:Button x="250" y="256" label="replay" id="btn_replay"/>
<mx:Label x="34" y="288" text="状态提示:" width="362" id="txt_status"/>

5.导入包和定义变量如下:
import mx.controls.Alert;
 
private var netConnection:NetConnection;
private var netStream:NetStream;
private var appServer:String="rtmp://192.168.0.249/test_video1";
private var camera:Camera;
private var microphone:Microphone;

音频流或视频流的一般工作流程:以下步骤简要介绍了用于发布实时音频和视频的工作流程:

a.创建一个 NetConnection 对象。 
b.使用 NetConnection.connect() 方法连接到服务器上的应用程序实例。 
c.创建一个 NetStream 对象,以便在连接中创建数据流。 
d.使用 NetStream.attachAudio() 方法捕获音频并通过该流进行发送,然后使用 NetStream.attachCamera() 方法捕获并发送视频。 
e.使用 NetStream.publish() 方法为该流指定唯一的名称,然后通过该流将数据发送到服务器,以使其他用户能够收到该数据。 您还可以在发布数据时进行录制,以便用户可以在日后回放该数据。

6.creationComplete="init()",页面初始化代码
private function init():void
{
 netConnection = new NetConnection();
 netConnection.connect(appServer);
 netConnection.addEventListener(NetStatusEvent.NET_STATUS,netStatusHandler);
 btn_record.addEventListener(MouseEvent.CLICK,recordFLV);
 btn_stop.addEventListener(MouseEvent.CLICK,stopRecord);
 btn_replay.addEventListener(MouseEvent.CLICK,replayFLV);
  
 initMedia();
}

代码比较简单,就是做些初始化工作

7.实现initMedia()
private function  initMedia():void
{
 camera = Camera.getCamera();
 camera.setMode(300,180,15);
 camera.setQuality(0,100);
 vd_main.attachCamera(camera);
 microphone = Microphone.getMicrophone();
}

代码说明:
这段代码实际上是在初始化视频设备和音频设备

Camera 类可从连接到运行 Flash Player 的计算机的摄像头中捕获视频。
重要说明:Flash Player 将显示“隐私”对话框,用户可从中选择是允许还是拒绝访问摄像头。 确保应用程序窗口大小至少为 215 x 138 个像素;这是显示该对话框所需的最小大小。

若要创建或引用 Camera 对象,请使用 getCamera() 方法。

camera.setMode()方法是将摄像头的捕获模式设置为最符合指定要求的本机模式
第1个参数:请求的捕获宽度,以像素为单位。 默认值为 160
第2个参数:请求的捕获高度,以像素为单位。 默认值为 120。 
第3个参数:摄像头捕获数据应使用的请求速率,以每秒帧数为单位。 默认值为 15。

camera.setQuality()方法设置每秒的最大带宽或当前输出视频输入信号所需的画面质量
第1个参数:指定当前输出视频输入信号可以使用的最大带宽,以每秒字节数为单位。 若要指定 Flash Player 视频可以使用所需数量的带宽来保持 quality 的值,请为 bandwidth 传递 0。 默认值为 16384。
第2个参数:个整数,指定所需的画面质量级别,该级别由应用于每一视频帧的压缩量确定。 可接受的值的范围为 1(最低品质,最大压缩)到 100(最高品质,无压缩)。 若要指定画面质量可以根据需要进行变化以避免超出带宽,请将 0 传递给 quality。

vd_main.attachCamera(camera)是指把来自摄像头的视频流显示到该控件

Microphone 类可从连接到运行 Flash Player 的计算机的麦克风中捕获音频
重要说明:Flash Player 将显示“隐私”对话框,用户可从中选择是允许还是拒绝访问麦克风。 请确保应用程序窗口大小至少为 215 x 138 像素,这是显示对话框所需的最小尺寸。

若要创建或引用 Microphone 对象,请使用 Microphone.getMicrophone() 方法。

8.实现netStatusHandler
private function netStatusHandler(evt:NetStatusEvent):void
{
 if ( evt.info.code=="NetConnection.Connect.Success" )
 {
  txt_status.text="fms连接成功";
  netStream = new NetStream(netConnection);
 }
 else
 {
  Alert.show("fms连接失败");
 }
}

9.实现录制按钮事件
private function recordFLV(evt:MouseEvent):void
{
 txt_status.text="开始录制";
 netStream.attachCamera(camera);
 netStream.attachAudio(microphone);
 netStream.publish(txt_filename.text,"record");
}

代码说明:
publish () 方法:将音频流、视频流和文本消息流从客户端发送到 Flash Media Server,并可选择在传输期间录制该流。 此方法仅供指定的流的发布者使用。
第1个参数:标识该流的字符串。
第2个参数:指定如何发布该流的字符串。 有效值为“record”、“append”和“live”。 默认值为“live”。 (这3个参数区别如下:)
如果传递“record”,Flash Player 将发布并录制实时数据,同时将录制的数据保存到名称与传递给 name 参数的值相匹配的新文件中。 该文件保存在服务器上服务器应用程序所在目录的子目录中。 如果该文件存在,则覆盖该文件。
如果传递“append”,Flash Player 将发布并录制实时数据,同时将录制的数据附加到名称与传递给 name 参数的值相匹配的文件中,该文件存储在服务器上包含服务器应用程序的目录的子目录中。如果未找到与 name 参数相匹配的文件,则创建一个文件。 
如果省略此参数或传递“live”,则 Flash Player 将发布实时数据而不进行录制。 如果存在名称与传递给 name 参数的值相匹配的文件,则删除它。

10.停止事件
private function stopRecord(evt:MouseEvent):void
{
 txt_status.text="停止录制";
 netStream.close();
}

11.回放事件
private function replayFLV(evt:MouseEvent):void
{
 txt_status.text="开始回放";
 vd_main.source=appServer+"/"+txt_filename.text;
 vd_main.play();
}

12.运行程序

13.代码下载
http://files.cnblogs.com/aierong/Video1.rar
您收到代码后,请回到文章下面留言告之一下!要是没收到,我可以再发!

提供代码是为了互相学习,一起探讨!请大家多交流!
1.要是对代码有什么疑问,可以在文章的评论区留言,我会尽我所能答复您!
2.要是您在运行代码的过程中发现bug,或者是您有什么好的建议和意见,也可以在文章的评论区留言给我,我会及时更正!

评论区使用提示:
评论区留言(使用高级评论)是可以贴图片的,要是有难以描述的问题,可以贴图片和文字一起说明
谢谢!

收藏与分享

收藏到QQ书签  添加到百度搜藏 添加到雅虎收藏   

RSS订阅我 什么是RSS?

      
         
      
      

东莞.net俱乐部

 欢迎您的加入

我的系列文章

A.Sql Server2005 Transact-SQL 新兵器学习 
B.MCAD学习
C.代码阅读总结
D.ASP.NET状态管理
E.DB(数据库)
F.WAP
G.WinForm
H.Flex

我的好文推荐

FlexAir开源版-全球免费多人视频聊天室,免费网络远程多人视频会议系统((Flex,Fms3联合开发))<视频聊天,会议开发实例8>
Sql Server2005 Transact-SQL 新兵器学习总结之-总结 
MS SQL数据库备份和恢复存储过程(加强版本) 
sql server中分布式查询随笔(链接服务器(sp_addlinkedserver)和远程登录映射(sp_addlinkedsrvlogin)使用小总结) 
ASP.NET2.0国际化/本地化应用程序的实现总结(多语言,多文化页面的实现) 
WAP开发资料站(最新更新) 
自定义格式字符串随笔 (IFormattable,IFormatProvider,ICustomFormatter三接口的实现) 
Mcad学习笔记之异步编程(AsyncCallback 委托,IAsyncResult接口,BeginInvoke方法,EndInvoke方法的使用小总结) 
Mcad学习笔记之通过反射调用類的方法,屬性,字段,索引器(2種方法) 
Mcad学习笔记之序列化(2进制和Soap序列 化) 
Mcad学习笔记之委托再理解(delegate的构造器,BeginInvoke,EndInvoke,Invoke4个方法的探讨) 
ASP.NET状态管理之一(概括篇) 
Flex,Fms学习笔记

希望上面提到的知识对您有所提示,同时欢迎交流和指正 
作者:aierong
出处:http://www.cnblogs.com/aierong
贴子以"现状"提供且没有任何担保,同时也没有授予任何权利!
本文版权归作者所有,欢迎转载!
原创技术文章和心得,转载注明出处!这也是对原创者的尊重!
 
posted @ 2009-01-10 09:27 aierong 阅读(12669) 评论(107) 编辑 收藏
评论列表
 

#101楼 2011-03-15 16:10 自由枫 

楼主,为什么只能用一次啊,当录完后可以播放一次,再点击replay后就没反应了,点击record也没反应,怎么回事呢。

#102楼[楼主] 2011-03-23 20:03 aierong 

引用自由枫:楼主,为什么只能用一次啊,当录完后可以播放一次,再点击replay后就没反应了,点击record也没反应,怎么回事呢。

我但是测试过,没有这种情况,你是否修改了代码

#103楼 2011-03-28 13:06 wswsn 

您好 楼主 最近我在研究FMS和FLEX做视频聊天 您否发我一份您的完整源码 让我学习学习 万分感谢 87342564@qq.com

#104楼[楼主] 2011-05-17 19:15 aierong 

引用wswsn:您好 楼主 最近我在研究FMS和FLEX做视频聊天 您否发我一份您的完整源码 让我学习学习 万分感谢 87342564@qq.com
每篇文章都留有代码下载地址

#105楼 2011-07-01 15:11 feifeidejunjun 

您好,我正要做这样的功能,我下载了您的代码,不过感觉并没有真正的录制视频,不知道是怎么回事,而且我在服务器端也查过了,没有这个录制下来的东西

#106楼[楼主] 2011-11-16 16:08 aierong 

引用feifeidejunjun:您好,我正要做这样的功能,我下载了您的代码,不过感觉并没有真正的录制视频,不知道是怎么回事,而且我在服务器端也查过了,没有这个录制下来的东西

我当时用的是fms3

#107楼 2014-07-26 14:33 fengma 

楼主,我在点击回放视频完成后画面就是视频最后一帧.如何才能让它放完视频后自动回到实时的自己的视频画面啊?
 
发表评论

昵称:

评论内容:
     
 

注销 订阅评论

[使用Ctrl+Enter键快速提交]

 
 
 

公告

LOGO

俱乐部

东莞.NET俱乐部

我的系列文章

A.Sql Server2005 Transact-SQL 新兵器学习 
B.MCAD学习
C.代码阅读总结
D.ASP.NET状态管理
E.DB(数据库)
F.WAP
G.WinForm
H.Flex,Fms

联系我

给我留言 
发短消息 
E-mail:aierong#126.com

推荐小组

东莞.NET小组 
JSON小组

推荐书籍

版权说明

版权归作者所有,欢迎转载!
转载请注明出处!
这也是对原创者的尊重!

计数器

站长统计

昵称:aierong
园龄:10年7个月
粉丝:130
关注:7

 

搜索

 
 

最新随笔

相册

积分与排名

  • 积分 - 646888
  • 排名 - 90

最新评论

阅读排行榜

评论排行榜

推荐排行榜

 
 
Copyright ©2014 aierong

Fms3和Flex打造在线视频录制和回放的更多相关文章

  1. Fms3和Flex打造在线多人视频会议和视频聊天(附原代码)

    Flex,Fms3系列文章导航 Flex,Fms3相关文章索引 本篇是视频聊天,会议开发实例系列文章的第3篇,该系列所有文章链接如下: http://www.cnblogs.com/aierong/a ...

  2. IOS开发之小实例--创建一个简单的用于视频录制和回放的应用程序

    前言:还是看了一下国外的入门IOS文章:<Create a Simple App for Video Recording and Playback>,主要涉及视频录制和回放的功能的基本实现 ...

  3. win10怎么录制电脑屏幕 电脑播放视频录制

    随着社会的发展,网络信息化时代已经来临,作为一个上班族,每天都离不开电脑,电脑仿佛就是我们的合作伙伴,也是陪伴我们的朋友,如今win10系统已经出来了,关于win10系统的问题相信大家有很多的问题,今 ...

  4. Linux 桌面玩家指南:05. 发博客必备的图片处理和视频录制神器

    特别说明:要在我的随笔后写评论的小伙伴们请注意了,我的博客开启了 MathJax 数学公式支持,MathJax 使用$标记数学公式的开始和结束.如果某条评论中出现了两个$,MathJax 会将两个$之 ...

  5. iOS开发系列--音频播放、录音、视频播放、拍照、视频录制

    --iOS多媒体 概览 随着移动互联网的发展,如今的手机早已不是打电话.发短信那么简单了,播放音乐.视频.录音.拍照等都是很常用的功能.在iOS中对于多媒体的支持是非常强大的,无论是音视频播放.录制, ...

  6. Flash+fms视频录制在项目中的实际应用

    Flash+fms视频录制在项目中的实际应用 前言:以下只是记录本人在项目中的应用,而flash+fms视频录制有多种实现方式,具体可根据实际情况而定! 1:古人云:工欲善其事,必先利其器,首先安装f ...

  7. iOS开发----音频播放、录音、视频播放、拍照、视频录制

    随着移动互联网的发展,如今的手机早已不是打电话.发短信那么简单了,播放音乐.视频.录音.拍照等都是很常用的功能.在iOS中对于多媒体的支持是非常强大的,无论是音视频播放.录制,还是对麦克风.摄像头的操 ...

  8. 音频播放、录音、视频播放、拍照、视频录制-b

    随着移动互联网的发展,如今的手机早已不是打电话.发短信那么简单了,播放音乐.视频.录音.拍照等都是很常用的功能.在iOS中对于多媒体的支持是非常强大的,无论是音视频播放.录制,还是对麦克风.摄像头的操 ...

  9. iOS音频播放、录音、视频播放、拍照、视频录制

    随着移动互联网的发展,如今的手机早已不是打电话.发短信那么简单了,播放音乐.视频.录音.拍照等都是很常用的功能.在iOS中对于多媒体的支持是非常强大的,无论是音视频播放.录制,还是对麦克风.摄像头的操 ...

随机推荐

  1. linux上如何快速删除一个目录

    在linux中删除一个目录很简单,很多人还是习惯用rmdir,不过一旦目录非空,就陷入深深的苦恼之中,现在使用rm -rf命令即可解决.直接rm就可以了,不过要加两个参数-rf 即:rm -rf   ...

  2. iPad UIPopoverController弹出窗口的位置和坐标

    本文转载至:http://blog.csdn.net/chang6520/article/details/7921181 TodoViewController *contentViewControll ...

  3. PyQt4单选框QCheckBox

    PyQt4中的部件 部件是构建应用程序的基础元素.PyQt4工具包拥有大量的种类繁多的部件.比如:按钮,单选框,滑块,列表框等任何程序员在完成其工作时需要的部件. QCheckBox单选框 单选框具有 ...

  4. java基础---->摘要算法的介绍

    数据摘要算法是密码学算法中非常重要的一个分支,它通过对所有数据提取指纹信息以实现数据签名.数据完整性校验等功能,由于其不可逆性,有时候会被用做敏感信息的加密.数据摘要算法也被称为哈希(Hash)算法. ...

  5. cocos2dx3.1从零学习(二)菜单、场景切换、场景传值

    转:http://www.it165.net/pro/html/201406/16195.html 回顾一下上一篇的内容,我们已经学会了创建一个新的场景scene,添加sprite和label到层中, ...

  6. pta 习题集5-17 家谱处理

    人类学研究对于家族很感兴趣,于是研究人员搜集了一些家族的家谱进行研究.实验中,使用计算机处理家谱.为了实现这个目的,研究人员将家谱转换为文本文件.下面为家谱文本文件的实例: John Robert F ...

  7. Pandas介绍

    pandas是python非常好用的一个数据结构包,包含有许多数据操作的方法,能够让你快速简便的提取和保存数据,节省你在这块的数据流操作耗时,从而让你更加专注于逻辑的设计和算法的设计.很多算法的相关库 ...

  8. 什么是Java序列化和反序列化,如何实现Java序列化

    1.概念 序列化:把Java对象转换为字节序列的过程. 反序列化:把字节序列恢复为Java对象的过程. 2.用途 对象的序列化主要有两种用途: 1) 把对象的字节序列永久地保存到硬盘上,通常存放在一个 ...

  9. Qt::QWindow多窗口争抢置顶状态解决方案

    有时候我们会有这种需求,自己的桌面程序需要置顶,但是程序包含了很多窗口,可能我们要求窗口1,2都在其它桌面程序之上,但是窗口1必须随时在窗口2之上. Qt提供的置顶方式是在windowsflags上增 ...

  10. linux shell 正则表达式(BREs,EREs,PREs)差异比较(转)

    add by zhj: Python的正则表达式跟Perl很像,Python的re模块文档中也说"This module provides regular expression matchi ...