I have a simple setup of a videoloader. All seems to be working well except for my seekbar (movieclip instance: scrubber, and the seekbar = scrubber.slider):
package
{
import flash.display.MovieClip;
import com.greensock.loading.*;
import com.greensock.loading.display.*;
import com.greensock.*;
import com.greensock.events.LoaderEvent;
import flash.events.MouseEvent;
import flash.events.Event;
import flash.geom.Rectangle;
public class VideoPlayer extends MovieClip
{
public var scrubber:MovieClip = new MovieClip ;// the seekbar
public var playPause:MovieClip = new MovieClip ;
// check whether you are displaying the time or changing the time
private var seeking:Boolean = false;
private var video:VideoLoader;
public function VideoPlayer ():void
{
init ();
}
public function init ():void
{
//create a VideoLoader
video = new VideoLoader("song.flv",{name:"myVideo",container:this,width:400,height:300,scaleMode:"proportionalInside",bgColor:0x000000,autoPlay:false,volume:1,requireWithRoot:this.root});
//start loading
video.load ();
//add a CLICK listener to a button that causes the video to toggle its paused state.
playPause.addEventListener (MouseEvent.CLICK, togglePause);
scrubber.slider.buttonMode = true;
scrubber.slider.addEventListener (MouseEvent.MOUSE_DOWN, scrubToTime);
stage.addEventListener (MouseEvent.MOUSE_UP, stopScrubToTime);
addEventListener (Event.ENTER_FRAME, updateVideoTime, false, 0, true);
//scrubber.addEventListener(MouseEvent.CLICK, onSeekToClick, false, 0, true);
}
private function updateVideoTime (e:Event):void
{
// moves the seeker and progress together
if (! seeking)
{
scrubber.slider.x = (video.videoTime /video.duration)*scrubber.width;
}
else
{
seekToPoint ();
trace("seek to point" + scrubber.slider.x);
}
}
private function seekToPoint ():void
{
var c:Number = (scrubber.slider.x);
var value:Number = Math.abs(c / scrubber.width);
video.gotoVideoTime (value*video.duration, true);
}
private function scrubToTime (e:Event):void
{
// constrain to rectangle
scrubber.slider.startDrag (false, new Rectangle(0,0,scrubber.width - scrubber.slider.width, 0));
seeking = true;
}
private function stopScrubToTime (e:Event):void
{
scrubber.slider.stopDrag ();
seeking = false;
}
private function togglePause (event:MouseEvent):void
{
if (video.videoPaused)
{
video.playVideo();
playPause.gotoAndStop("pause");
}
else
{
video.pauseVideo();
playPause.gotoAndStop("play");
}
}
private function onSeekToClick(e:MouseEvent):void
{
var seekPoint:Number = this.mouseX;
if (seekPoint < scrubber.x + scrubber.width)
{
removeEventListener(Event.ENTER_FRAME, updateVideoTime);
seeking = true;
scrubber.slider.x = seekPoint;
seekToPoint();
seeking = false;
addEventListener(Event.ENTER_FRAME, updateVideoTime, false, 0, true);
}
}
}
}
I think there is something I don't understand about VideoLoaders methods...especially in my updateVideoTime function. The seekbar/scrubber seems to scrub around my video fairly well until I reach near the end of the video (either by playing to that point or seeking/scrubbing to that point). When the seekbar reaches the end, it suddenly just slides off screen/stage and never returns.
I would like the seekbar to just stop at the end of my bar when the video stops...