получить размер видео в VideoDisplay - PullRequest
0 голосов
/ 02 ноября 2011

Я пытаюсь получить размеры видеоисточника в VideoDisplay:

private function loadMovie () : void {
    vid = new VideoDisplay();
    vid.source = _item.itemLg;
    vid.play();
    vid.addEventListener ( MediaPlayerStateChangeEvent.MEDIA_PLAYER_STATE_CHANGE, onVideoPlay );
    addElement(vid);
}

private function onVideoPlay ( event : MediaPlayerStateChangeEvent ) : void {
    if ( event.state == MediaPlayerState.PLAYING ) {
           trace (vid.videoObject.width + " " + vid.videoObject.height);
    }
}

Но результат всегда равен 0.

Я получил тот же результат с:

trace (vid.videoObject.videoWidth + " " + vid.videoObject.videoHeight);

Есть еще идеи?

Спасибо

Ответы [ 3 ]

0 голосов
/ 02 ноября 2011

Я нашел решение, но не знаю, почему это работает:

import org.osmf.events.MediaPlayerStateChangeEvent;
import org.osmf.media.MediaPlayerState;

import spark.components.VideoDisplay;

private var vid : VideoDisplay;
private var videoLoadCompleteTimer : Timer = new Timer (1, 5);

private function loadMovie () : void {
    vid = new VideoDisplay();
    vid.source = _item.itemLg;
    vid.autoPlay = false;
    vid.addEventListener ( MediaPlayerStateChangeEvent.MEDIA_PLAYER_STATE_CHANGE, onVideoPlay );
          addElement(vid);
}

private function onVideoPlay ( event : MediaPlayerStateChangeEvent ) : void {
    if ( event.state == MediaPlayerState.PLAYING ) {
        videoLoadCompleteTimer.addEventListener(TimerEvent.TIMER_COMPLETE, onVideoStart );
        videoLoadCompleteTimer.start();
    }
}

private function onVideoStart ( event : TimerEvent ) : void {
    trace(vid.videoObject.videoHeight + " " + vid.videoObject.videoWidth);
    vid.play();
    videoLoadCompleteTimer.reset();
}

Я думаю, что это немного грязно ...

0 голосов
/ 04 ноября 2011

Я сделал попытку с событием READY, но оно работает только иногда. В основном по второму или третьему щелчку.

private function loadMovie () : void {
    vid = new VideoDisplay();
    vid.source = _item.itemLg;
    vid.autoPlay = false;
    vid.addEventListener ( MediaPlayerStateChangeEvent.MEDIA_PLAYER_STATE_CHANGE, onVideoPlay );
    addElement(vid);
}

private function onVideoPlay ( event : MediaPlayerStateChangeEvent ) : void {
    if ( event.state == MediaPlayerState.READY ) {
        vid.play();
    } else if ( event.state == MediaPlayerState.PLAYING ) {
        trace ("VidDimensions: " + vid.videoObject.videoWidth + " " + vid.videoObject.videoHeight);
        this.height = vid.videoObject.videoHeight;
        this.width = vid.videoObject.videoWidth;
        vid.move ( -vid.videoObject.videoWidth/2, -vid.videoObject.videoHeight/2 );
    }
}
0 голосов
/ 02 ноября 2011

Предполагая, что это mx.controls.VideoDisplay, после загрузки видео вы сможете использовать:

trace (vid.videoWidth + " " + vid.videoHeight);

Без видеообъекта в середине.

Вы также можете попробовать прослушатьдля события ready, которое должно срабатывать при успешной загрузке видео, а не каждый раз, когда состояние изменяется:

mx.events.VideoEvent.READY 
...