Инициализация 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 но я не могу сказать вам, работает ли он в фоновом режиме или на переднем плане.

Другие вопросы по тегам