Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Инициализация AVAudioPlayer с URL-адресом песни iPod с помощью initWithContentsOfURL

Автор вопроса: JeffB6688Ответов: 1

Я знаю, что можно воспроизводить песни 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?

Кто-нибудь думает?

  • какое решение для этого? я делаю то же самое в Swift, но не повезло. . не могли бы вы рассказать, как сделать указанный выше URL-адрес локальным Usama Sadiq 29.07.2015
  • @UsamaSadiq Извините, но, как вы можете видеть из ответа ниже, похоже, что решения нет (по крайней мере, такого, который не работает для меня). JeffB6688 31.07.2015

iosbackgroundavaudioplayerinitwithcontentsofurl

Ответы

Ответ 1 · рейтинг 1 · macasas

Вы как бы ответили на свой вопрос, потому что из того, что я могу понять, для AVAudioPlayer важен URL-путь, и он должен быть локальным для пакета. Есть пример использования AVPlayer с уведомлениями, ищите AVPlayerDemo для playerItemDidReachEnd, но я не могу сказать, работает ли он в фоновом или переднем плане.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы