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

问题描述:

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

我需要使用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时返回一个初始化的玩家?

根据Technical Q & A http://developer.apple.com/library/ios/#qa/qa1634/_index.html,“与initWithContentsOfURL:一起使用的URL必须是文件URL(file://),即本地路径。”

当我获得在我的iPod库中的歌曲的URL,路径为:

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

你会说,这我的iPod库的路径不被视为“本地路径”,或者您认为它是initWithContentsOfURL返回NULL的错误?

想到任何人?

+0

任何解决方案?我在斯威夫特做同样的事,但没有运气。 。你可以请告诉如何使上述网址作为本地URL – 2015-07-29 07:03:33

+0

@UsamaSadiq对不起,但正如你从下面的答案中可以看到,似乎没有解决方案(至少没有适用于我的)。 – JeffB6688 2015-07-31 03:21:20

你有种回答你自己的问题,因为从我可以收集的是它是对AVAudioPlayer重要的url路径,它必须是本地的捆绑。有一个例子使用AVPlayer与通知,搜索AVPlayerDemoplayerItemDidReachEnd但我不能告诉你它是否在后台或前台运行。

+0

好的,谢谢。我不知道URL路径必须是本地的捆绑。很高兴知道。不幸的是,当应用程序处于后台时,来自AVPlayer的通知将被暂停,直到它重新进入前台,所以不会帮助 – JeffB6688 2012-02-27 15:43:14

+1

我认为“本地”意味着“在软件包中”还是“在设备上”是不明确的。带有ipod-library URL的AVAudioPlayer initWithContentsOfURL似乎在iOS 6和7中可以正常工作,但我没有看到任何官方文档或对此更改的解释。 – arlomedia 2013-12-16 01:26:51