AVAudioPlayer初始化与Web URL崩溃

时间:2016-03-25 09:27:24

标签: ios objective-c avaudioplayer

我在服务器上有一个声音文件,我尝试在设备上播放它。

使用此代码:

NSURL audioURL = [NSURL URLWithString:@"http://..."];
NSError *error;
AVAudioPlayer *audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:audioURL error:&error]

因错误而崩溃:

  

抛出异常的描述:' - [NSTaggedPointerString getCharacters:range:]:范围{0,12}超出范围;字符串长度5

网址的长度为73

首先,为什么它会崩溃而不是填充我的error对象?

如果我使用此代码:

NSURL audioURL = [NSURL URLWithString:@"http://..."];
NSData *audioData = [NSData dataWithContentsOfURL:audioURL];
NSError *error;
AVAudioPlayer *audioPlayer = [[AVAudioPlayer alloc] initWithData:audioData error:&error]

它有效。

查看方法的名称,看起来它们做同样的事情,为什么第一种方法不起作用? 阅读AVAudioPlayer init方法'文档显示与此问题无关。

1 个答案:

答案 0 :(得分:2)

您是否正在播放音频文件? AVAudioPlayer无法从URL流式传输。您可以将它与存储在设备上的文件一起使用。 如果您想从URL流式传输文件,则需要使用AVPlayer 以下代码:

AVPlayerItem *item = [AVPlayerItem playerItemWithURL: audioURL];
AVPlayer *myAVPlayer = [AVPlayer playerWithPlayerItem: item];

<强> 修改

当您要使用带有URL的AVAudioPlayer时,您需要像这样显示您的网址:

NSString *backgroundMusicPath = [[NSBundle mainBundle] pathForResource:@"myMusic" ofType:@"mp3"];
NSURL *backgroundMusicURL = [NSURL fileURLWithPath:backgroundMusicPath];

取自here

希望它会有所帮助