[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的某兄的代码简化进行测试)

Global site tag (gtag.js) - Google Analytics