控制视频播放

Flash Player 9 和更高版本,Adobe AIR 1.0 和更高版本

NetStream 类提供了四个用于控制视频播放的主要方法:

pause() :暂停播放视频流。如果视频已经暂停,则调用此方法将不会执行任何操作。

resume() :恢复播放已暂停的视频流。如果视频已在播放,则调用此方法将不会执行任何操作。

seek() :搜索与指定位置(从流的开始处算起的偏移,以秒为单位)最靠近的关键帧。

togglePause() :暂停或恢复播放流。

注: 没有 stop() 方法。为了停止视频流,必须暂停播放并找到视频流的开始位置。
注: play() 方法不会恢复播放,它用于加载视频文件。

以下示例演示如何使用多个不同的按钮控制视频。若要运行下面的示例,请创建一个新文档,并在工作区中添加 4 个按钮实例( pauseBtn playBtn stopBtn 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(); 
}

播放视频的同时单击 pauseBtn 按钮实例会导致视频文件暂停。如果视频已经暂停,则单击此按钮不会执行任何操作。如果之前暂停了播放,则单击 playBtn 按钮实例会恢复视频播放;如果视频已在播放,则单击该按钮不会执行任何操作。

检测视频流的末尾

为了侦听视频流的开始和末尾,需要向 NetStream 实例添加一个事件侦听器以侦听 netStatus 事件。以下代码演示如何在视频播放过程中侦听不同代码:

ns.addEventListener(NetStatusEvent.NET_STATUS, statusHandler); 
function statusHandler(event:NetStatusEvent):void 
{ 
    trace(event.info.code) 
}

上面这段代码的输出如下:

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

您要专门侦听的两段代码为“NetStream.Play.Start”和“NetStream.Play.Stop”,它们会在视频播放的开始和末尾发出信号。下面的代码片断使用 switch 语句来过滤这两段代码并输出一条消息:

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; 
    } 
}

通过侦听 netStatus 事件 ( NetStatusEvent.NET_STATUS ),您可以生成一个视频播放器,它在当前视频完成播放后加载播放列表中的下一个视频。