前面學到「影片播放的基本控制」,現在來記錄一下「資料」的部份,包含了影片的長度,進度條…等。

效果預覽:




程式學習:


資料與時間部分



  1. 抓取影片的中繼資料
    NetStream.client.onMetaData = 函式名稱;
    function 函式名稱(e:Object):void
    {
    ...e.duration...
    }

  2. duration」可抓取影片總時間(秒:int)。

  3. 利用數字與文字的轉換顯示時間。

  4. NetStream.time」為目前的時間(秒:int)。


進度部分



  1. 可以先設定豆豆(鼻涕實在不知道要叫它什麼)起點與終點,做為播放時間與進度比對的依據。

  2. 利用ENTER_FRAME函式持續偵測現在的播放時間,移動豆豆的位置,公式為:
    原始位置+(最終位置-原始位置)*(現在時間(持續變化)/總時間)


製作:



  1. 依序放入進度條進度豆豆時間動態文字

  2. 實體名稱:
    進度豆豆為「PP_btn」;
    時間動態文字為「time_text」。

  3. 輸入程式碼:


//建立串流容器
var a_nc:NetConnection = new NetConnection();
a_nc.connect(null);
var a_ns:NetStream = new NetStream(a_nc);
a_ns.client = new Object ();
var a_video:Video = new Video();//設定影片參數
a_video.attachNetStream(a_ns);
addChild(a_video);
a_video.width = 500;
a_video.height = 280;
a_ns.play("影片路徑");
a_ns.pause();

//設定變數;
var X1:Number = 14;//進度拖曳起點
var X2:Number = 311;//進度拖曳終點

//時間變數
var Tmin:String;
var Tsec:String;
var Nmin:String;
var Nsec:String;

//影片播放長度
var TimeSum:int;//總時間變數
a_ns.client.onMetaData = videoPlayingProgress;
function videoPlayingProgress(e:Object):void
{
TimeSum = e.duration;
var TSnum:int;
var TMnum:int;
TSnum = TimeSum % 60;
TMnum = TimeSum / 60;
if (TSnum < 10)
{
Tsec = "0" + String(Math.floor(TimeSum%60));
}
else
{
Tsec = String(Math.floor(TimeSum%60));
}
if (TMnum < 10)
{
Tmin = "0" + String(Math.floor(TimeSum/60));
}
else
{
Tmin = String(Math.floor(TimeSum/60));
}
}

//影片開始播放的時機
this.addEventListener(Event.ENTER_FRAME,MVloadComplete);
function MVloadComplete(e:Event):void
{
var aa = (a_ns.bytesLoaded / a_ns.bytesTotal)*100;
if (aa>20)
{
a_ns.resume();
this.addEventListener(Event.ENTER_FRAME,videoPlayingProgressing);
this.removeEventListener(Event.ENTER_FRAME,MVloadComplete);
}
}

//利用ENTER_FRAME偵測時間
function videoPlayingProgressing(e:Event):void
{
var aa=(a_ns.time/TimeSum)*100;//播放進度百分比(以時間做換算)
var NSnum:int;
var NMnum:int;
NSnum = a_ns.time % 60;
NMnum = a_ns.time / 60;
if (aa>=100)
{
a_video.clear();
a_ns.close();
time_text.text = "播映完畢";
this.removeEventListener(Event.ENTER_FRAME,videoPlayingProgressing);
}
else
{
if (NSnum < 10)
{
Nsec = "0" + String(Math.floor(a_ns.time % 60));
}
else
{
Nsec = String(Math.floor(a_ns.time % 60));
}
if (NMnum < 10)
{
Nmin = "0" + String(Math.floor(a_ns.time / 60));
}
else
{
Nmin = String(Math.floor(a_ns.time / 60));
}
time_text.text = Nmin + ":" + Nsec + " / " + Tmin + ":" + Tsec;
//播放進度的位置
var xx=X1+(X2-X1)*(a_ns.time/TimeSum);
PP_btn.x = xx;
}
}
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 鼻涕男孩學習誌 的頭像
    鼻涕男孩學習誌

    鼻涕男孩電腦學習日誌

    鼻涕男孩學習誌 發表在 痞客邦 留言(0) 人氣()