Я создал сайт Flex, который воспроизводит видео с использованием компонента Spark VideoDisplay.
При выборе VideoDisplay загружается в PopUpManager.
Это прекрасно работает во всех браузерах, за исключением того, что Google Chrome запускается значительно дольше, во время которого загрузка процессора достигает максимума, а затем возвращается в исходное состояние после начала воспроизведения видео.
Я проследил, что игрок заявляет, что он проходит, и они выглядят следующим образом:
- Загрузка
- готов (зависает целую вечность с большим процессором)
- буферизация
- Воспроизведение (сразу после буферизации, загрузка процессора снижается, видео воспроизводится плавно)
Что может быть причиной того, что это временно зависает в Chrome гораздо дольше? Я думал, что могу ожидать одинаковую функциональность и поведение во всех браузерах, так как Flash - это просто плагин, который работает как отдельный процесс?
Спасибо!
Редактировать: Кажется, что в Опере тоже самое. Есть ли между ними что-то общее, что могло бы объяснить это поведение?
Редактировать 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>
Инициирование actionScript:
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();
}
}
Еще раз спасибо!