第二十六章

5.6.4 播放進度條的實現邏輯

按鈕的邏輯已經完成,現在我們開始討論播放進度條的實現邏輯。

首先需要知道當前播放的視頻文件的總長度,這裏我們可以使用Red5的ApplicationAdapter對象的public方法getStreamLength來實現。

定義一個Number類型的全局變量streamLength,來保存視頻的總長度:

var streamLength: Number;

當視頻流開始播放後,我們利用NetConnection對象調用Red5服務器端的getStreamLength方法來獲得視頻流的長度,注意這裏我們需要使用Responder對象作為回調容器來接收服務器端方法返回的值。

定義一個Responder類型的全局變量ncRes:

var ncRes:Responder;

然後在NetStream開始播放後獲取視頻流的長度,注意這裏我們需要給Responder對象綁定一個回調函數onResult,用來獲得服務器端的返回值:

ns =new NetStream(nc);

ns.addEventListener(NetStatusEvent.NET_STATUS, nsNetStatus);

ns.play ("rtmp://192.168.1.4/videoapp/test");

ncRes = new Responder(onResult);

nc.call("getStreamLength", ncRes, "test" );

function onResult(result:Object)

{

streamLength = Number(result.toString());

}

獲得視頻流長度後,下一步需要跟蹤當前的NetStream的播放進度和播放情況,我們將使用NetStream的兩個事件onMetaData和onPlayStatus。注意:這兩個事件的調用必須通過回調對象client來完成。

指定NetStream的client對象為當前Fla文件:

ns.client = this;

聲明兩個public 函數onMetaData和onPlayStatus:

public function onMetaData(info:Object)

{

//to do...

}

public function onPlayStatus(info:Object)

{

//to do...

}

在事件onMetaData裏,我們可以通過傳遞對象的一些屬性來了解播放流的情況,事件onMetaData的屬性如表5-4所示。

表5-4 事件onMetaData的屬性

Tip:收藏+分享Red5視頻應用開發指南(精),是对网站最大的肯定和支持。