turn videotube into an abstract class so that we can implement the youtube api

This commit is contained in:
Jeremy Penner 2011-05-04 16:24:09 -07:00
parent c11ccce4ee
commit eb1974a955
5 changed files with 91 additions and 68 deletions

View file

@ -44,12 +44,12 @@ package
}
private function onDrawBegin(e: Event): void
{
videotube.stream.pause();
videotube.pause();
}
private function onDrawEnd(e: Event): void
{
gamedisc.AddQte(new Qte(sketchShape.rgpoint, videotube.stream.time));
videotube.stream.resume();
gamedisc.AddQte(new Qte(sketchShape.rgpoint, videotube.time()));
videotube.resume();
}
}

View file

@ -18,6 +18,10 @@ package
{
rgqte.splice(Math.abs(Util.binarySearch(rgqte, qte, Qte.compare)), 0, qte);
}
public function CreateVideotube():Videotube
{
return new VideotubeFlv(this);
}
public function ToJson():Object
{
var jsonRgqte:Array = [];

View file

@ -21,7 +21,7 @@ package
public function Main():void
{
gamedisc = new Gamedisc("The Last Eichhof - Longplay.flv");
videotube = new Videotube(gamedisc);
videotube = gamedisc.CreateVideotube();
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
@ -56,7 +56,7 @@ package
gameplayer = new GamePlayer(videotube, gamedisc);
addChild(gameplayer);
}
videotube.stream.seek(0);
videotube.seek(0);
}
private function onKey(key:KeyboardEvent):void
{

View file

@ -1,74 +1,19 @@
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.media.Video;
import flash.net.NetConnection;
import flash.net.NetStream;
import flash.events.EventDispatcher;
/**
* ...
* @author jjp
*/
public class Videotube extends Sprite
{
private var flv:Video;
private var gamedisc:Gamedisc;
public var stream:NetStream;
private var iqte:int;
private var secPrev:Number;
public function Videotube(gamedisc:Gamedisc)
{
super();
this.gamedisc = gamedisc;
iqte = 0;
secPrev = 0;
addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e: Event):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
addEventListener(Event.REMOVED_FROM_STAGE, cleanup);
flv = new Video(stage.stageWidth, stage.stageHeight);
addChild(flv);
var conn:NetConnection = new NetConnection();
conn.connect(null);
stream = new NetStream(conn);
stream.client = new Object();
flv.attachNetStream(stream);
stage.addEventListener(Event.ENTER_FRAME, tick);
}
private function cleanup(e: Event):void
{
removeEventListener(Event.REMOVED_FROM_STAGE, cleanup);
stage.removeEventListener(Event.ENTER_FRAME, tick);
}
private function tick(e: Event):void
{
var secNow:Number = stream.time;
if (secNow > secPrev && secPrev >= 0)
{
while(iqte < gamedisc.rgqte.length)
{
var qte:Qte = gamedisc.rgqte[iqte];
if (qte.secTrigger > secNow)
break;
if (qte.secTrigger > secPrev)
dispatchEvent(new EventQte(qte));
iqte ++;
}
}
else
{
iqte = 0;
}
secPrev = secNow;
}
public function play():void
{
stream.play(gamedisc.urlVideo);
}
public function play():void { throw "not implemented"; }
public function pause():void { throw "not implemented"; }
public function resume():void { throw "not implemented"; }
public function time():Number { throw "not implemented"; }
public function seek(sec:Number):void { throw "not implemented"; }
}
}

74
src/VideotubeFlv.as Normal file
View file

@ -0,0 +1,74 @@
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.media.Video;
import flash.net.NetConnection;
import flash.net.NetStream;
/**
* ...
* @author jjp
*/
public class VideotubeFlv extends Videotube
{
private var flv:Video;
private var gamedisc:Gamedisc;
private var stream:NetStream;
private var iqte:int;
private var secPrev:Number;
public function VideotubeFlv(gamedisc:Gamedisc)
{
super();
this.gamedisc = gamedisc;
iqte = 0;
secPrev = 0;
addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e: Event):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
addEventListener(Event.REMOVED_FROM_STAGE, cleanup);
flv = new Video(stage.stageWidth, stage.stageHeight);
addChild(flv);
var conn:NetConnection = new NetConnection();
conn.connect(null);
stream = new NetStream(conn);
stream.client = new Object();
flv.attachNetStream(stream);
stage.addEventListener(Event.ENTER_FRAME, tick);
}
private function cleanup(e: Event):void
{
removeEventListener(Event.REMOVED_FROM_STAGE, cleanup);
stage.removeEventListener(Event.ENTER_FRAME, tick);
}
private function tick(e: Event):void
{
var secNow:Number = stream.time;
if (secNow > secPrev && secPrev >= 0)
{
while(iqte < gamedisc.rgqte.length)
{
var qte:Qte = gamedisc.rgqte[iqte];
if (qte.secTrigger > secNow)
break;
if (qte.secTrigger > secPrev)
dispatchEvent(new EventQte(qte));
iqte ++;
}
}
else
{
iqte = 0;
}
secPrev = secNow;
}
public override function play():void { stream.play(gamedisc.urlVideo); }
public override function pause():void { stream.pause(); }
public override function resume():void { stream.resume(); }
public override function time():Number { return stream.time; }
public override function seek(sec:Number):void { stream.seek(sec); }
}
}