Я знаю, что можно воспроизводить песни iPod с помощью AVPlayer, но я не могу понять, как инициализировать AVAudioPlayer URL-адресом песни 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];
вызов initWithContentsOfURL возвращает NULL.
Есть ли какие-либо мысли о том, почему это возвращает NULL, когда я использую AVAudioPlayer, но возвращает инициализированный проигрыватель, когда я использую AVPlayer?
Согласно техническим вопросам и ответам http://developer.apple.com/library/ios/#qa/qa1634/_index.html, «URL-адрес, используемый с initWithContentsOfURL: должен быть URL-адресом файла (file: //). То есть локальным путем».
Когда я получаю URL-адрес песни в моей библиотеке iPod, путь следующий:
ipod-библиотека: //item/item.mp3? id = -4017276016911605928
Вы бы сказали, что этот путь к моей библиотеке iPod не считается «локальным путем», или вы считаете ошибкой, что initWithContentsOfURL возвращает NULL?
Кто-нибудь думает?