从flash Sound对象获取响应状态代码

时间:2014-11-27 08:59:56

标签: actionscript-3 flash

我有下载和播放音乐的音乐播放器(它应该在下载时播放),目前我的代码如下:

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

有时服务器返回404(未找到)和429(请求太多)状态代码而不是音乐文件,我正在寻找方法找出响应状态代码,以防播放错误,任何想法?

2 个答案:

答案 0 :(得分: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%正常运行。

答案 1 :(得分:0)

在akmozo的解决方案中,您需要两次下载MP3。首先查看服务器上是否存在该文件,然后再在Sound中播放它。这样做会更好:

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,也许它不会被下载两次。