控制視訊播放

Flash Player 9 以及更新的版本,Adobe AIR 1.0 以及更新的版本

NetStream 類別可提供控制視訊播放作業的四個主要方法:

pause() :暫停播放視訊串流。如果已經暫停視訊,呼叫這個方法就不會有任何動作。

resume() :繼續播放被暫停的視訊串流。如果視訊已經在播放,呼叫這個方法就不會有任何動作。

seek() :尋找離指定位置 (與串流開頭之間的位移,以秒為單位) 最近的關鍵影格。

togglePause() :暫停或繼續播放串流。

備註: 這個類別沒有 stop() 方法。若要停止串流,您必須暫停播放並搜尋至視訊串流的開頭。
備註: play() 方法並不會繼續播放,它會用於載入視訊檔案。

下列範例將示範如何使用幾個不同的按鈕來控制視訊。若要執行下列範例,請建立新的文件,並在工作區中增加四個按鈕實體 ( 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 ),您可以建立視訊播放程式,以便在目前的視訊完成播放時,立即載入播放清單中的下一個視訊。