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

时间:2013-06-07 01:58:29

标签: ios objective-c avaudioplayer

我无法播放mp3音频文件。

URL_PATH = @"http://...../.…./A1.mp3";

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];
}  

错误代码:

error:The operation couldn’t be completed. (OSStatus error -43.)
nil

我该怎么办? 请告诉我提示。预谢谢!

2 个答案:

答案 0 :(得分:7)

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

  

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

使用AVAudioPlayer的一种方法是获取音频的数据并将其放在NSData中。然后,您可以按AVAudioPlayer初始化initWithData: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];
});

答案 1 :(得分:0)

sunkehappy是对的,AVAudioPlayer不适合流媒体音频。它用于播放音频文件和已在内存中的数据。这就是为什么你需要使用数据而不是URL来初始化它。

这是苹果答案(你可以在http://developer.apple.com/library/ios/#qa/qa1634/_index.html找到):

  

AVAudioPlayer类不支持流式音频   基于HTTP URL。与initWithContentsOfURL一起使用的URL必须是   文件URL(文件://)。也就是说,本地路径。

如果您要查找音频流,可以测试audio streamer