2011-11-02 80 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); 
    } 
} 
相关问题