2014-11-27 3 views
1

У меня есть музыкальный плеер, который загружает и играет музыка (она должна играть во время загрузки), в настоящее время мой код выглядит следующим образом:Получить код состояния ответа от вспышки Sound объекта

sound = new Sound(new URLRequest(url_stream)); 

Иногда сервер возвращает 404 (Not Found) и 429 (Слишком много запросов) кодов статуса вместо музыкального файла, я ищу способ узнать код статуса ответа в случае ошибки воспроизведения, любых идей?

ответ

1

Чтобы получить статус ответа, вы можете использовать HTTPStatusEvent событие с URLLoader как это:

var sound:Sound 
var request:URLRequest = new URLRequest('http://www.example.com/file.mp3') 
var loader:URLLoader = new URLLoader() 
    loader.addEventListener(
     HTTPStatusEvent.HTTP_STATUS, 
     function(event):void { 
      trace('http status: ' + event.status) 
      if(event.status == 200){ 
       sound = new Sound(request) 
       sound.play() 
      } 
     } 
    ) 
    loader.addEventListener(IOErrorEvent.IO_ERROR, function(){}) 
    loader.load(request) 

Этот код работает 100%.

+0

Это точно, но, как я уже говорил, аудиофайл должен воспроизводиться во время загрузки, но ваш загрузчик кода загрузит весь файл, прежде чем я смогу воспроизвести его, не так ли? – mulya

0

В решении akmozo вы загружаете MP3 дважды. Сначала проверьте, существует ли файл на сервере, а затем еще раз, чтобы воспроизвести его в Звуке. Было бы лучше сделать это следующим образом:

var sound:Sound; 
var request:URLRequest = new URLRequest('http://www.example.com/file.mp3'); 
var loader:URLLoader = new URLLoader(); 
var httpCode:int; 
loader.dataFormat = URLLoaderDataFormat.BINARY; 
loader.addEventListener(HTTPStatusEvent.HTTP_STATUS,loaderStatus); 
loader.addEventListener(Event.COMPLETE,loaderComplete); 
function loaderStatus(evt:HTTPStatusEvent):void { 
    httpCode = evt.status; 
} 
function loaderComplete(evt:Event):void { 
    if (httpCode == 200) { 
    ba:ByteArray = loader.data as ByteArray; 
    sound = new Sound(); 
    sound.loadCompressedDataFromByteArray(ba,ba.length); 
    sound.play(); 
    } 
} 

Хотя если URLRequest кэшируется, может быть, он не получает загружены дважды.

Смежные вопросы