package org.webr3.video { import flash.events.Event; import flash.net.URLLoader; import flash.net.URLRequest; import mx.controls.VideoDisplay; import mx.events.VideoEvent; public class CleverVideo extends VideoDisplay { private var url:String; private var loader:URLLoader; private var formatTest:uint = 22; private var tubeID:String; private var tubeT:String; public function CleverVideo( url:String ) { super(); this.url = url; cleverLoad(); } private function cleverLoad():void { if( url.search( /(http|https):\/\/(www.)?youtube.com\// ) == 0 ) { loader = new URLLoader(); addEventListener( VideoEvent.STATE_CHANGE , videoStateChanged ); loader.addEventListener( Event.COMPLETE , parseData ); loader.load( new URLRequest( url ) ) } else { source = url; play(); } } private function parseData( event:Event ):void { var content:String = loader.data; tubeID = content.match( /"video_id": "([^"]+)",/ )[1]; tubeT = content.match( /"t": "([^"]+)",/ )[1]; loadVideo(); } private function loadVideo():void { if( formatTest == 22 || formatTest == 18 ) { source = 'http://www.youtube.com/get_video?video_id=' + tubeID + '&t=' + tubeT + '&fmt=' + formatTest; } else { source = 'http://www.youtube.com/get_video?video_id=' + tubeID + '&t=' + tubeT; } try { play(); } catch ( error:Error ) { load(); }; } private function videoStateChanged( event:VideoEvent ):void { if( event.state == VideoEvent.CONNECTION_ERROR && bytesTotal == -1 ) { event.stopImmediatePropagation(); if( formatTest == 22 ) { formatTest = 18; } else if( formatTest == 18 ) { formatTest = 1; } loadVideo(); } } } }