Flash 获取视频显示中的视频尺寸
我试图在视频显示器中获得视频源的尺寸:Flash 获取视频显示中的视频尺寸,flash,apache-flex,video,dimensions,videodisplay,Flash,Apache Flex,Video,Dimensions,Videodisplay,我试图在视频显示器中获得视频源的尺寸: private function loadMovie () : void { vid = new VideoDisplay(); vid.source = _item.itemLg; vid.play(); vid.addEventListener ( MediaPlayerStateChangeEvent.MEDIA_PLAYER_STATE_CHANGE, onVideoPlay ); addElement(vi
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);
还有别的想法吗
谢谢假设它是mx.controls.VideoDisplay,一旦视频加载,您应该能够使用:
trace (vid.videoWidth + " " + vid.videoHeight);
中间没有视频对象。
您还可以尝试侦听ready事件,该事件应在成功加载视频时触发,而不是在每次状态更改时触发:mx.events.VideoEvent.READY
我找到了一个解决方案,但我不知道为什么会这样:
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();
}
我觉得它有点脏…我尝试了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 );
}
}
我用的是spark.components.VideoDisplay。对于mx.controls.VideoDisplay,我得到了错误:
错误:1000:无法连接到服务器或在服务器上找到FLV。
我也尝试了VideoEvent.READY,但我没有得到它私有函数loadMovie():void{vid=new VideoDisplay();vid.source=\u item.itemLg;vid.addEventListener(mx.events.VideoEvent.READY,onVideoReady);addElement(vid);}私有函数onVideoReady(event:mx.events.VideoEvent):void{trace(vid.videoObject.videoWidth+“”+vid.videoObject.videoHeight);vid.play();}
是的,使用计时器并不是最干净的解决方案。也许可以试试MediaPlayerState.Ready。计时器解决方案之所以有效,是因为当计时器启动VideoStart()时,videoObject已完全加载。我没有弄乱spark组件,但通常在处理视频时,我发现这一切都是为了找到合适的事件来收听