[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 }
------------------------------------------------------------------
Always put yourself in the other's shoes.If you feel that it hurts you,it probably hurts others,too.------------------------------------------------------------------