论坛首页 编程语言技术论坛

关于flex3+fms3.5 录制音视频流时的声音问题

浏览 4597 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-02-21   最后修改: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的某兄的代码简化进行测试)
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics