FMS3系列(四):在线视频录制、视频回放【转】
使用Flash/Flex+FMS实现在线视频录制、视频回放的很简单的。通过阅读API文档后基本都可以实现这个功能,本文也意在抛砖引玉,希望对刚入手这块的朋友有所帮助。
??????首先建立好Flash(ActionScript 3.0)文件,从组件(可使用Ctrl+F7打开)库中拖拽相应的组件到Flash舞台上,如下图:
????????????
??????界面布局好后我们通过程序设置组见的显示文本以及为按扭添加事件监听,新建一个ActionScript类文件,编写代码如下:
??????录制功能完成了,通过测试也可以成功的录制视频。最后我们通过程序来播放刚刚录制是视频。关于播放视频在上一篇文章《FMS3系列(三):创建基于FMS的流媒体播放程序,看山寨帮的山寨传奇》中已介绍怎么实现,这里就直接帖出代码不做解释。

{
????import?flash.net.*;
????import?flash.events.*;
????import?flash.media.*;
????import?flash.display.*;
????import?fl.controls.*;
????
????public?class?PublishPlay?extends?Sprite
????
{
????????private?var?nc:NetConnection;
????????private?var?ns:NetStream;
????????private?var?video:Video;
????????private?var?cam:Camera;
????????private?var?mic:Microphone;
????????
????????public?function?PublishPlay():void
????????
{
????????????lbName.text="请输入视频文件名:";
????????????btnPublish.label="开始录制";
????????????btnPublish.addEventListener(MouseEvent.CLICK,onPublishClick);
????????????btnStop.label="停止录制";
????????????btnStop.addEventListener(MouseEvent.CLICK,onStopHandler);
????????????btnPlay.label="视频回放";
????????????btnPlay.addEventListener(MouseEvent.CLICK,onPlayHandler);
????????????
????????????video=new?Video();
????????????cam?=?Camera.getCamera();
????????????mic?=?Microphone.getMicrophone();
????????????if(cam==null)
????????????
{
????????????????trace("没检测到视频摄像头");
????????????}
????????????else
????????????
{
????????????????video.attachCamera(cam);
????????????}
????????????addChild(video);
????????}
????????
????????private?function?onStatusHandler(evt:NetStatusEvent):void
????????
{
????????????trace(evt.info.code);
????????????if(evt.info.code=="NetConnection.Connect.Success")
????????????
{
????????????????ns=new?NetStream(nc);
????????????????ns.addEventListener(NetStatusEvent.NET_STATUS,onStatusHandler);
????????????????ns.client=new?CustomClient();
????????????}
????????}
????????
????????private?function?onPublishClick(evt:MouseEvent):void
????????
{
????????????nc=new?NetConnection();
????????????nc.addEventListener(NetStatusEvent.NET_STATUS,onPublishStatusHandler);
????????????nc.connect("rtmp://localhost/PulishedStreams");
????????}
????????
????????private?function?onPublishStatusHandler(evt:NetStatusEvent):void
????????
{
????????????if(evt.info.code=="NetConnection.Connect.Success")
????????????
{
????????????????ns=new?NetStream(nc);
????????????????ns.addEventListener(NetStatusEvent.NET_STATUS,onPublishStatusHandler);
????????????????ns.client=new?CustomClient();
????????????????ns.attachCamera(cam);
????????????????ns.attachAudio(mic);
????????????????ns.publish(tbName.text,"record");
????????????}
????????}
????????
????????private?function?onStopHandler(evt:MouseEvent):void
????????
{
????????????nc.close();
????????}
????????
????????private?function?onPlayHandler(evt:MouseEvent):void
????????
{
????????????nc=new?NetConnection();
????????????nc.addEventListener(NetStatusEvent.NET_STATUS,onPlayStatusHandler);
????????????nc.connect("rtmp://localhost/PulishedStreams");
????????}
????????
????????private?function?onPlayStatusHandler(evt:NetStatusEvent):void
????????
{
????????????if(evt.info.code=="NetConnection.Connect.Success")
????????????
{
????????????????ns=new?NetStream(nc);
????????????????ns.addEventListener(NetStatusEvent.NET_STATUS,onPlayStatusHandler);
????????????????ns.client=new?CustomClient();
????????????????
????????????????video?=?new?Video();
????????????????video.attachNetStream(ns);
????????????????ns.play(tbName.text,0);
????????????????addChild(video);
????????????}
????????}
????}
}?