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

简介:

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,或者是您有什么好的建议和意见,也可以在文章的评论区留言给我,我会及时更正!



本文转自农夫山泉别墅博客园博客,原文链接:http://www.cnblogs.com/yaowen/p/4151315.html,如需转载请自行联系原作者

相关文章
|
2月前
|
移动开发 监控 小程序
mPaaS常见问题之音视频通话微信小程序通话界面录制为画中画模式如何解决
mPaaS(移动平台即服务,Mobile Platform as a Service)是阿里巴巴集团提供的一套移动开发解决方案,它包含了一系列移动开发、测试、监控和运营的工具和服务。以下是mPaaS常见问题的汇总,旨在帮助开发者和企业用户解决在使用mPaaS产品过程中遇到的各种挑战
30 0
|
8月前
|
开发工具 Windows
Windows平台RTMP推送|轻量级RTSP服务实现本地摄像头|屏幕|叠加数据预览
大家在做Windows平台RTMP推送或轻量级RTSP服务的时候,不管是采集屏幕还是采集摄像头,亦或屏幕摄像头的叠加模式,总会有这样的诉求,采集到的数据,希望能本地看看具体采集的数据或者图像实际效果,也就是本次介绍的“预览”功能。
196 0
|
8月前
|
数据采集 开发工具 Android开发
Android平台如何实现屏幕数据采集并推送至RTMP服务器
随着无纸化、智慧教室等场景的普及,好多企业或者开发者开始寻求更高效稳定低延迟的RTMP同屏方案,本文以大牛直播SDK(Github)的同屏demo(对应工程:SmartServicePublisherV2)为例,介绍下如何采集编码推送RTMP数据到流媒体服务器。
134 0
|
8月前
|
数据采集 物联网 Linux
Unity3D下实现Linux平台RTMP推流(以采集Unity窗体和声音为例)
随着物联网等行业的崛起,越来越多的传统行业如虚拟仿真、航天工业、工业仿真、城市规划等,对Linux下的生态构建,有了更大的期望,Linux平台下,可选的直播推拉流解决方案相对Windows和移动端,非常少,基于Unity的Linux推送方案,更是几无参考。本文以Unity3d环境下Linux平台推送Unity窗体和Unity采集的音频,然后编码推送到RTMP服务器为例,大概说下实现过程。
142 0
|
9月前
|
Web App开发 存储 机器人
开源,在线 P2P 文件传输、屏幕共享、音视频通话工具
这是一个基于 WebRTC 协议的开源在线工具箱,主要功能包括在线文件传输、本地屏幕录制,远程屏幕共享,远程音视频通话,密码房间、直播等功能。支持私有部署,打开浏览器即开即用
380 0
|
Web App开发 监控 前端开发
如果监控摄像头不支持Web Socket,猿大师播放器还能在网页中播放RTSP流吗?
猿大师播放器在前端用web socket是浏览器和中间件及播放程序之间的通讯协议,和实际播放无关,只要浏览器支持web socket就可以播放,现在大部分浏览器都支持web socket,所以就算监控设备不支持Websocket,用猿大师播放器播放RTSP也是是没问题的。
185 0
如果监控摄像头不支持Web Socket,猿大师播放器还能在网页中播放RTSP流吗?
|
Web App开发 JavaScript 中间件
高版本Chrome VUE页面播放RTSP实时视频流,并抓图、录像、回放、倍速等
因为项目上需要把海康威视摄像头集成到WEB网页中播放,于是开始了对WEB播放摄像头方案的各种折腾。 2015年之前还可以用VLC原生播放器在Chrome、Firefox等浏览器中直接播放,延迟比较低,效果也还不错。可惜好景不长,从 2015年Chrome、Firefox等浏览器取消了对 NPAPI插件的支持,海康威视官方提供的 web3.0开发包也只能在低版本浏览器播放。
749 1
|
Web App开发 编解码 中间件
海康威视摄像头RTSP视频流嵌入到谷歌Chrome等WEB页面中实时播放方案(图文教程)
近期在做一个智慧城市项目,要求将海康威视、大华等摄像头RTSP视频流在Chrome、Firefox、Edge等浏览器中播放,并且要求延迟必须要低,能到多低就多低,最好是实时视频。 小编了解很多不同的方案,目前市面上大部分是转码转流方案,不仅需要服务器支持,并且需要服务器不停的转码转流,如果多路同时播放或者播放高清视频,非常容易出现卡顿、花屏等情况,延迟更是高达数秒甚至数分钟,对于一些延迟要求较高的项目来说,这简直是灾难性后果。
2630 0
海康威视摄像头RTSP视频流嵌入到谷歌Chrome等WEB页面中实时播放方案(图文教程)
|
Web App开发 移动开发 监控
【干货】通过真机实现页面自动化适配(含直播回放)
本文根据4月15日淘系技术前端团队出品的「阿里淘系用户体验优化前端实战系列直播」——《通过真机实现页面自动化适配》整理而成。
【干货】通过真机实现页面自动化适配(含直播回放)
|
移动开发 前端开发 开发工具
产品百科 |H5 端如何实现镜像和显示手机横屏录制的视频
当您成功集成阿里云音视频通信 SDK,并想实现 H5 端镜像和显示横屏录制画面时,您可以通过本章节了解代码方法。
产品百科 |H5 端如何实现镜像和显示手机横屏录制的视频