我在服务器上有一个声音文件,我尝试在设备上播放它。
使用此代码:
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方法'文档显示与此问题无关。
答案 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
希望它会有所帮助