.net,Flex,Fms,视频会议,视频聊天相关开发技术大本营





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


 



 

本篇是视频聊天,会议开发实例系列文章的第2篇,该系列所有文章链接如下: 

1.关于Fms3和Flex的简单应用可以看我上篇

 

2.准备工作

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

 

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

 

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

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

具体代码如下:

<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.运行程序

Fms3和Flex打造在线视频录制和回放_视频聊天_02


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

 

13.代码下载

您收到代码后,请回到文章下面留言告之一下!要是没收到,我可以再发!

提供代码是为了互相学习,一起探讨!请大家多交流!

1.要是对代码有什么疑问,可以在文章的评论区留言,我会尽我所能答复您!

2.要是您在运行代码的过程中发现bug,或者是您有什么好的建议和意见,也可以在文章的评论区留言给我,我会及时更正!

评论区使用提示:

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

谢谢!

 

 

 


收藏与分享


收藏到QQ书签  添加到百度搜藏 ​​添加到雅虎收藏​​ Fms3和Flex打造在线视频录制和回放_视频聊天_04  Fms3和Flex打造在线视频录制和回放_.net_05


RSS订阅我 ​​什么是RSS?​


​ ​​   ​​ ​​   ​​ ​

​ ​​   ​​ ​​   ​​ ​​   ​​ ​

​ ​​   ​​ ​​   ​​ ​

​ ​​   ​​ ​​   ​​​




Flex,Fms3系列文章导航

  1. Flex,Fms3相关文章索引


 

本篇是视频聊天,会议开发实例系列文章的第2篇,该系列所有文章链接如下: 

javascript:void(0)#sp

 

1.关于Fms3和Flex的简单应用可以看我上篇

javascript:void(0)archive/2009/01/09/flex_fms_chat.html

 

2.准备工作

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

 

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

 

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

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

具体代码如下:

<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.运行程序

Fms3和Flex打造在线视频录制和回放_视频聊天_02


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

 

13.代码下载


您收到代码后,请回到文章下面留言告之一下!要是没收到,我可以再发!

提供代码是为了互相学习,一起探讨!请大家多交流!

1.要是对代码有什么疑问,可以在文章的评论区留言,我会尽我所能答复您!

2.要是您在运行代码的过程中发现bug,或者是您有什么好的建议和意见,也可以在文章的评论区留言给我,我会及时更正!

评论区使用提示:

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

谢谢!

 

 

 


收藏与分享


收藏到QQ书签  添加到百度搜藏 添加到雅虎收藏 Fms3和Flex打造在线视频录制和回放_视频聊天_04  Fms3和Flex打造在线视频录制和回放_.net_05


RSS订阅我 什么是RSS?