package { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.Sprite; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.events.*; import flash.media.Camera; import flash.media.Video; import flash.text.*; import flash.utils.Timer; public class TimeLapseExample extends Sprite { private var camera:Camera; private var video:Video; private var bmpDisplay:Bitmap; private var a_images:Array = new Array(); private var numIndex:Number = 0; private var tmrRecord:Timer; private var tmrShow:Timer; private var numDelay:Number = 1000; private var spr:Sprite; private var txtField:TextField; public function TimeLapseExample() { camera = Camera.getCamera(); camera.setMode(500,350,32); if (camera != null) { camera.addEventListener(StatusEvent.STATUS, statusHandler); video = new Video(500, 350); video.x = 25; video.attachCamera(camera); this.addChild(video); } else { trace("No camera connected"); } spr = new Sprite(); spr.graphics.beginFill(0xFFFFFF,1); spr.graphics.drawRect(220,365,110,20); txtField = new TextField(); txtField.autoSize = TextFieldAutoSize.CENTER; var fmt:TextFormat = new TextFormat(); fmt.font = "Verdana"; fmt.color = 0x000000; fmt.size = 10; txtField.defaultTextFormat = fmt; txtField.text = "Show Time Lapse"; txtField.x = 224; txtField.y = 365; txtField.selectable = false; spr.addChild(txtField); this.addChild(spr); } private function statusHandler(evt:StatusEvent) { if(evt.code == "Camera.Unmuted") { beginRecord(); } } private function beginRecord(evt:MouseEvent=null) { //starts timer to record frames, sets a max of 300 captures and a time interval for recording tmrRecord = new Timer(numDelay,300); tmrRecord.addEventListener("timer",recordFrame); tmrRecord.start(); spr.addEventListener(MouseEvent.CLICK,showFrames); } private function recordFrame(evt:TimerEvent) { //pushes BitmapData of video into array var bmpGetFrame:BitmapData = new BitmapData(stage.stageWidth,stage.stageHeight,true,0x000000); bmpGetFrame.draw(video); a_images.push(bmpGetFrame); } private function showFrames(evt:MouseEvent) { //stop recording timer tmrRecord.stop(); //display first image in array numIndex = 0; bmpDisplay = new Bitmap(a_images[0]); this.addChild(bmpDisplay); //set playback timer tmrShow = new Timer(31,a_images.length); tmrShow.addEventListener("timer",showFrame); tmrShow.start(); } private function showFrame(evt:TimerEvent) { //show image in array bmpDisplay = new Bitmap(a_images[numIndex]); this.addChild(bmpDisplay); //remove last image this.removeChildAt(2); numIndex++; if(numIndex >= a_images.length) { bmpDisplay.addEventListener(MouseEvent.CLICK,showFrames); resetControls(); } } private function resetControls() { txtField.text = "Replay"; tmrShow.stop(); } private function reset(evt:MouseEvent) { a_images = new Array(); txtField.text = "Show Time Lapse"; } } }