[ActionScript 3.0] 结合FMS实现简单视频录制

首先在本机上安装Flash Media Server,简称FMS,在测试过程中window防火墙开启可能有影响,可先关闭防火墙,FMS安装好后检查相关服务有没有启动,若没有,可启动任务管理器,点击服务,将Flash Media Server(FMS)   Flash Media

Administration Server  FMSHttpd 手动启动,一切就绪后,把以下as类作为文档类,就可测试了。

  1 package 

  2 {

  3     import flash.display.Sprite;

  4     import flash.events.NetStatusEvent;

  5     import flash.events.StatusEvent;

  6     import flash.media.Camera;

  7     import flash.media.Microphone;

  8     import flash.media.Video;

  9     import flash.net.NetConnection;

 10     import flash.net.NetStream;

 11 

 12     /**

 13       * ...

 14       * @author FrostYen

 15       */

 16     public class Main extends Sprite

 17     {

 18         private var netConn:NetConnection;

 19         private var netStream:NetStream;

 20         private var camera:Camera;

 21         private var video:Video;

 22         private var rtmp:String;

 23         private var microphpne:Microphone;

 24         public function Main()

 25         {

 26             init();

 27         }

 28 

 29         private function init():void

 30         {

 31             //初始化一个网络连接 

 32             netConn = new NetConnection  ;

 33             //为这个连接添加事件,这个事件有返回连接状态 

 34             netConn.addEventListener(NetStatusEvent.NET_STATUS,onNetStatus);

 35             //这是连接的地址,其实就是在你FMS的安装目录里,Applications下新建一个yan的文件夹,录制的视频会保存在这个yan文件夹下自动生成的streams/_definst_文件夹下,

 36             rtmp = "rtmp://127.0.0.1/yan/";

 37             //开始连接

 38             netConn.connect(rtmp);

 39             //获取系统的microphone    ;

 40             microphpne = Microphone.getMicrophone();

 41             microphpne.setLoopBack(true);

 42             //获取系统的摄像头;

 43             camera = Camera.getCamera();

 44             if ((camera == null))

 45             {

 46                 trace("未检测到摄像头");

 47             }

 48             else

 49             {

 50 

 51                 //设定宽,高,以及帧频

 52                 camera.setMode(240,180,24);

 53                 //设定画面质量 

 54                 //cam.setQuality(0,90);

 55                 video = new Video  ;

 56                 video.attachCamera(camera);

 57                 this.addChild(video);

 58                 camera.addEventListener(StatusEvent.STATUS,onCameraStatus);

 59             }

 60         }

 61         //重要说明: 当引用或者创建Camera和Microphone对象时,Flash Player 将显示“隐私”对话框,用户可从中选择是允许还是拒绝访问摄像头和麦克风。 请确保应用程序窗口大小至少为 215 x 138 像素,这是显示对话框所需的最小尺寸。

 62         private function onCameraStatus(e:StatusEvent):void

 63         {

 64 

 65             //status:StatusEvent — 在摄像头报告其状态时调度。 如果 code 属性的值为“Camera.Muted”,则表示用户拒绝 SWF 文件访问其摄像头。 如果 code 属性的值为“Camera.Unmuted”,则表示用户允许 SWF 文件访问其摄像头。

 66             switch (e.code)

 67             {

 68                 case "Camera.Unmuted" ://Camera access was allowed

 69 

 70                     break;

 71                 case "Camera.Muted" ://Camera access was denied

 72 

 73                     break;

 74             }

 75         }

 76 

 77         private function onNetStatus(e:NetStatusEvent):void

 78         {

 79             //trace(e.info.code);

 80             switch (e.info.code)

 81             {

 82                 case "NetConnection.Connect.Success" :

 83                     trace("链接成功");

 84                     if ((netStream != null))

 85                     {

 86                         netStream.close();

 87                     }

 88                     //建立一个流,为以后的录制传输数据

 89                     netStream = new NetStream(netConn);

 90                     camera.setQuality(163854,100);

 91                     //设置视频质量;

 92                     netStream.attachCamera(camera);

 93                     //录制视频      ;

 94                     netStream.attachAudio(microphpne);

 95                     //录制声音      ;

 96                     //netStream.publish("videoName","live");//直播

 97                     //netStream.publish("videoName","append");//追加性录制

 98                     netStream.publish("videoName","record");

 99                     //覆盖性录制;

100                     break;

101                 case "NetConnection.Connect.Rejected" :

102                     trace("没有权限");

103                     break;

104                 default :

105                     trace("连接服务器失败");

106             }

107         }

108 

109     }

110 

111 }

 

你可能感兴趣的:(actionscript)