使用initWithContentsOfURL使用iPod歌曲URL初始化AVAudioPlayer

时间:2011-12-31 23:46:52

标签: ios background avaudioplayer initwithcontentsofurl

我知道可以使用AVPlayer播放iPod Songs,但我无法弄清楚如何使用AVAudioPlayer使用iPod歌曲网址初始化initWithContentsOfURL。当我尝试时,AVAudioPlayer在初始化时返回NULL。

我需要使用AVAudioPlayer,因为当我的应用在后台运行时(即audioPlayerDidFinishPlaying委托方法AVAudioPlayer如果应用程序在后台运行,则会调用。但audioPlayerDidFinishPlaying不提供委托方法,因此您只能使用不在后台运行的通知。

以下代码用于播放AVPlayer的iPod歌曲。

AVPlayer

这很有效。但如果我用以下内容替换倒数第二行:

- (void)viewDidLoad {

    [super viewDidLoad];
    AVAudioSession *session = [AVAudioSession sharedInstance];
    [session setCategory:AVAudioSessionCategoryPlayback error:nil];
    NSError *error = nil;

    [session setActive:YES error:&error];
    MPMediaQuery *query = [MPMediaQuery songsQuery];
    NSArray *collection = [query items];
    MPMediaItem *item = [collection objectAtIndex:0];
    NSLog(@"%@",[item valueForProperty:MPMediaItemPropertyTitle]);
    NSURL *url = [item valueForProperty:MPMediaItemPropertyAssetURL];
    AVPlayer *player = [[AVPlayer alloc]initWithURL:url];   // <-- Line to Replace
    [player play];
}

AVAudioPlayer *player = [[AVAudioPlayer alloc]initWithContentsOfURL:url error:nil]; 的调用返回NULL。

关于为何在使用initWithContentsOfURL时返回NULL的想法,但在使用AVAudioPlayer时返回初始化的播放器?

根据技术问答http://developer.apple.com/library/ios/#qa/qa1634/_index.html,&#34;与initWithContentsOfURL一起使用的URL:必须是文件URL(file://)。也就是说,本地路径。&#34;

当我在iPod库中获取该歌曲的网址时,路径为:

的iPod库://item/item.mp3 ID = -4017276016911605928

您是否会说我的iPod库的这条路径不被视为&#34;本地路径&#34;或者你认为它是AVPlayer返回NULL的错误?

有人想到吗?

1 个答案:

答案 0 :(得分:1)

你有点回答了自己的问题,因为从我可以收集的内容来看,它是对AVAudioPlayer很重要的网址路径,它必须是捆绑的本地路径。有一个使用AVPlayer添加通知的示例,搜索AVPlayerDemo playerItemDidReachEnd,但我无法告诉您它是在后台运行还是在前台运行。