Fms3和Flex打造線上視頻錄製和回放

來源:互聯網
上載者:User
Flex,Fms3系列文章導航
  1. Flex,Fms3相關文章索引

 

本篇是視訊交談,會議開發執行個體系列文章的第2篇,該系列所有文章連結如下:
http://www.cnblogs.com/aierong/archive/2008/12/30/Flex.html#sp

 

1.關於Fms3和Flex的簡單應用可以看我上篇
http://www.cnblogs.com/aierong/archive/2009/01/09/flex_fms_chat.html

 

2.準備工作
在fms安裝目錄下的application中,建立一個檔案夾test_video1,然後啟動fms伺服器

 

3.開啟Fb3,建立一個項目

 

4.在主mxml中拖動控制項,介面如下:

具體代碼如下:
<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"/>

 

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;

音頻流或視頻流的一般工作流程:以下步驟簡要介紹了用於發布即時音頻和視頻的工作流程:

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();
}

代碼比較簡單,就是做些初始化工作

 

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,或者是您有什麼好的建議和意見,也可以在文章的評論區留言給我,我會及時更正!

評論區使用提示:
評論區留言(使用進階評論)是可以貼圖片的,要是有難以描述的問題,可以貼圖片和文字一起說明
謝謝!

 

 

 

收藏與分享

收藏到QQ書籤  添加到百度搜藏 {
function onclick()
{
function onclick()
{
function onclick()
{
function onclick()
{
function onclick()
{
window.open('http://myweb.cn.yahoo.com/popadd.html?url='+encodeURIComponent(document.location.href)+'&title='+encodeURIComponent(document.title), 'Yahoo','scrollbars=yes,width=440,height=440,left=80,top=80,status=yes,resizable=yes');
}
}
}
}
}
}">添加到雅虎收藏

RSS訂閱我 什麼是RSS?

     
        
     
     

東莞.net俱樂部

歡迎您的加入

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.