Created
June 18, 2009 06:48
-
-
Save chooh/131758 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="utf-8"?> | |
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" applicationComplete="init();" frameRate="30"> | |
<mx:Script> | |
<![CDATA[ | |
import mx.core.UIComponent; | |
private var _connection : NetConnection; | |
private var _stream : NetStream; | |
private var _video : Video; | |
private var _bitmapArray:Array = new Array(); | |
private var _bitmapCurr:Array = new Array(); | |
private var _bitmap:Bitmap = new Bitmap(); | |
private var _play:Boolean = false; | |
private var _index:uint = 0; | |
private function init():void | |
{ | |
stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDownStage); | |
addEventListener(Event.ENTER_FRAME, onEnterFrame); | |
_connection = new NetConnection(); | |
_connection.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus); | |
_connection.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurityError); | |
_connection.objectEncoding = ObjectEncoding.AMF0; | |
_connection.connect("rtmp://192.168.4.240/"); | |
} | |
private function onNetStatus( event : NetStatusEvent ) : void | |
{ | |
switch(event.info.code) | |
{ | |
case "NetConnection.Connect.Success": | |
_stream = new NetStream(_connection); | |
_stream.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus); | |
_stream.addEventListener(AsyncErrorEvent.ASYNC_ERROR, onAsyncError); | |
_stream.play("ntv-tm/live"); | |
_video = new Video(512, 384); | |
_video.attachNetStream(_stream); | |
_video.deblocking = 2; | |
_video.smoothing = true; | |
_cont.rawChildren.addChild(_video); | |
_short.rawChildren.addChild(_bitmap); | |
break; | |
case "NetStream.Timestamp": | |
break; | |
case "NetStream.Play.StreamNotFound": | |
trace("File not found"); | |
break; | |
case "NetStream.Play.Start": | |
_play = true; | |
break; | |
} | |
} | |
private function onSecurityError( event : SecurityErrorEvent ) : void | |
{ | |
} | |
private function onAsyncError( event : AsyncErrorEvent ) : void | |
{ | |
} | |
private function onEnterFrame(evt:Event):void | |
{ | |
if(!_play) return; | |
try | |
{ | |
var bit:BitmapData = new BitmapData(_video.width, _video.height); | |
bit.draw(_video); | |
_bitmapArray.push(bit); | |
if(_bitmapArray.length == 50) | |
_bitmapArray.shift(); | |
if(_bitmapCurr.length < 100) | |
_bitmapCurr.push(bit); | |
_count.text = String(_bitmapCurr.length); | |
} | |
catch(e:Error) | |
{ | |
trace("*", _stream.bufferLength); | |
} | |
} | |
private function onClickPrev():void | |
{ | |
if(0 == _index) return; | |
_index--; | |
redrawScreenshort(); | |
} | |
private function onClickPause():void | |
{ | |
_bitmapCurr = _bitmapArray.concat(); | |
_index = _bitmapCurr.length - 1; | |
redrawScreenshort(); | |
} | |
private function onClickNext():void | |
{ | |
if(_bitmapCurr.length == _index) return; | |
_index++; | |
redrawScreenshort(); | |
} | |
private function redrawScreenshort():void | |
{ | |
_bitmap.bitmapData = _bitmapCurr[_index]; | |
_curr.text = String(_index - 48); | |
} | |
private function onKeyDownStage(evt:KeyboardEvent):void | |
{ | |
switch(evt.keyCode) | |
{ | |
case Keyboard.LEFT: | |
onClickPrev(); | |
break; | |
case Keyboard.RIGHT: | |
onClickNext(); | |
break; | |
case Keyboard.SPACE: | |
onClickPause(); | |
break; | |
} | |
} | |
]]> | |
</mx:Script> | |
<mx:VBox width="100%" height="100%" horizontalAlign="right"> | |
<mx:HBox width="100%" height="384"> | |
<mx:Canvas id="_cont" width="512" height="384"> | |
</mx:Canvas> | |
<mx:Canvas id="_short" width="512" height="384"> | |
</mx:Canvas> | |
</mx:HBox> | |
<mx:HBox width="512"> | |
<mx:Button id="_prev" label="Prev" click="onClickPrev();"/> | |
<mx:Button id="_pause" label="Pause" click="onClickPause();"/> | |
<mx:Button id="_next" label="Next" click="onClickNext();"/> | |
<mx:Label id="_count" text="***"/> | |
<mx:Label id="_curr" text="***"/> | |
</mx:HBox> | |
</mx:VBox> | |
</mx:Application> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment