AVAUdioPlayer - изменение текущего URL - PullRequest
4 голосов
/ 15 марта 2012

В моем приложении аудиоплеера, если я нажму кнопку ускоренной перемотки вперед - проигрыватель должен найти следующую песню в списке воспроизведения и воспроизвести ее.Я получаю URL-адрес следующей песни и пытаюсь поместить его в фоновое поле (фон является экземпляром AVAudioPlayer *), но это свойство доступно только для чтения.Итак, что я на самом деле делаю - я вызываю метод initWithContentsOfURL (снова), чтобы задать URL-адрес следующим образом:

[self.background initWithContentsOfURL:
[[_playlist.collection objectAtIndex:currentIndex] songURL] error:nil];

Это законно?Я имею в виду, что компилятор говорит мне, что результат выражения не используется, но на самом деле он работает.Есть ли другой способ сделать это?Спасибо; -)

Ответы [ 2 ]

17 голосов
/ 13 января 2013

Для воспроизведения нескольких URL-адресов или эффективного изменения URL-адреса используйте подкласс AVQueuePlayer.

AVQueuePlayer - это подкласс AVPlayer, который используется для воспроизведения нескольких элементов в последовательности.

Пример:

NSString *fooVideoPath = [[NSBundle mainBundle] pathForResource:@"tommy" ofType:@"mov"];
NSString *barVideoPath = [[NSBundle mainBundle] pathForResource:@"pamela" ofType:@"mp4"];

AVPlayerItem *fooVideoItem = [AVPlayerItem playerItemWithURL:[NSURL fileURLWithPath:fooVideoPath]];
AVPlayerItem *barVideoItem = [AVPlayerItem playerItemWithURL:[NSURL fileURLWithPath:barVideoPath]];

self.queuePlayer = [AVQueuePlayer queuePlayerWithItems:[NSArray arrayWithObjects:fooVideoItem, barVideoItem,nil]];
[self.queuePlayer play];

// things happening...

[self.queuePlayer advanceToNextItem];
4 голосов
/ 15 марта 2012

Проверили 4 семпла Apple, они используют AVAudioPlayer для воспроизведения только одной песни.Однако ваш результат выглядит очень интересно и впечатляюще!Пожалуйста, дайте нам знать, останавливаете ли вы воспроизведение перед повторной инициализацией объекта с тем же адресом, начинаете ли вы новый аудиосеанс?

Что касается меня, я бы не стал рисковать стабильностью воспроизведения и приложения, делая эточто-то, не упомянутое в документации, но, чтобы быть ярким, использовало бы класс AVAudioPlayer, как это кажется наиболее правильным, что дает нам:

  • использовать переменную error для отслеживания возможных ошибок
  • остановите воспроизведение экземпляра AVAudioPlayer, инициализируйте новый экземпляр AVAudioPlayer и установите для него свойство, позволяющее автоматически удалять старый экземпляр.

И вы, вероятно, знаете, что

self.background = [self.background initWithContentsOfURL::

удалит предупреждение для вас.

...