我创建了一个使用Spark VideoDisplay组件播放视频的Flex网站。 选中后,VideoDisplay将加载到PopUpManager中。
这在所有浏览器中都可以正常使用,除了谷歌Chrome开始播放需要更长的时间,在此期间CPU使用率达到峰值,然后在视频开始播放后再降低。
我已经跟踪了它经过的播放器状态,它们如下:
导致这种情况暂时在Chrome中暂停这么长时间的原因是什么?我认为我可以在所有浏览器中看到相同的功能和行为,因为Flash只是一个作为单独进程运行的插件?
谢谢!
编辑:似乎在Opera中也是如此。两者之间是否存在解释这种行为的共性?
编辑2 :感谢您的回复,以下是相关代码:
MXML:
<s:Group id="videoPopup"
click="closePopupHandler(event)">
<s:Rect width="100%" height="100%">
<s:fill>
<s:SolidColor color="#2a2a2a"/>
</s:fill>
</s:Rect>
<spinner:Spinner id="spinner"
tickColor="#ffffff"
horizontalCenter="0" verticalCenter="0"/>
<s:VideoDisplay id="videoDisplay" width="100%" height="100%"
updateComplete="videoDisplay_updateCompleteHandler(event)"
mediaPlayerStateChange="videoDisplay_mediaPlayerStateChangeHandler(event)"
complete="videoCompleteHandler(event)"/>
<graphics:CloseButton id="closeVideoButton" visible="false" width="60" height="60" top="10" right="10"/>
<s:Label id="videoCredit" text="Filmed & produced by Engine Creative"
bottom="25" right="10" alpha="0"
fontFamily="HelveticaEmbedded" fontSize="11" color="#cccccc"/>
</s:Group>
发起动作:
PopUpManager.addPopUp(this.videoPopup, FlexGlobals.topLevelApplication as DisplayObject, true);
videoPopup.width = Math.min(1280, stage.stageWidth * 0.9);
videoPopup.height = Math.min(720, stage.stageHeight * 0.9);
PopUpManager.centerPopUp(this.videoPopup);
hidePlayOverlay.play();
showVideoCredit.end();
spinner.play();
showCreditTimer.addEventListener(TimerEvent.TIMER_COMPLETE, showCredit);
showCreditTimer.reset();
showCreditTimer.stop();
if(!videoDisplay.source || videoDisplay.source != _asset.source)
videoDisplay.source = _asset.source;
videoDisplay.seek(0);
videoDisplay.play();
相关事件处理程序:
protected function videoDisplay_updateCompleteHandler(event:FlexEvent):void
{
Debug.log("video update complete");
if (videoDisplay.videoObject)
videoDisplay.videoObject.smoothing = true;
}
protected function videoDisplay_mediaPlayerStateChangeHandler(event:MediaPlayerStateChangeEvent):void
{
Debug.log("player state: " + event.state);
showCreditTimer.reset();
if (event.state == MediaPlayerState.PLAYING)
{
showCreditTimer.start();
showCloseButton();
spinner.stop();
}
}
再次感谢!
答案 0 :(得分:0)
如果您拥有支持的GPU,则默认情况下会部分支持硬件加速。如果你想要完整的3d支持,你需要使用StageVideo并且需要将html中的'wmode'参数设置为'direct'。你应该read up more on it。