AVAUdioPlayer - 更改当前 URL
Posted
技术标签:
【中文标题】AVAUdioPlayer - 更改当前 URL【英文标题】:AVAUdioPlayer - changing current URL 【发布时间】:2012-03-14 21:39:07 【问题描述】:在我的音频播放器应用程序中,如果我按下快进按钮 - 播放器必须在播放列表中找到下一首歌曲并播放。我所做的是从下一首歌曲中获取 URL,并尝试将其放在后台(后台是 AVAudioPlayer* 的实例)的 url 字段,但该属性是只读的。所以我实际上在做什么 - 我正在调用 initWithContentsOfURL 方法(再次)来设置这样的 URL:
[self.background initWithContentsOfURL:
[[_playlist.collection objectAtIndex:currentIndex] songURL] error:nil];
这是合法的吗?我的意思是,编译器告诉我表达式结果未使用,但它确实有效。 还有另一种方法吗?谢谢;-)
【问题讨论】:
【参考方案1】:要播放多个 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];
【讨论】:
这个问题是关于音频的。这适用于音频吗?【参考方案2】:已经检查了 4 个 Apple 样本,它们仅使用 AVAudioPlayer 播放一首歌曲。但是,您的结果看起来非常有趣且令人印象深刻!请告诉我们,您是否在重新初始化具有相同地址的对象之前停止播放,您是否开始新的音频会话?
就我而言,我不会将播放和应用程序稳定性置于文档中未提及的风险之中,但是,从好的方面来说,我会使用 AVAudioPlayer 类,因为它似乎是最正确的,它给出了我们:
使用错误变量来跟踪可能的错误 停止正在播放的 AVAudioPlayer 实例,初始化一个新的 AVAudioPlayer 实例并将其设置为让旧实例自动释放的属性。你可能知道自己,那个
self.background = [self.background initWithContentsOfURL::
将为您删除警告。
【讨论】:
是的,我停止播放,设置新的 URL,然后将其设置为播放。感谢您提供有关如何删除警告的提示,非常感谢;-) 嗨@nemesis,另一个答案看起来是实现您目标的最佳方式,您可以将其标记为已接受吗? Heelo @A-Live。我不想接受另一个答案,因为它没有回答我的问题。我想知道如何更改 AVAudioPlayer 的当前 URL,而不是按顺序播放项目。 @nemesis 当然由你决定,我认为可以通过添加一个新 URL 作为下一个播放列表项、推进播放并删除第一项来完成。这样一来,您就可以在播放列表中有一个项目,但是,是的,还有额外的变化。以上是关于AVAUdioPlayer - 更改当前 URL的主要内容,如果未能解决你的问题,请参考以下文章
iPhone SDK:使用核心音频 AVAudioPlayer 更改播放速度