Controlling video playback

Flash Player 9 and later, Adobe AIR 1.0 and later

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.