我有下载和播放音乐的音乐播放器(它应该在下载时播放),目前我的代码如下:
sound = new Sound(new URLRequest(url_stream));
有时服务器返回404(未找到)和429(请求太多)状态代码而不是音乐文件,我正在寻找方法找出响应状态代码,以防播放错误,任何想法?
答案 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,也许它不会被下载两次。