Выгрузка SWF с использованием метода unloadAndStop (), но звуки видео остаются слышимыми - PullRequest
1 голос
/ 16 февраля 2011

Я испробовал много подходов к выгрузке моего SWF-файла, но безрезультатно, что звуки в моем загруженном SWF-файле продолжают воспроизводиться даже после загрузки SWF-файла.

Я создал универсальный загрузчик следующим образом:

var loader:Loader = new Loader();

Затем я загружаю различные SWF-файлы в видеоклип с именем mov_contentLoader , например, видео SWF-файл загружается следующим образом:

loader.load(new URLRequest("video.swf")); //assign SWF url to loader
mov_contentLoader.addChild(loader); //add loaded content to movi clip

У меня тогда естьуниверсальная кнопка «выход», в зависимости от состояния приложения, определенные окна закрываются, SWF-файлы выгружаются и т. д. Для моего файла video.swf, когда нажимается кнопка выхода, я вызываю unloadAndStop ();Метод на загрузчике выглядит следующим образом:

loader.unloadAndStop(); //unload all content, do some garbage cleanup
mov_contentLoader.removeChildAt(0); //just to be safe, a second layer of reassurance ??

SWF выгружен, но я не могу заставить звуки остановиться!Я даже прибегал к добавлению слушателей сцены в video.swf для прослушивания выходного состояния, но это все равно не останавливало звуки видео.

Если я снова загружу video.swf и воспроизведу другое видео,два саундтрека играют друг на друге.

Любое руководство, как всегда, очень принято и ценится.

Симон

Ответы [ 4 ]

2 голосов
/ 16 февраля 2011

Надлежащий способ справиться с этим - запрограммировать функцию уничтожения на любой загруженный вами контент, а затем вызвать его перед выгрузкой этого контента. В функции уничтожения загруженный SWF должен нести ответственность за свое дело в отношении ...

  • Остановка воспроизведения звуков.
  • Закрытие любых открытых потоков (например, потокового видео).
  • вызывая остановку на своих временных шкалах
  • и т.д ...

SoundMixer.stopAll () никоим образом не является подходящим решением. Скорее, это может быть, если вы сами задаете параметры того, что «приемлемо» в качестве раздражающего пользовательского опыта, но если вы пишете сторонний SWF, который должен быть загружен в чужое приложение, вы наверняка будете нести ответственность для очистки вашего собственного звукового беспорядка, и SoundMixer убьет не только ваши звуки, но и звуки из загрузчика, и это один из надежных способов гнева ваших хостов.

1 голос
/ 19 августа 2011

В вашем video.swf вы должны написать что-то вроде этого:

this.addEventListener(Event.REMOVED_FROM_STAGE, stopSound)

function stopSound(e:Event):void
{
    my_flvPlayer.stop();
}
1 голос
/ 16 февраля 2011

После долгих исследований я решил эту проблему.В надежде, что это сделает чью-то жизнь намного проще, возникла проблема:

Метод unloadAndStop(); удаляет любые прослушиватели событий, экземпляры, объекты и т. Д. Из загруженного SWF-файла.В моем случае у меня были видео, и если видео все еще воспроизводилось, когда пользователь выходил (и загруженный выгружал контент), звуки продолжались.Кажется, что функция unloadAndStop(); НЕ делает одну вещь - останавливает все звуки.

Решение?Я подключил прослушиватель событий к своему загрузчику, и после того, как контент был успешно РАЗГРУЗЕН, я вызвал функцию SoundMixer.stopAll();, которая не давала воспроизводить звуки!Это, однако, означает, что если бы у вас все время были фоновые звуки, они бы тоже прекратились.Вы можете пойти еще дальше и узнать текущее время ваших окружающих звуков и просто «перезапустить» их немедленно с этого момента времени.

Мой простой слушатель Vent выглядит так:

myloader.contentLoaderInfo.addEventListener(Event.UNLOAD, cleanUp);

function cleanUp(e:Event):void{
   SoundMixer.stopAll(); //stop all sounds...
}

Я верю, что это поможет кому-то!Это немного "нахально", но отлично справляется со своей работой.

С уважением, Саймон

0 голосов
/ 04 марта 2011

Eventlistener, который прослушивает Event.UNLOAD и затем вызывает функцию, которая извлекает функцию SoundMixer.stopAll (), является достойным обходным путем.Это не сработает, если вы загружаете SWF-файл из домена, отличного от того, в котором находится ваш SWF-контейнер.Я почти уверен, что это вызывает нарушение песочницы.У меня нет решения для этого - и в любом случае лучшее решение - это упомянутое выше, упомянутое scriptocalypse.

Но я нахожусь в ситуации, когда я нахожусь в разных доменах И у меня нет контроля надSWF-файлы - поэтому я не могу поместить в них функции «уничтожить».Я схожу с ума.

...