2011-11-02 79 views
0

我試圖讓videosource的尺寸中的VideoDisplay:得到視頻的尺寸中的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); 

還有其他想法嗎?

感謝

回答

0

假設它是一個mx.controls.VideoDisplay當,視頻加載,一旦你應該能夠使用:

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

沒有中間的videoObject。

您也可以嘗試監聽ready事件,這應該開火成功的視頻負載,而不是每一次狀態變化:

mx.events.VideoEvent.READY 
+0

我正在使用spark.components.VideoDisplay。與mx.controls.VideoDisplay我得到的錯誤:'錯誤:1000:無法建立連接到服務器或找到服務器上的FLV.' – icke

+0

我也嘗試VideoEvent.READY,但我不明白它 '私人函數loadMovie():void { \t vid = new VideoDisplay(); \t vid.source = _item.itemLg; \t vid.addEventListener(mx.events.VideoEvent.READY,onVideoReady); \t addElement(vid); } \t \t \t 私有函數onVideoReady(事件:mx.events.VideoEvent):無效{ 跟蹤(vid.videoObject.videoWidth + 「」 + vid.videoObject.videoHeight); vid.play(); }' – icke

0

我找到了一個解決辦法,但我不知道爲什麼這個作品:

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

是的,使用定時器不是最乾淨的解決方案。也許試試MediaPlayerState.Ready。定時器解決方案的工作原理是,當定時器在VideoStart()上觸發時,videoObject被完全加載。我並沒有搞砸火花組件,但總體來說,當弄亂視頻時,我發現這一切都是爲了尋找合適的事件來傾聽 – ToddBFisher

0

我與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); 
    } 
} 
相關問題