package { import flash.display.Sprite; import flash.events.Event; import flash.media.Video; import flash.text.TextField; import flash.text.TextFieldAutoSize; import flash.net.*; import flash.events.NetStatusEvent; import flash.events.SecurityErrorEvent; import flash.events.AsyncErrorEvent; public class Youtube extends Sprite { protected static const VIDEO_ID:String = "6kxDxLAjkO8"; private var url:String; private var txt:TextField; private var variables:URLVariables; private var t:String; private var video:Video; private var netStream:NetStream; private var netConnection:NetConnection; public function Youtube() { connect(); } private function connect():void { var request:URLRequest = new URLRequest( "http://www.youtube.com/get_video_info?video_id=" + VIDEO_ID ); request.method = URLRequestMethod.GET; var yLoader:URLLoader = new URLLoader(); yLoader.dataFormat = URLLoaderDataFormat.VARIABLES; yLoader.addEventListener( Event.COMPLETE, loadCompleteHandler ); yLoader.load( request ); } private function loadCompleteHandler( e:Event ):void { variables = new URLVariables( e.target.data ); t = variables.token; setVideo(); } private function setVideo():void { video = new Video(320, 240); addChild(video); netConnection = new NetConnection(); netConnection.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler); netConnection.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler); netConnection.connect(null); } private function netStatusHandler(evt:NetStatusEvent):void { if(evt.info.code == "NetConnection.Connect.Success") { netStream = new NetStream(netConnection); netStream.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler); netStream.addEventListener(AsyncErrorEvent.ASYNC_ERROR, asyncErrorHandler); netStream.bufferTime = 5; video.attachNetStream(netStream); netStream.play( constructFLVURL() ); } } private function constructFLVURL():String { var str:String = "http://www.youtube.com/get_video.php?"; str += "video_id=" + VIDEO_ID; str += "&t=" + t; return str; } private function securityErrorHandler(evt:SecurityErrorEvent):void { trace(evt); } private function asyncErrorHandler(evt:AsyncErrorEvent):void { trace(evt); } } }