【发布时间】:2012-01-31 05:51:04
【问题描述】:
我知道可以使用 AVPlayer 播放 iPod 歌曲,但我不知道如何使用 initWithContentsOfURL 使用 iPod 歌曲 URL 初始化 AVAudioPlayer。当我尝试时,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。
关于为什么当我使用AVAudioPlayer 时返回NULL,但在我使用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 是一个错误?
有人想吗?
【问题讨论】:
-
有什么解决办法吗?我在 Swift 中做同样的事情,但没有运气。 .能否请您告诉如何将上述网址设为本地网址
-
@UsamaSadiq 抱歉,但正如您从下面的答案中看到的那样,似乎没有解决方案(至少没有一个对我有用)。
标签: ios background avaudioplayer initwithcontentsofurl