Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 从flash Sound对象获取响应状态代码_Actionscript 3_Flash - Fatal编程技术网

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

Actionscript 3 从flash Sound对象获取响应状态代码,actionscript-3,flash,Actionscript 3,Flash,我有一个音乐播放器,可以下载和播放音乐(下载时应该播放),目前我的代码如下: sound = new Sound(new URLRequest(url_stream)); var sound:Sound; var request:URLRequest = new URLRequest('http://www.example.com/file.mp3'); var loader:URLLoader = new URLLoader(); var httpCode:int; loader.dataF

我有一个音乐播放器,可以下载和播放音乐(下载时应该播放),目前我的代码如下:

sound = new Sound(new URLRequest(url_stream));
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();
  }
}

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

要获得响应状态,您可以使用
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%正常工作。

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

sound = new Sound(new URLRequest(url_stream));
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被缓存,它可能不会被下载两次。

这是肯定的,但正如我提到的,音频文件应该在下载时播放,但是您的代码“加载器”会在我播放之前下载整个文件,我错了吗?