Search code examples
actionscript-3flashflash-media-server

Use flash media plyer like youtube to play back netsteam from fms


I am using adobe FMS 4.5 to record video from webcam and playback netsream from fms in same application.

my client side Action Script is like

package
{
    import fl.controls.Button;
    import flash.display.Sprite;
    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 mytest3 extends Sprite
    {

        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 recordBtn:Button;
        private var stopBtn:Button;
        private var playBackBtn:Button;
        private var textInput:TextInput;
        private var timestamp:Date    = new Date();
        private var fileName:String;


        //Constructor
        function mytest3 ()
        {
            //NetConnection.defaultObjectEncoding = flas    h.net.ObjectEncoding.AMF0;
            nc=new NetConnection();
            nc.addEventListener (NetStatusEvent.NET_STATUS,checkConnect);
            rtmpNow="rtmp://localhost/test1";
            //rtmpNow="rtmp://192.169.1.25/test1";

            nc.connect (rtmpNow);
            addMedia ();
            addUI ();
            recordBtn.addEventListener (MouseEvent.CLICK,startRecord);
            stopBtn.addEventListener (MouseEvent.CLICK,stopRecord);
            playBackBtn.addEventListener(MouseEvent.CLICK,playBack);
    }

        private function addMedia ():void
        {
            cam=Camera.getCamera();
            cam.setMode (240,180,24);
            cam.setQuality (0,100);
            mic=Microphone.getMicrophone();
            vid1=new Video(cam.width,cam.height);
            vid1.attachCamera (cam);
            addChild (vid1);
            vid1.x=100;
            vid1.y=50;
        }

        private function addUI ():void
        {
            recordBtn=new Button();
            recordBtn.label="Start Recording";
            recordBtn.x=100;
            recordBtn.y=50+(cam.height) +5;
            recordBtn.width=70;
            addChild (recordBtn);

            stopBtn=new Button();
            stopBtn.label="Stop Recording";
            stopBtn.x=recordBtn.x+85;
            stopBtn.y=recordBtn.y;
            stopBtn.width=75;
            addChild (stopBtn);

            playBackBtn=new Button();
            playBackBtn.label="PlayBack";
            playBackBtn.x=stopBtn.x+85;
            playBackBtn.y=recordBtn.y;
            playBackBtn.width=75;
            addChild(playBackBtn);

        }

        private function checkConnect (e:NetStatusEvent):void
        {
            msg=(e.info.code=="NetConnection.Connect.Success");
            if (msg)
            {
                ns = new NetStream(nc);
            }
        }

        private function startRecord (e:Event):void
        {
            if (ns)
            {
                //recordBtn.label="Recording";
                recordBtn.visible=false;
                ns.attachAudio (mic);
                ns.attachCamera (cam);
                fileName = String("videos"+timestamp.getTime());
                ns.publish(fileName,"record")

            }
        }

        private function stopRecord (e:Event):void
        {
            //recordBtn.label="Recorded"
            recordBtn.visible=false;;
            stopBtn.label="Stoped";
            ns.close ();
        }
        private function playBack(e:Event):void 
        {
            playBackBtn.label="Playing Back";
            stopBtn.visible=false;
            var nsPlayer:NetStream = new NetStream(nc);
            //nsPlayer.play("my.flv");
            var vid:Video = new Video(cam.width,cam.height);
            vid.x = playBackBtn.x+30;
            vid.y = vid1.y;
            vid.attachNetStream(nsPlayer);
            nsPlayer.play(fileName);
            vid.smoothing=true;
            addChild(vid);
        }
    }
}  

Recording and as well as playing back is working fine. I want that when it play back it should look like youtube video with controls like play,pause,seekbar.


Solution

  • You'd either need to create those controls yourself, or use a flash component (FLVplayback) or Strobe (though I don't think there's an easy way to embed strobe in an existing flash project with the swc, maybe someone else can comment or edit this to clarify that)

    FLVplayback can be skinned to look how you want