Звук продолжает играть после того, как внешний SWF был выгружен - PullRequest
3 голосов
/ 14 октября 2010

У меня есть флэш-приложение, своего рода плей-лист, который загружает внешний проигрыватель SWF-видео (у меня нет доступа к коду к этому внешнему файлу), поэтому пользователи могут смотреть видео или переходить к другому.Когда пользователь переключается на другое видео, загружается новый SWF-файл.

Проблема : если пользователь не завершил просмотр видео и перешел к следующему, я выгружаю предыдущий SWF-файл (unloadAndStop()) и загружаю новый.И поскольку предыдущий SWF-файл воспроизводился, он фактически не выгружен, он все еще воспроизводится в фоновом режиме (я слышу две звуковые дорожки: текущую и предыдущую).

Я пытался SoundMixer.stopAll() позвонить, но это не такна самом деле помогает, из-за загрузки на заднем плане и звука текущего видео, когда оно начинает воспроизводиться.

Есть ли способ решить эту проблему из основного приложения 'loader'?

Ответы [ 2 ]

0 голосов
/ 20 октября 2012

Попробуйте остановить все звуки перед воспроизведением нового звука.Проверьте stopAll () вызов.

0 голосов
/ 14 октября 2010

Интересно, что unloadAndStop () предназначался именно для вашей ситуации.Согласно документам ...

Example: A SWF file that has a music track is loaded into an application. 
Later, the SWF is unloaded using Loader.unload(). 
Though the SWF will be removed from the screen, the music will still be heard.

SOLUTION
Loader.unloadAndStop is a new addition to Action Script 3's API. 
It helps developers to correctly stop and unload loaded content 
using the Loader.load/loadBytes APIs.

...Flash Player recursively attempts to stop and clear as many 
objects as possible (Sounds, NetStreams, EventListeners, etc.) 
within the loaded SWF. This feature is especially useful 
when unloading unknown 3rd party content.

Это, кажется, в точности соответствует вашей ситуации!Если ваша реализация Loader правильная, это похоже на ошибку в методе unloadAndStop ().

Одним из альтернативных решений может быть создание нового экземпляра Loader вместо использования одного и того же загрузчика для каждого видео.

private var currentMovie:DisplayObject;

private function loadSWF(url:String ):void
{   
   if( currentMovie != null )
    {
       //stop the sound playing in the current movie
       //then remove it from the display list
       removeChild( currentMovie );
       currentMovie = null;
    }

   var loader:Loader = new Loader();
   //configureListeners
   request.url = url;
   loader.load( request , context );

}

private function onLoadComplete(event:Event):void
{
   currentMovie = event.target.loader.content;
   //etc...
}
...