The
NetStream class offers four main methods for controlling video playback:
pause()
: Pauses playback
of a video stream. If the video is already paused, calling this
method does nothing.
resume()
: Resumes playback
of a video stream that is paused. If the video is already playing,
calling this method does nothing.
seek()
: Seeks the keyframe
closest to the specified location (an offset, in seconds, from the
beginning of the stream).
togglePause()
: Pauses or
resumes playback of a stream.
Note:
There is no
stop()
method.
In order to stop a stream you must pause playback and seek to the
beginning of the video stream.
Note:
The
play()
method does not
resume playback, it is used for loading video files.
The following example demonstrates how to control a video using
several different buttons. To run the following example, create
a new document and add four button instances to your workspace (
pauseBtn
,
playBtn
,
stopBtn
,
and
togglePauseBtn
):
var nc:NetConnection = new NetConnection();
nc.connect(null);
var ns:NetStream = new NetStream(nc);
ns.addEventListener(AsyncErrorEvent.ASYNC_ERROR, asyncErrorHandler);
ns.play("video.flv");
function asyncErrorHandler(event:AsyncErrorEvent):void
{
// ignore error
}
var vid:Video = new Video();
vid.attachNetStream(ns);
addChild(vid);
pauseBtn.addEventListener(MouseEvent.CLICK, pauseHandler);
playBtn.addEventListener(MouseEvent.CLICK, playHandler);
stopBtn.addEventListener(MouseEvent.CLICK, stopHandler);
togglePauseBtn.addEventListener(MouseEvent.CLICK, togglePauseHandler);
function pauseHandler(event:MouseEvent):void
{
ns.pause();
}
function playHandler(event:MouseEvent):void
{
ns.resume();
}
function stopHandler(event:MouseEvent):void
{
// Pause the stream and move the playhead back to
// the beginning of the stream.
ns.pause();
ns.seek(0);
}
function togglePauseHandler(event:MouseEvent):void
{
ns.togglePause();
}
Clicking on the
pauseBtn
button instance while
the video is playing causes the video file to pause. If the video
is already paused, clicking this button has no effect. Clicking
on the
playBtn
button instance resumes video playback
if playback was previously paused, otherwise the button has no effect
if the video was already playing.
Detecting the end of a video stream
In order
to listen for the beginning and end of a video stream, you need
to add an event listener to the NetStream instance to listen for
the
netStatus
event. The following code demonstrates
how to listen for the various codes throughout the video’s playback:
ns.addEventListener(NetStatusEvent.NET_STATUS, statusHandler);
function statusHandler(event:NetStatusEvent):void
{
trace(event.info.code)
}
The previous code generates the following output:
NetStream.Play.Start
NetStream.Buffer.Empty
NetStream.Buffer.Full
NetStream.Buffer.Empty
NetStream.Buffer.Full
NetStream.Buffer.Empty
NetStream.Buffer.Full
NetStream.Buffer.Flush
NetStream.Play.Stop
NetStream.Buffer.Empty
NetStream.Buffer.Flush
The two codes that you want to specifically listen for are “NetStream.Play.Start” and
“NetStream.Play.Stop” which signal the beginning and end of the
video’s playback. The following snippet uses a switch statement
to filter these two codes and trace a message:
function statusHandler(event:NetStatusEvent):void
{
switch (event.info.code)
{
case "NetStream.Play.Start":
trace("Start [" + ns.time.toFixed(3) + " seconds]");
break;
case "NetStream.Play.Stop":
trace("Stop [" + ns.time.toFixed(3) + " seconds]");
break;
}
}
By listening for the
netStatus
event (
NetStatusEvent.NET_STATUS
), you
can build a video player which loads the next video in a playlist
once the current video has finished playing.