Combined Record and Playback Application

June 4th, 2008 posted by Marcio Rosa
package
{
  import fl.controls.Button;
  import fl.controls.TextInput;
  import flash.display.MovieClip;
  import flash.net.NetConnection;
  import flash.net.NetStream;
  import flash.events.NetStatusEvent;
  import flash.events.MouseEvent;
  import flash.events.Event;
  //import flash.net.ObjectEncoding;
  import flash.media.Camera;
  import flash.media.Microphone;
  import flash.media.Video;
 
  public class RecordPlay extends MovieClip
  {
        private var nc:NetConnection;
        private var ns:NetStream;
        private var rtmpNow:String;
        private var msg:Boolean;
        private var cam:Camera;
        private var mic:Microphone;
        private var vid1:Video;
        private var vid2:Video;
        private var recordBtn:Button;
        private var stopBtn:Button;
        private var playBtn:Button;
        private var textInput:TextInput;
        private var metaSniffer:Object;
        private var dur:Number;
 
        function RecordPlay ()
        {
             //NetConnection.defaultObjectEncoding = flash.net.ObjectEncoding.AMF0;
             nc=new NetConnection();
             nc.addEventListener (NetStatusEvent.NET_STATUS,checkConnect);
             rtmpNow="rtmp://192.168.0.11/vid2/recordings";
             //rtmpNow="rtmp:/vid2/recordings";
             nc.connect (rtmpNow);
             addMedia ();
             addUI ();
             recordBtn.addEventListener (MouseEvent.CLICK,startRecord);
             stopBtn.addEventListener (MouseEvent.CLICK,stopAll);
             playBtn.addEventListener (MouseEvent.CLICK,startPlay);
        }
 
        private function checkConnect (e:NetStatusEvent):void
        {
             msg=(e.info.code=="NetConnection.Connect.Success");
             if (msg)
             {
                   ns = new NetStream(nc);
                   metaSniffer=new Object();
                   ns.client=metaSniffer;
                   metaSniffer.onMetaData=getMeta;
             }
        }
 
        private function getMeta (mdata:Object):void
        {
             //Dummy to avoid error
        }
 
        private function addMedia ():void
        {
             cam=Camera.getCamera();
             cam.setKeyFrameInterval (12);
             cam.setMode (240,180,15);
             cam.setQuality (0,80);
             mic=Microphone.getMicrophone();
             mic.rate=11;
             videoSetup ();
        }
 
        private function videoSetup ():void
        {
             vid1=new Video(cam.width,cam.height);
             vid1.attachCamera (cam);
             vid1.x=100;
             vid1.y=70;
             addChild (vid1);
             vid2=new Video(cam.width,cam.height);
             vid2.x=vid1.x+vid1.width+10;
             vid2.y=vid1.y;
             addChild (vid2);
        }
 
        private function addUI ():void
        {
             recordBtn=new Button();
             recordBtn.label="Record";
             recordBtn.x=100;
             recordBtn.y=70+(cam.height) +5;
             recordBtn.width=70;
             addChild (recordBtn);
             stopBtn=new Button();
             stopBtn.label="Stop";
             stopBtn.x=recordBtn.x+100;
             stopBtn.y=recordBtn.y;
             stopBtn.width=60;
             addChild (stopBtn);
             playBtn=new Button();
             playBtn.label="Play";
             playBtn.x=stopBtn.x+85;
             playBtn.y=recordBtn.y;
             playBtn.width=60;
             addChild (playBtn);
             textInput=new TextInput();
             textInput.x=recordBtn.x;
             textInput.y=recordBtn.y + 30;
             addChild (textInput);
        }
 
        private function startRecord (e:Event):void
        {
             if (ns)
             {
                   recordBtn.label="Recording";
                   ns.attachAudio (mic);
                   ns.attachCamera (cam);
                   ns.publish (textInput.text,"record");
             }
        }
 
        private function stopAll (e:Event):void
        {
             playBtn.label="Play";
             recordBtn.label="Record";
             ns.close ();
        }
 
        private function startPlay (e:Event):void
        {
             if (ns)
             {
                   playBtn.label="Playing";
                   vid2.attachNetStream (ns);
                   ns.play (textInput.text);
             }
        }
  }
}