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

FLEX入门实例--------结合FMS3在线录制FLV视频

阅读更多

以前一直以为录制视频是一件很麻烦的事情,这两天忙中偷闲研究了下FMS,没想到利用FMS和FLEX一切来得这么简单,刚研究这DD,一些内部机制都没能理解得很通透,如果那里说得不够准确或有误,欢迎大家拍砖,先说说它的原理:FLEX利用RTMP协议来与FMS也就是服务端取得连接,RTMP与HTTP的最大不同之处在于,RTMP是一个有状态的协议,它不仅可以一直与客户端保持连接,而且可以监控客户端的行为并主动与之交互,而HTTP则是一个无状态的协议,当客户端主动发出请求,服务端响应完毕后,一次会话过程序就结束了.而在FLEX中,主要用到了NetConnection和NetStream类,有过编程经验的朋友一眼就能看出来这两个家伙是干嘛的吧.小弟就不多说了.

 

先看代码吧:想表达的在注释中:

 

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="initApp();"> 
<mx:Script> 
<![CDATA[ 
import mx.messaging.errors.NoChannelAvailableError; 
private var nc:NetConnection; 
private var ns:NetStream; 
private var rtmpNow:String; 
private var msg:Boolean; 
private var metaSniffer:Object; 
private var dur:Number; 
private var cam:Camera; 
private var mic:Microphone; 
private var vid1:Video; 

private function initApp():void{ 
//初始化一个网络连接 
nc=new NetConnection(); 
//为这个连接添加事件,这个事件有返回连接状态 
nc.addEventListener(NetStatusEvent.NET_STATUS,checkConnect); 
//这是连接的地址其实就是在你FMS的安装目录里,Applications下新建一个vid2的文件夹,这个文件夹可以看成是你的工程名了 
//至于后面的recordings是你录制视频时存放视频的文件夹 
rtmpNow="rtmp://localhost/vid2/recordings"; 
//开始连接 
nc.connect(rtmpNow); 
addMedia(); 
} 

private function checkConnect(event:NetStatusEvent):void{ 
//根据连接返回的状态信息判断是滞连接成功 
msg=(event.info.code=="NetConnection.Connect.Success"); 
msgError.text=event.info.code; 
if(msg){ 
//如果成功,就利用些连接建立一个流,为以后的录制传输数据 
ns=new NetStream(nc); 
msgError.text="establish netStream"; 
} 
} 

private function startRecord(e:Event):void{ 
if(ns){ 

msgError.text="start record"; 
//开始录制时要加载micphone和摄像头 
ns.attachAudio(mic); 
ns.attachCamera(cam); 
//这里是关键,从这里开始,就开始录制了,input.text是录制的视频文件的名称 
ns.publish(input.text,"record"); 
} 
} 

private function stop(event:Event):void{ 
//和JAVA里类似,流类的东西一定要记得关闭 
ns.play(false); 
ns.close(); 
msgError.text="stop"; 
} 

private function addMedia ():void 
{ 
//获取系统的摄像头 
cam=Camera.getCamera(); 
//设定宽,高,以及帧 
cam.setMode (240,180,24); 
//设定画面质量 
cam.setQuality (0,90); 
//获取系统的microphone 
mic=Microphone.getMicrophone(); 
//让videoDisplay加载摄像头 
vv.attachCamera(cam); 
msgError.text="initnize"; 
} 


]]> 
</mx:Script> 

<mx:VBox id="myVb"> 
<mx:VideoDisplay id="vv" width="400" height="300"/> 
<mx:Button label="record" id="btn" click="startRecord(event);"/> 
<mx:Button label="play" id="stopbtn" click="stop(event);"/> 
<mx:TextInput id="input"/> 
<mx:TextArea id="msgError" backgroundColor="red"/> 
</mx:VBox> 
</mx:Application> 

 

3
3
分享到:
评论
5 楼 momoko8443 2008-08-31  
LZ的文章是借鉴《learning flash media server 3》的吧,我看你定音了Video对象也没用。哈哈
4 楼 jjun001 2008-08-12  
我按你的代码测试,红色TextArea中提示NetConnection.Connect.Closed
不知道问题出在哪里?
3 楼 hacker47 2008-07-06  
我在这里使用的是FMS3做为服务器,这安装我就不多说了,我想都会的.我在上面用到的RTMP服务地址为rtmp://localhost/vid2/recordings

