Инициализация AVAudioPlayer с помощью URL-адреса композиции iPod с помощью initWithContentsOfURL
Я знаю, что можно воспроизводить песни 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/"URL-адрес, используемый с initWithContentsOfURL: должен быть URL-адресом файла (file: //). местный путь. "
Когда я получаю URL-адрес песни в моей библиотеке iPod, путь:
Сделать ставку библиотека: //item/item.mp3 ID =-4017276016911605928
Можете ли вы сказать, что этот путь к моей библиотеке iPod не считается "локальным путем", или вы считаете это ошибкой, initWithContentsOfURL
возвращает NULL?
Мысли кто-нибудь?
1 ответ
Вы как бы ответили на свой вопрос, потому что из того, что я могу собрать, важен путь URL. AVAudioPlayer
и он должен быть локальным для пакета. Есть пример использования AVPlayer
с уведомлениями, поиск AVPlayerDemo
за playerItemDidReachEnd
но я не могу сказать вам, работает ли он в фоновом режиме или на переднем плане.