如何使用AVAudioPlayer播放'http:/ ......./mp3'

hye*_*ung 1 objective-c avaudioplayer ios

我无法播放mp3音频文件.

URL_PATH = @"http://...../.…./A1.mp3";
Run Code Online (Sandbox Code Playgroud)

NSError*错误;

player = [[AVAudioPlayer alloc]initWithContentsOfURL:[NSURL URLWithString:URL_PATH] error:&error];
if (error) 
{
    NSLog(@"error:%@",error.localizedDescription);
}

if (player ==nil)
{
    NSLog(@"nil");
}
else 
{
    NSLog(@"playing");
    [player play];
}  
Run Code Online (Sandbox Code Playgroud)

错误代码 :

error:The operation couldn’t be completed. (OSStatus error -43.)
nil
Run Code Online (Sandbox Code Playgroud)

我能怎么做?请告诉我提示.预先感谢!

sun*_*ppy 7

您正在使用错误的播放器播放从网络流捕获的音频.请参阅Apple的文档AVAudioPlayer:

Apple建议您使用此类进行音频播放,除非您正在播放从网络流捕获的音频或需要非常低的I/O延迟.有关音频技术的概述,请参阅"多媒体编程指南"中的音频和视频起点和"使用音频".

一种解决方法AVAudioPlayer是获取音频数据并将其放入NSData.然后你可以初始化你AVAudioPlayerinitWithData:error:.另外,不要将代码放在主队列中.否则,它将阻止您的用户界面对用户的输入作出反应.

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    NSURL *mp3URL = [NSURL URLWithString:@"http://zhangmenshiting.baidu.com/data2/music/44799433/4479927746800128.mp3?xcode=dbff90a141d5d136fdc7275fdc3fae126077a44adc974ad8"];
    NSData *data = [NSData dataWithContentsOfURL:mp3URL];
    self.audioPlayer = [[AVAudioPlayer alloc] initWithData:data error:NULL];
    [self.audioPlayer play];
});
Run Code Online (Sandbox Code Playgroud)