`

FMS3系列(四):在线视频录制、视频回放

    博客分类:
  • FMS
阅读更多

使用Flash/Flex+FMS实现在线视频录制、视频回放的很简单的。通过阅读API文档后基本都可以实现这个功能,本文也意在抛砖引玉,希望对刚入手这块的朋友有所帮助。

      首先建立好Flash(ActionScript 3.0)文件,从组件(可使用Ctrl+F7打开)库中拖拽相应的组件到Flash舞台上,如下图:


 界面布局好后我们通过程序设置组见的显示文本以及为按扭添加事件监听,新建一个ActionScript类文件,编写代码如下:

1        public function PublishPlay():void
2        {
3            lbName.text="请输入视频文件名:";
4            btnPublish.label="开始录制";
5            btnPublish.addEventListener(MouseEvent.CLICK,onPublishClick);
6            btnStop.label="停止录制";
7            btnStop.addEventListener(MouseEvent.CLICK,onStopHandler);
8            btnPlay.label="视频回放";
9            btnPlay.addEventListener(MouseEvent.CLICK,onPlayHandler);
10            
11            video=new Video();
12            cam = Camera.getCamera();
13            mic = Microphone.getMicrophone();
14            if(cam==null)
15            {
16                trace("没检测到视频摄像头");
17            }
18            else
19            {
20                video.attachCamera(cam);
21            }
22            addChild(video);
23        }

 

以上代码同时实现了将视频显示到flash界面上,通过Camera的静态方法getCamrea()方法可以直接获取到视频摄像头的数据。其中用到的video,cam和mic变量为预先定义好的,如下:

1    private var nc:NetConnection;
2    private var ns:NetStream;
3    private var video:Video;
4    private var cam:Camera;
5    private var mic:Microphone;

 

接下来就需要连接到FMS服务器实现视频录制功能了,通过NetConnection类实现与FMS服务器的连接,并通过流将视频数据发布到FMS服务器.

1        private function onPublishClick(evt:MouseEvent):void
2        {
3            nc=new NetConnection();
4            nc.addEventListener(NetStatusEvent.NET_STATUS,onPublishStatusHandler);
5            nc.connect("rtmp://localhost/PulishedStreams");
6        }
7        
8        private function onPublishStatusHandler(evt:NetStatusEvent):void
9        {
10            if(evt.info.code=="NetConnection.Connect.Success")
11            {
12                ns=new NetStream(nc);
13                ns.addEventListener(NetStatusEvent.NET_STATUS,onPublishStatusHandler);
14                ns.client=new CustomClient();
15                ns.attachCamera(cam);
16                ns.attachAudio(mic);
17                ns.publish(tbName.text,"record");
18            }
19        }

 在录制视频的时候视频命名是取的文本输入框的值作为视频名,OK,现在测试Flash(Ctrl+Enter),通过点击 按扭开始录制视频。通过查看FMS服务器的文件目录可以看到,刚刚测试录制的视频存放于FMS服务器应用下的streams/_definst_目录下。详见下图所示:


 录制功能完成了,通过测试也可以成功的录制视频。最后我们通过程序来播放刚刚录制是视频。关于播放视频在上一篇文章《FMS3系列(三):创建基于FMS的流媒体播放程序,看山寨帮的山寨传奇》中已介绍怎么实现,这里就直接帖出代码不做解释。

1 private function onPlayHandler(evt:MouseEvent):void
2        {
3            nc=new NetConnection();
4            nc.addEventListener(NetStatusEvent.NET_STATUS,onPlayStatusHandler);
5            nc.connect("rtmp://localhost/PulishedStreams");
6        }
7        
8        private function onPlayStatusHandler(evt:NetStatusEvent):void
9        {
10            if(evt.info.code=="NetConnection.Connect.Success")
11            {
12                ns=new NetStream(nc);
13                ns.addEventListener(NetStatusEvent.NET_STATUS,onPlayStatusHandler);
14                ns.client=new CustomClient();
15                
16                video = new Video();
17                video.attachNetStream(ns);
18                ns.play(tbName.text,0);
19                addChild(video);
20            }
21        }

 通过本文的基础上可以很方便的扩展出在线拍照等多种应用,有兴趣的朋友可以去试验下。下面是本文完整的示例代码。

本文完整示例代码 :

1package
2{
3    import flash.net.*;
4    import flash.events.*;
5    import flash.media.*;
6    import flash.display.*;
7    import fl.controls.*;
8    
9    public class PublishPlay extends Sprite
10    {
11        private var nc:NetConnection;
12        private var ns:NetStream;
13        private var video:Video;
14        private var cam:Camera;
15        private var mic:Microphone;
16        
17        public function PublishPlay():void
18        {
19            lbName.text="请输入视频文件名:";
20            btnPublish.label="开始录制";
21            btnPublish.addEventListener(MouseEvent.CLICK,onPublishClick);
22            btnStop.label="停止录制";
23            btnStop.addEventListener(MouseEvent.CLICK,onStopHandler);
24            btnPlay.label="视频回放";
25            btnPlay.addEventListener(MouseEvent.CLICK,onPlayHandler);
26            
27            video=new Video();
28            cam = Camera.getCamera();
29            mic = Microphone.getMicrophone();
30            if(cam==null)
31            {
32                trace("没检测到视频摄像头");
33            }
34            else
35            {
36                video.attachCamera(cam);
37            }
38            addChild(video);
39        }
40        
41        private function onStatusHandler(evt:NetStatusEvent):void
42        {
43            trace(evt.info.code);
44            if(evt.info.code=="NetConnection.Connect.Success")
45            {
46                ns=new NetStream(nc);
47                ns.addEventListener(NetStatusEvent.NET_STATUS,onStatusHandler);
48                ns.client=new CustomClient();
49            }
50        }
51        
52        private function onPublishClick(evt:MouseEvent):void
53        {
54            nc=new NetConnection();
55            nc.addEventListener(NetStatusEvent.NET_STATUS,onPublishStatusHandler);
56            nc.connect("rtmp://localhost/PulishedStreams");
57        }
58        
59        private function onPublishStatusHandler(evt:NetStatusEvent):void
60        {
61            if(evt.info.code=="NetConnection.Connect.Success")
62            {
63                ns=new NetStream(nc);
64                ns.addEventListener(NetStatusEvent.NET_STATUS,onPublishStatusHandler);
65                ns.client=new CustomClient();
66                ns.attachCamera(cam);
67                ns.attachAudio(mic);
68                ns.publish(tbName.text,"record");
69            }
70        }
71        
72        private function onStopHandler(evt:MouseEvent):void
73        {
74            nc.close();
75        }
76        
77        private function onPlayHandler(evt:MouseEvent):void
78        {
79            nc=new NetConnection();
80            nc.addEventListener(NetStatusEvent.NET_STATUS,onPlayStatusHandler);
81            nc.connect("rtmp://localhost/PulishedStreams");
82        }
83        
84        private function onPlayStatusHandler(evt:NetStatusEvent):void
85        {
86            if(evt.info.code=="NetConnection.Connect.Success")
87            {
88                ns=new NetStream(nc);
89                ns.addEventListener(NetStatusEvent.NET_STATUS,onPlayStatusHandler);
90                ns.client=new CustomClient();
91                
92                video = new Video();
93                video.attachNetStream(ns);
94                ns.play(tbName.text,0);
95                addChild(video);
96            }
97        }
98    }
99}

  

  • 大小: 4.1 KB
  • 大小: 25.7 KB
分享到:
评论

相关推荐

    FMS视频录制监控

    "FMS视频录制监控"的标题表明我们正在讨论如何利用FMS来实现视频录制和监控功能。下面将详细阐述FMS在视频录制和监控中的应用以及其核心特性。 FMS视频录制功能: 1. **实时录制**:FMS支持RTMP(Real-Time ...

    FMS中文教程以及录制视频和视频回放例子

    这是一个压缩包,包含以下内容: 1.FMS3中文翻译 2.FMS教程 3.教程:教你用FMS在线录制视频 4.评估FMS视频录制的带宽需求来采用合适的尺寸和速率 5.视频录制系统的注意事项 6.FMS4开发指导官方白皮书

    FMS多人视频会议系统

    【FMS多人视频会议系统】是一个利用Flash Media Server (FMS) 技术构建的高效、稳定的多人在线视频交流平台。这个系统的核心是FMS,它是由Adobe开发的一款服务器软件,专门用于实时流媒体处理,支持音频、视频的直播...

    FMS视频聊天程序

    总之,"FMS视频聊天程序"是基于Adobe Flash Media Server和Flash技术构建的实时视频通讯解决方案,适用于在线教育、社交网络、企业协作等多个场景。虽然随着HTML5等新技术的发展,Flash的使用逐渐减少,但FMS的原理...

    FMS 服务端

    4. **内容录制与回放**:FMS可以录制直播内容,并提供点播服务,方便用户在错过直播后回看。 5. **自适应流媒体**:根据用户的网络条件,FMS可以自动调整视频质量,确保在不同带宽下都能流畅播放。 三、直播服务器...

    基于FMS的网络视频会议系统设计

    此外,FMS还支持录制功能,可以将会议内容保存下来供后期回放。 在互动性方面,系统需要提供文本聊天、白板共享、屏幕共享等功能。FMS支持数据通道,允许用户通过RTMP或RTMFP协议传输非媒体数据,如文本消息和屏幕...

    FMS.zip_fms

    3. **录制功能**:FMS具备录制功能,允许用户捕获和存储来自客户端的流媒体数据。这在创建回放内容、存档直播活动或者实现交互式应用时非常有用。 4. **互动性**:FMS支持双向通信,即服务器可以发送信息到客户端,...

    fms 中文 教程

    5.1 录制与存储:FMS支持媒体录制功能,用户可以将直播内容保存为点播文件,方便后期回放。同时,服务器还提供媒体存储管理,便于内容管理。 5.2 数据融合:FMS可以与其他数据源集成,如数据库、Web服务等,实现...

    FMS服务端实例集合

    此实例展示了如何使用FMS来录制视频流,并存储到服务器,以便于后续回放或进一步处理。 4. **PublishLiveVideo**: 发布直播视频是FMS的核心功能之一。这个实例将指导你如何通过FMS将用户的实时视频流发布到服务器,...

    FMS案例开发[整理].pdf

    此外,案例开发还包括了如何创建可交互的FMS连接、基于FMS的流媒体播放程序、在线视频录制与回放以及如何利用远程共享对象实现多人实时在线聊天的详细步骤。这些系列文章深入浅出地讲解了从零开始构建这样一个系统的...

    FMS6403,单芯片带通滤波器设计IC

    - **个人视频记录器(PVR)**:提高录制和回放质量,提供更清晰的视频内容。 - **视频点播服务(VOD)**:改善视频流传输效果,提升用户体验。 #### 工作原理与功能细节 - **多路复用器**:每个滤波器通道均配备了...

    FlashMediaServer3中文帮助

    2. RTMP协议:FMS3支持Real Time Messaging Protocol(RTMP),这是Adobe开发的一种用于音视频数据传输的协议,广泛应用于在线直播和点播服务。 二、FMS3主要功能 1. 实时直播:FMS3可实现实时视频直播,将现场活动...

    fms开发参考资料

    - `Camera.setLoopback()`: 指定是否使用压缩过的视频流来回放摄像头当前传输的内容。 - `Camera.setMode()`: 设置捕获视频的外观,如高度、宽度和帧率。 - `Camera.setMotionLevel()`: 指定调用`Camera.on...

    FMS2.0官方教程-中文版(PDF)

    FMS2.0,全称Flex Media Server 2.0,是一款强大的流媒体服务器软件,能够处理、分发和优化实时音频、视频流,广泛应用于在线教育、直播服务、企业内部通讯等多个领域。 教程首先会引导读者了解FMS2.0的基础概念,...

    FMS3.5 教程(PPT)

    在功能上,FMS3.5支持DVR,允许用户在直播的同时进行录制和回放。动态流媒体技术可以适应不同网络条件,提供最佳的观看体验。FME编码器支持FLV、MP4和F4V格式,而RTMP协议确保了可靠的多点广播传输。此外,FMS3.5内...

    Flex视频会议系统

    Flex视频会议系统是一种基于Adobe Flex技术构建的在线交互式沟通平台,主要利用FMS(Flash Media Server)服务器作为后台支持,提供高效、稳定的音视频通信服务。Flex是ActionScript 3.0的一个开发框架,它使得...

    Flash Media Server 入门教程.doc

    无论是视频录制、在线聊天还是网络游戏开发,FMS都能够提供稳定高效的传输服务。对于新手来说,掌握FMS的基本操作流程是非常重要的第一步。希望本文能够帮助您更好地理解和使用FMS,从而在多媒体开发领域取得更大的...

    类似FMS的RED5开源FLASH流媒体服务器源码

    2. **录制与回放**:RED5服务器能够记录接收到的流媒体内容,以便用户稍后回放。这使得内容创建者可以提供点播服务。 3. **互动性**:RED5支持双向通信,这意味着用户不仅可以观看流媒体内容,还可以通过Flash ...

Global site tag (gtag.js) - Google Analytics