Мне нужно воспроизводить SWF-файлы в моем проекте. Эти SWF-файлы содержат фоновую музыку. Для параметров Sound Sync этой музыки во Flash установлено значение «stream». Это сделано для того, чтобы при приостановке Flash-фильма музыка также приостанавливалась.
Теперь у меня проблема с загрузкой этих SWF-файлов. Для этого я использую SWFLoader.
Когда я загружаю его, звук SWF-файла уже начинает воспроизводиться, но в течение определенного времени никакие изображения фильма не отображаются. Чем медленнее ваше соединение, тем больше времени требуется для показа визуальных эффектов фильма.
Аудио и видео синхронизированы, это хорошо, однако первые кадры флэш-фильма просто не отображаются.
Я попытался решить эту проблему, добавив eventListener, чтобы убедиться, что фильм полностью загружен, прежде чем он начнет воспроизводиться. Однако, когда я делаю это (код ниже), в течение доли секунды музыка воспроизводится, затем останавливается и перезапускается, когда фильм полностью загружен.
Как лучше всего решить эту проблему? Я на правильном пути с помощью списка событий ProgressEvent.PROGRESS?
Код:
private function loadSWF():void
{
swfLoader.source = source;
swfLoader.addEventListener(ProgressEvent.PROGRESS, loadProgress);
swfLoader.addEventListener(Event.COMPLETE, startSWF);
swfLoader.load();
var soundTransform:SoundTransform = new SoundTransform(0);
swfLoader.soundTransform = soundTransform;
}
private function loadProgress(event:ProgressEvent):void
{
applicationModel.addToConsoleOutput("SWFPlayer.loadProgress(): " + event.bytesLoaded + " of " + event.bytesTotal + "bytes loaded");
if (MovieClip(swfLoader.content) && event.bytesLoaded < event.bytesTotal)
{
MovieClip(swfLoader.content).gotoAndStop(0);
var soundTransform:SoundTransform = new SoundTransform(0);
swfLoader.soundTransform = soundTransform;
}
}
private function startSWF(event:Event):void
{
swfLoader.removeEventListener(ProgressEvent.PROGRESS, loadProgress);
swfLoader.removeEventListener(Event.COMPLETE, startSWF);
dispatchEvent(new Event("loadComplete", true));
var soundTransform:SoundTransform = new SoundTransform(volume);
swfLoader.soundTransform = soundTransform;
cardMovieClip = MovieClip(swfLoader.content);
cardMovieClip.addEventListener(Event.ENTER_FRAME, endSWFHandler);
cardMovieClip.gotoAndPlay(0);
}