Fms3和Flex打造在線視頻錄製和回放
本篇是視頻聊天,會議開發實例系列文章的第2篇,該系列全部文章連接以下:
http://www.cnblogs.com/aierong/archive/2008/12/30/Flex.html#spphp
1.關於Fms3和Flex的簡單應用能夠看我上篇
http://www.cnblogs.com/aierong/archive/2009/01/09/flex_fms_chat.htmlhtml
2.準備工做
在fms安裝目錄下的application中,新建一個文件夾test_video1,而後啓動fms服務器jquery
3.打開Fb3,建立一個項目git
4.在主mxml中拖動控件,界面以下:web
具體代碼以下:
<mx:VideoDisplay x="34" y="10" height="200" width="360" id="vd_main"/>
<mx:TextInput x="34" y="224" text="te" width="208" id="txt_filename"/>
<mx:Button x="250" y="224" label="record" id="btn_record"/>
<mx:Button x="327" y="224" label="stop" id="btn_stop"/>
<mx:Button x="250" y="256" label="replay" id="btn_replay"/>
<mx:Label x="34" y="288" text="狀態提示:" width="362" id="txt_status"/>ajax
5.導入包和定義變量以下:
import mx.controls.Alert;
private var netConnection:NetConnection;
private var netStream:NetStream;
private var appServer:String="rtmp://192.168.0.249/test_video1";
private var camera:Camera;
private var microphone:Microphone;sql
音頻流或視頻流的通常工做流程:如下步驟簡要介紹了用於發佈實時音頻和視頻的工做流程:數據庫
a.建立一個 NetConnection 對象。
b.使用 NetConnection.connect() 方法鏈接到服務器上的應用程序實例。
c.建立一個 NetStream 對象,以便在鏈接中建立數據流。
d.使用 NetStream.attachAudio() 方法捕獲音頻並經過該流進行發送,而後使用 NetStream.attachCamera() 方法捕獲併發送視頻。
e.使用 NetStream.publish() 方法爲該流指定惟一的名稱,而後經過該流將數據發送到服務器,以使其餘用戶可以收到該數據。 您還能夠在發佈數據時進行錄製,以便用戶能夠在往後回放該數據。編程
6.creationComplete="init()",頁面初始化代碼
private function init():void
{
netConnection = new NetConnection();
netConnection.connect(appServer);
netConnection.addEventListener(NetStatusEvent.NET_STATUS,netStatusHandler);
btn_record.addEventListener(MouseEvent.CLICK,recordFLV);
btn_stop.addEventListener(MouseEvent.CLICK,stopRecord);
btn_replay.addEventListener(MouseEvent.CLICK,replayFLV);
initMedia();
}json
代碼比較簡單,就是作些初始化工做
7.實現initMedia()
private function initMedia():void
{
camera = Camera.getCamera();
camera.setMode(300,180,15);
camera.setQuality(0,100);
vd_main.attachCamera(camera);
microphone = Microphone.getMicrophone();
}
代碼說明:
這段代碼其實是在初始化視頻設備和音頻設備
Camera 類可從鏈接到運行 Flash Player 的計算機的攝像頭中捕獲視頻。
重要說明:Flash Player 將顯示「隱私」對話框,用戶可從中選擇是容許仍是拒絕訪問攝像頭。 確保應用程序窗口大小至少爲 215 x 138 個像素;這是顯示該對話框所需的最小大小。
若要建立或引用 Camera 對象,請使用 getCamera() 方法。
camera.setMode()方法是將攝像頭的捕獲模式設置爲最符合指定要求的本機模式
第1個參數:請求的捕獲寬度,以像素爲單位。 默認值爲 160
第2個參數:請求的捕獲高度,以像素爲單位。 默認值爲 120。
第3個參數:攝像頭捕獲數據應使用的請求速率,以每秒幀數爲單位。 默認值爲 15。
camera.setQuality()方法設置每秒的最大帶寬或當前輸出視頻輸入信號所需的畫面質量
第1個參數:指定當前輸出視頻輸入信號可使用的最大帶寬,以每秒字節數爲單位。 若要指定 Flash Player 視頻可使用所需數量的帶寬來保持 quality 的值,請爲 bandwidth 傳遞 0。 默認值爲 16384。
第2個參數:個整數,指定所需的畫面質量級別,該級別由應用於每一視頻幀的壓縮量肯定。 可接受的值的範圍爲 1(最低品質,最大壓縮)到 100(最高品質,無壓縮)。 若要指定畫面質量能夠根據須要進行變化以免超出帶寬,請將 0 傳遞給 quality。
vd_main.attachCamera(camera)是指把來自攝像頭的視頻流顯示到該控件
Microphone 類可從鏈接到運行 Flash Player 的計算機的麥克風中捕獲音頻
重要說明:Flash Player 將顯示「隱私」對話框,用戶可從中選擇是容許仍是拒絕訪問麥克風。 請確保應用程序窗口大小至少爲 215 x 138 像素,這是顯示對話框所需的最小尺寸。
若要建立或引用 Microphone 對象,請使用 Microphone.getMicrophone() 方法。
8.實現netStatusHandler
private function netStatusHandler(evt:NetStatusEvent):void
{
if ( evt.info.code=="NetConnection.Connect.Success" )
{
txt_status.text="fms鏈接成功";
netStream = new NetStream(netConnection);
}
else
{
Alert.show("fms鏈接失敗");
}
}
9.實現錄製按鈕事件
private function recordFLV(evt:MouseEvent):void
{
txt_status.text="開始錄製";
netStream.attachCamera(camera);
netStream.attachAudio(microphone);
netStream.publish(txt_filename.text,"record");
}
代碼說明:
publish () 方法:將音頻流、視頻流和文本消息流從客戶端發送到 Flash Media Server,並可選擇在傳輸期間錄製該流。 此方法僅供指定的流的發佈者使用。
第1個參數:標識該流的字符串。
第2個參數:指定如何發佈該流的字符串。 有效值爲「record」、「append」和「live」。 默認值爲「live」。 (這3個參數區別以下:)
若是傳遞「record」,Flash Player 將發佈並錄製實時數據,同時將錄製的數據保存到名稱與傳遞給 name 參數的值相匹配的新文件中。 該文件保存在服務器上服務器應用程序所在目錄的子目錄中。 若是該文件存在,則覆蓋該文件。
若是傳遞「append」,Flash Player 將發佈並錄製實時數據,同時將錄製的數據附加到名稱與傳遞給 name 參數的值相匹配的文件中,該文件存儲在服務器上包含服務器應用程序的目錄的子目錄中。若是未找到與 name 參數相匹配的文件,則建立一個文件。
若是省略此參數或傳遞「live」,則 Flash Player 將發佈實時數據而不進行錄製。 若是存在名稱與傳遞給 name 參數的值相匹配的文件,則刪除它。
10.中止事件
private function stopRecord(evt:MouseEvent):void
{
txt_status.text="中止錄製";
netStream.close();
}
11.回放事件
private function replayFLV(evt:MouseEvent):void
{
txt_status.text="開始回放";
vd_main.source=appServer+"/"+txt_filename.text;
vd_main.play();
}
12.運行程序
13.代碼下載
http://files.cnblogs.com/aierong/Video1.rar
您收到代碼後,請回到文章下面留言告之一下!要是沒收到,我能夠再發!
提供代碼是爲了互相學習,一塊兒探討!請你們多交流!
1.要是對代碼有什麼疑問,能夠在文章的評論區留言,我會盡我所能答覆您!
2.要是您在運行代碼的過程當中發現bug,或者是您有什麼好的建議和意見,也能夠在文章的評論區留言給我,我會及時更正!
評論區使用提示:
評論區留言(使用高級評論)是能夠貼圖片的,要是有難以描述的問題,能夠貼圖片和文字一塊兒說明
謝謝!
B. MCAD學習
C. 代碼閱讀總結
D. ASP.NET狀態管理
E. DB(數據庫)
F. WAP
G. WinForm
H. Flex
Sql Server2005 Transact-SQL 新兵器學習總結之-總結
MS SQL數據庫備份和恢復存儲過程(增強版本)
sql server中分佈式查詢隨筆(連接服務器(sp_addlinkedserver)和遠程登陸映射(sp_addlinkedsrvlogin)使用小總結)
ASP.NET2.0國際化/本地化應用程序的實現總結(多語言,多文化頁面的實現)
WAP開發資料站(最新更新)
自定義格式字符串隨筆 (IFormattable,IFormatProvider,ICustomFormatter三接口的實現)
Mcad學習筆記之異步編程(AsyncCallback 委託,IAsyncResult接口,BeginInvoke方法,EndInvoke方法的使用小總結)
Mcad學習筆記之經過反射調用類的方法,屬性,字段,索引器(2種方法)
Mcad學習筆記之序列化(2進制和Soap序列 化)
Mcad學習筆記之委託再理解(delegate的構造器,BeginInvoke,EndInvoke,Invoke4個方法的探討)
ASP.NET狀態管理之一(歸納篇)
Flex,Fms學習筆記
但願上面提到的知識對您有所提示,同時歡迎交流和指正
做者: aierong
出處: http://www.cnblogs.com/aierong
貼子以"現狀"提供且沒有任何擔保,同時也沒有授予任何權利!
本文版權歸做者全部,歡迎轉載!
原創技術文章和心得,轉載註明出處!這也是對原創者的尊重!