所以需要先到FMS的安装目标下找到Applications并在其目标下,新建一个vid2的文件夹,这个其实就是你的项目或工程名以及目录了, 后面的recordings会在发布视频时自动生成,不需要新建.经过这一步,服务器端的配置应该就基本OK了,接下来,进入到安装目标下的TOOLS目录点击StartServerService.bat批处理文件,启动服务器,然后,再启动你的FLEX或AIR项目,就可以测试了.如果不清楚,再与我交流.OK? 不知道我说清楚了没有.
2 楼 bokelg 2008-07-06  
您好:
   看了您的代码感觉受益匪浅,可惜还自己太菜,不知道服务端是如何配置的,可不可以把服务端的配置一并贴出来啊!
          不甚感激
1 楼 tvjody 2008-06-17  
写得很不错,有时间试试

相关推荐

    [原创] Fms 视频录制屏幕共享 附

    在博文链接提供的“test_video2”文件中,可能包含了实现Fms视频录制屏幕共享的一个实例项目。这个项目可能包括了以下文件: - `Main.as`: 主程序类,初始化NetConnection,处理屏幕共享的逻辑。 - `ScreenCapture....

    fms3中文文档

    - **预录制内容**:以 FLV、MP3 或 MP4 等格式存储在服务器上,供用户点播。 - **实时内容**:客户端通过摄像头捕捉的视频或音频,经过编码后通过服务器传输给其他客户端。 #### 四、技术要点总结 - **实时消息...

    fms中文资料,fms2.5的综合翻译

    综上,FMS2.5作为流媒体平台,结合客户端和服务器端ActionScript,为开发者提供了创建高度互动的多媒体应用的强大工具,支持实时视频、音频流,适用于各种在线教育、娱乐和企业通讯场景。了解并掌握FMS的使用,能够...

    Red5入门教程

    Red5是基于Java开发的,能够实现与Adobe的FMS(Flash Media Server)相似的功能,包括实时流媒体传输、录制播放视频、共享对象以及远程调用等。通过Red5,开发者可以构建诸如视频播放网站、远程教育平台、视频会议...

    Adobe.Flash.Media.Server.3.开发者向导.简体中文版

    - 在 FMS 上运行的应用程序通常具有多个实例,例如在线游戏中的不同“房间”,每个房间都是一个独立的应用程序实例。 - 用户可以根据需要连接到不同的实例,每个实例提供独特的资源和服务。 #### 五、应用场景 -...

    Flash Media Server 入门教程

    2. 录制功能:FMS支持对直播流进行录制,并存储为FLV或F4V格式的文件,供后续点播使用。 3. 内容分发网络(CDN)集成:FMS可以与CDN配合,实现全球范围内的内容分发,提高服务的稳定性和可扩展性。 六、学习资源 在...

    Flash Media Server 3 中文翻译

    应用程序实例的概念允许在同一应用程序下创建多个独立的环境,例如,在线游戏中可以创建多个房间,每个房间作为一个应用程序实例,用户可以选择加入不同的实例进行交互。 总的来说,Flash Media Server 3 是一个...

    一步一步学Flash Media Server

    通过FMS,开发者能够构建实时的音视频通信应用,例如在线会议系统、直播平台等。本文将详细介绍FMS的基本概念、安装配置流程及常见应用场景。 ##### 1.1 FMS 的基本概念 - **媒体服务器**: FMS 是一款媒体服务器,...

    flex3的cookbook书籍完整版dpf(包含目录)

    通过摄像头将视频发送到FMS实例 8.8节. 访问用户的麦克风并创建声音显示 8.9节. 在Flex程序中平滑播放视频 8.10节. 检测像素级别的碰撞 8.11节. 读取和保持用户的网络摄像头图像 8.12节. 在多幅图像中使用混合模式 ...

    red5流媒体资料

    Red5使用Real-Time Messaging Protocol (RTMP)作为传输协议,与FMS完全兼容,支持流化FLV和MP3文件、实时录制客户端流为FLV文件、共享对象以及Remoting等功能。这意味着,如果你的客户端已经能够与FMS通信,那么它们...

Global site tag (gtag.js) - Google Analytics