簡體   English   中英

從 Class 開始的 FLV 持續時間

[英]FLV duration from Class

我有一個加載和播放 flv 視頻文件的 class。 我的問題是,如何在我的主代碼中獲取 flv 的持續時間? .. 這是我的視頻 class:

package src {     
    import flash.display.Sprite;     
    import flash.media.Video;     
    import flash.net.NetConnection;     
    import flash.net.NetStream;      
    import flash.events.Event;
    import flash.events.MouseEvent;

        public class vplayer extends Sprite{                 
            public var vid:Video = new Video(1920,1080);
            private var nc:NetConnection = new NetConnection();
            public var ns:NetStream;
            public var listener:Object = new Object();

            public function vplayer():void{             
                addChild(vid);
                nc.connect(null);
                ns = new NetStream(nc);
                vid.attachNetStream(ns);
                listener.onMetaData = metaDataHandler;
                ns.client = listener;           
                //customClient.onCuePoint = cuePointHandler;
            }
            public var time00:Number = 0;
            public function playVideo00():void{
                ns.play("image00/mov00.flv");
            }
            public function stopVideo00():void{
                ns.close();
            }
            /*public function cuePointHandler(infoObject:Object):void {
                trace("cuePoint");
            }*/
            public function metaDataHandler(infoObject:Object):void {
                trace (" Time:  " + infoObject["duration"]);
            }
        } 
}

..在我的主要 class 我有:

        Veed = new vplayer();
        addChild(Veed);
        Veed.playVideo00();

運行程序后,我在 output windows 中有“時間:6.76”,它播放 flv 很好,這是正確的,但我想要類似的東西
var myTD:int = Veed.getDuration();
在我的主要 class 中獲取持續時間。 這似乎很容易,但我還不能完成?! 有什么幫助嗎?

在頂部添加一個私有變量:

private var _duration:Number = 0;

像這樣更新:

public function metaDataHandler(infoObject:Object):void
{
    _duration = infoObject["duration"];
}

現在創建一個持續時間的吸氣劑。

public function get duration():Number
{
    return _duration;
}

現在你可以做一個:

trace(Veed.duration);

元數據將在請求后甚至幾毫秒內被檢索,這意味着如果您在獲取元數據后立即嘗試獲取持續時間,則它還沒有加載。 試試這個作為例子:

addEventListener(Event.ENTER_FRAME, _wait);
function _wait(e:Event):void
{
    if(Veed.duration != 0)
    {
        trace(Veed.duration);
        removeEventListener(Event.ENTER_FRAME, _wait);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM