AVAUdioPlayer - 更改当前URL

时间:2012-03-14 21:39:07

标签: ios avaudioplayer

在我的音频播放器应用中,如果我点击快进按钮 - 播放器必须找到播放列表中的下一首歌并播放它。我所做的是从下一首歌中获取URL,并尝试将其放在后台(后台是AVAudioPlayer *的一个实例)url字段,但该属性是只读的。所以我正在做的事情 - 我正在调用initWithContentsOfURL方法(再次)设置这样的URL:

[self.background initWithContentsOfURL:
[[_playlist.collection objectAtIndex:currentIndex] songURL] error:nil];
这是合法的吗?我的意思是,编译器告诉我表达式结果未使用,但它实际上是有效的。 还有另一种方法吗?谢谢; - )

2 个答案:

答案 0 :(得分:17)

要播放多个网址或有效更改网址,请使用子类AVQueuePlayer

  

AVQueuePlayer是AVPlayer的子类,用于按顺序播放多个项目。

示例:

NSString *fooVideoPath = [[NSBundle mainBundle] pathForResource:@"tommy" ofType:@"mov"];
NSString *barVideoPath = [[NSBundle mainBundle] pathForResource:@"pamela" ofType:@"mp4"];

AVPlayerItem *fooVideoItem = [AVPlayerItem playerItemWithURL:[NSURL fileURLWithPath:fooVideoPath]];
AVPlayerItem *barVideoItem = [AVPlayerItem playerItemWithURL:[NSURL fileURLWithPath:barVideoPath]];

self.queuePlayer = [AVQueuePlayer queuePlayerWithItems:[NSArray arrayWithObjects:fooVideoItem, barVideoItem,nil]];
[self.queuePlayer play];

// things happening...

[self.queuePlayer advanceToNextItem];

答案 1 :(得分:4)

检查了4个Apple样本,他们正在使用AVAudioPlayer播放一首歌曲。但是,你的结果看起来非常有趣和令人印象请告诉我们,您是否在重新初始化具有相同地址的对象之前停止播放,您是否正在开始新的音频会话?

至于我,我不会把播放和应用程序的稳定性放在文档中没有提到的风险中但是,但是要做到好的一面会使用AVAudioPlayer类,因为它看起来是最正确的,这给出了我们:

  • 使用错误变量来跟踪可能的错误
  • 停止播放AVAudioPlayer实例,初始化AVAudioPlayer的新实例并将其设置为允许自动释放旧版本的属性。

你可能知道自己,

self.background = [self.background initWithContentsOfURL::

将删除警告。