使用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的错误?
想到任何人?
你有种回答你自己的问题,因为从我可以收集的是它是对AVAudioPlayer
重要的url路径,它必须是本地的捆绑。有一个例子使用AVPlayer
与通知,搜索AVPlayerDemo
为playerItemDidReachEnd
但我不能告诉你它是否在后台或前台运行。
任何解决方案?我在斯威夫特做同样的事,但没有运气。 。你可以请告诉如何使上述网址作为本地URL – 2015-07-29 07:03:33
@UsamaSadiq对不起,但正如你从下面的答案中可以看到,似乎没有解决方案(至少没有适用于我的)。 – JeffB6688 2015-07-31 03:21:20