快速連結

2011年4月5日

[回鍋]FMS4 + AS3 的錄影小程式

FLASH來作錄影功能,比拍照還要困難許多,基本上就要先架設FMS,才能運行錄影的功能。
以下是筆記──



參考資料:[文章]Adobe Flash Media Server即時影音串流服務

首先,先安裝FMS,去ADOBE那裡註冊之後就可以下載FMS測試版哩!
安裝完畢後,可以到 安裝路徑/applications 下看到live與vod與其他...

以下是我經歷過的錯誤與因應措施:
錯誤:NetConnection.Connect.Rejected
解決:你位置寫錯了,FMS4要改成rtmfp://localhost/資料夾位置。
錯誤:NetStream.Record.NoAccess
解決:這個時候我使用的位置是rtmfp://localhost/live,該資料夾內,有個main.far檔案,解壓縮後可以看見Application.xml檔案,把這檔案的no改成yes、false改成true,因為這屬性參數設定的是拒絕遠端錄影,我們只是把它改成能夠使用。之後要壓縮回去成main.far就是了!
錯誤:NetConnection找不到函數onBWDone
解決:只好指定NetConnection的client為此類別,然後新增一個onBWDone的函式了Orz

接下來是程式碼──

  import flash.display.*;
  import flash.events.NetStatusEvent;
  import flash.events.MouseEvent;
  import flash.media.Video;
  import flash.media.Camera;
  import flash.net.NetConnection;
  import flash.net.NetStream;
  import flash.net.ObjectEncoding;

  public class _makeMovie extends MovieClip{
    var ns:NetStream;
    var myvideo:Video;
    var mycam:Camera;   
    var nc:NetConnection;
    function _makeMovie() {
      var sw:Number = 640;
      myvideo = new Video(sw,sw*3/4);
      mycam = Camera.getCamera();
      nc = new NetConnection();
      
      mycam.setMode(sw,sw*3/4, 25);
      mycam.setQuality(0, 10); //設定品質
      
      myvideo.attachCamera(mycam); //畫面顯示
      addChildAt(myvideo,0);
      
      nc.objectEncoding=ObjectEncoding.AMF0; //伺服器編碼FMS要用AMF0
      nc.client = this;
      nc.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler); //錯誤訊息的處理
      nc.connect("rtmfp://localhost/live"); //會開啟伺服器的連線。
      Record_btn.addEventListener(MouseEvent.CLICK,recordevent); //錄影按鈕
      stop_btn.addEventListener(MouseEvent.CLICK,stopevent);  //結束按鈕
    }

    function playStreamVideo():void {                       //確認連線否
      trace("連線");
      ns=new NetStream(nc);
      //ns.addEventListener(NetStatusEvent.NET_STATUS, playStatusHandler);
      ns.client=this;
      ns.attachCamera(mycam);//畫面串流
    }
  
    function recordevent(e:MouseEvent):void {
 ns.publish("test","record");
    }
  
    function stopevent(e:MouseEvent):void {
        ns.close();
    }
  
    function netStatusHandler(event:NetStatusEvent):void {
       trace(event.info.code);
       if(event.info.code == "NetConnection.Connect.Success")    //連線成功
          playStreamVideo();      //播放
    }
    public function onBWDone():void{}
  }

2 則留言:

  1. http://jiucengtianshang.blog.163.com/blog/static/6768306720112200492347/ 可以參考這個 就不用FMS了

    回覆刪除
  2. 生成SWF嗎?確實是個好方法呢OuO!!
    感激提供!

    回覆刪除

歡迎大家留言提問,我會答的都會盡力回答!
如果太久沒出現回應就是我又忘記回來看留言了TAT