[flex] 关于flex3+fms3.5 录制音视频流时的声音问题
pdreamer
2009-02-21
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"> <mx:Script> <![CDATA[ import mx.messaging.errors.NoChannelAvailableError; private var nc:NetConnection; private var ns:NetStream; private var rtmpNow:String; private var msg:Boolean; private var metaSniffer:Object; private var dur:Number; private var cam:Camera; private var mic:Microphone; private var vid1:Video; private function startup():void{ //初始化一个网络连接 // 1... nc=new NetConnection(); //为这个连接添加事件,这个事件有返回连接状态 nc.addEventListener(NetStatusEvent.NET_STATUS,checkConnect); //这是连接的地址其实就是在你FMS的安装目录里,Applications下新建一个vid2的文件夹,这个文件夹可以看成是你的工程名了 //至于后面的recordings是你录制视频时存放视频的文件夹 rtmpNow="rtmp://localhost/test"; // 2... //开始连接 nc.connect(rtmpNow); //获取系统的microphone mic=Microphone.getMicrophone(); mic.setLoopBack(true); //获取系统的摄像头 cam=Camera.getCamera(); //设定宽,高,以及帧 cam.setMode (240,180,24); //设定画面质量 cam.setQuality (0,90); //让videoDisplay加载摄像头 vid.attachCamera(cam); msgError.text="initnize"; } private function checkConnect(event:NetStatusEvent):void{ //根据连接返回的状态信息判断是滞连接成功 msg=(event.info.code=="NetConnection.Connect.Success"); msgError.text=event.info.code; if(msg){ //如果成功,就利用些连接建立一个流,为以后的录制传输数据 // 3... ns=new NetStream(nc); msgError.text="establish netStream"; } } private function startRecord(e:Event):void{ if(ns){ msgError.text="start record"; // 4... //开始录制时要加载micphone和摄像头 ns.attachAudio(mic); ns.attachCamera(cam); // 5... //这里是关键,从这里开始,就开始录制了,input.text是录制的视频文件的名称 ns.publish(input.text, "record"); } } private function stop(event:Event):void{ //和JAVA里类似,流类的东西一定要记得关闭 ns.play(false); ns.close(); msgError.text="stop"; } ]]> </mx:Script> <mx:VBox id="myVb" creationComplete="startup();"> <mx:VideoDisplay id="vid" width="400" height="300" /> <mx:Button label="record" id="btn" click="startRecord(event);" /> <mx:Button label="play" id="stopbtn" click="stop(event);" /> <mx:TextInput id="input" /> <mx:TextArea id="msgError" backgroundColor="red" /> </mx:VBox> </mx:Application>
我这代码是什么回事,录视频的时候总是录不了声音,只能录视频?
还发现一个问题是: 当我把Microphone.getMicrophone(); 写到一个方法里,再在creationComplete执行的函数里调用该封装的函数,运行该mxml的时候flash player无论如何都没法播放麦克风的声音。
flex 3.0.2 flex sdk 3.2 flash player 10 fms 3.5
(我的代码要复杂很多,这里是结合javaeye的某兄的代码简化进行测试) |