[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 }
原文地址:https://www.cnblogs.com/frost-yen/p/4519481.html