我知道可以使用 AVPlayer 播放 iPod 歌曲,但我无法弄清楚如何AVAudioPlayer
使用initWithContentsOfURL
. 当我尝试AVAudioPlayer
时,初始化时返回 NULL。
我需要使用AVAudioPlayer
,因为当我的应用程序在后台运行时,我需要使用它的委托方法audioPlayerDidFinishPlaying
进行进一步处理(即,如果应用程序在后台运行,则调用AVAudioPlayer
委托方法audioPlayerDidFinishPlaying
。但是AVPlayer
不提供委托方法,所以你只能使用不在后台运行的通知)。
以下代码用于使用 AVPlayer 播放 iPod 歌曲。
- (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];
调用initWithContentsOfURL
返回 NULL。
关于为什么在我使用时返回 NULL AVAudioPlayer
,但在我使用时返回初始化播放器的任何想法AVPlayer
?
根据技术问答http://developer.apple.com/library/ios/#qa/qa1634/_index.html,“与 initWithContentsOfURL: 一起使用的 URL 必须是文件 URL (file://)。也就是说,本地路径。”
当我在我的 iPod 库中获取歌曲的 url 时,路径是:
ipod-library://item/item.mp3?id=-4017276016911605928
你会说我的 iPod 库的这个路径不被认为是“本地路径”还是你认为它是一个initWithContentsOfURL
返回 NULL 的错误?
有人想吗?