Skip to content

Instantly share code, notes, and snippets.

@chooh
Created June 18, 2009 06:48
Show Gist options
  • Save chooh/131758 to your computer and use it in GitHub Desktop.
Save chooh/131758 to your computer and use it in GitHub Desktop.
<?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