0
我創建了一個使用Spark VideoDisplay組件播放視頻的Flex網站。 選中後,VideoDisplay將在PopUpManager中加載。Spark VideoDisplay在Google Chrome(和Opera)中長時間等待高CPU使用率
在所有的瀏覽器中都可以正常工作,除了谷歌瀏覽器需要更長的時間才能開始播放,在這段時間內,CPU使用率達到峯值,然後在視頻開始播放時會回落。
我追蹤的玩家指出它經歷並有如下幾點:
- 加載
- 準備(掛起具有高CPU年齡)
- 緩衝
- 播放(後緩衝,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();
}
}
再次感謝!
你能顯示代碼嗎?你使用h.264嗎?你在使用GPU加速嗎? –
謝謝,上面的代碼... – timwjohn
但你忽略了我的其他問題... –