Продолжительность FLV от класса - PullRequest
0 голосов
/ 31 мая 2011

У меня есть класс, который загружает и воспроизводит FLV-видеофайл. Моя проблема в том, как я могу получить продолжительность FLV в моем основном коде? .. Это мой видео класс:

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"]);
            }
        } 
}

.. а в моем основном классе у меня есть:

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

После запуска программы у меня есть "Time: 6.76" в окнах вывода, и она прекрасно воспроизводит flv, что правильно, но я хочу что-то вроде
var myTD:int = Veed.getDuration();
в моем основном классе, чтобы получить продолжительность. Это кажется легким, но я пока не могу это сделать !! Любая помощь?

1 Ответ

1 голос
/ 31 мая 2011

Добавьте приватную переменную вверху:

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