關於flex3+fms3.5 錄製音視頻流時的聲音問題


<?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的某兄的代碼簡化進行測試)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章