AVAUdioPlayer – 更改当前url

在我的audio播放器应用程序中,如果我点击快进button – 播放器必须find播放列表中的下一首歌曲并播放它。 我所做的是从下一首歌曲中获取URL,并尝试将其置于后台(后台是AVAudioPlayer *的一个实例)url字段,但该属性是只读的。 所以我实际上在做什么 – 我调用initWithContentsOfURL方法(再次)设置这样的URL:

[self.background initWithContentsOfURL: [[_playlist.collection objectAtIndex:currentIndex] songURL] error:nil]; 

这是合法吗? 我的意思是,编译器告诉我,expression式结果是未使用的,但它实际上工作。 还有另外一种方法吗? 谢谢 ;-)

已经检查了4个苹果样本,他们只使用AVAudioPlayer播放一首歌曲。 但是,你的结果看起来非常有趣和令人印象深刻 请让我们知道,是否在重新初始化具有相同地址的对象之前停止播放,是否开始新的audio会话?

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

  • 使用错误variables来跟踪可能的错误
  • 停止播放AVAudioPlayer实例,初始化AVAudioPlayer的一个新实例,并将其设置为允许旧的自动解除分配的属性。

而你可能认识你自己

 self.background = [self.background initWithContentsOfURL:: 

将删除您的警告。

要播放多个url或有效更改url,请使用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];