我知道可以使用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的错误?
有人想到吗?
答案 0 :(得分:1)
你有点回答了自己的问题,因为从我可以收集的内容来看,它是对AVAudioPlayer
很重要的网址路径,它必须是捆绑的本地路径。有一个使用AVPlayer
添加通知的示例,搜索AVPlayerDemo
playerItemDidReachEnd
,但我无法告诉您它是在后台运行还是在前台运行。