AVPlayer + петля + фон - PullRequest
       16

AVPlayer + петля + фон

1 голос
/ 21 июня 2011

Мне нужно:

  • воспроизвести звук
  • петли
  • продолжать играть в фоновом режиме

Все отлично работает с AVAudioPlayer, но теперь я должен использовать AVPlayer для воспроизведения также музыкальных песен из библиотеки iPod. Но есть большая проблема: AVPlayer не имеет свойства numberOfLoops, как в AVAudioPlayer.

Хорошо, вы можете зарегистрировать уведомление на NSNotificationCenter для AVPlayerItemDidPlayToEndTimeNotification (или вы также можете использовать метод addBoundaryTimeObserverForTimes с указанным временем, равным продолжительности песни), чтобы получать уведомления о завершении воспроизведения песни до конца , Но это работает, только если приложение находится на переднем плане, на заднем плане песня продолжает воспроизводиться, но останавливается в конце.

Уведомление получено также в фоновом режиме (проверяется с помощью NSLog), но код селектора:

AVPlayerItem *playerItem = [notification object];  
[playerItem seekToTime:kCMTimeZero];

... не имеет эффекта, песня не зацикливается.

Есть предложения?

Ответы [ 2 ]

3 голосов
/ 19 декабря 2011

Проблема, с которой вы столкнулись, заключается в том, что в тот момент, когда игрок выполняет поиск, ваше приложение выглядит так, как будто оно завершило воспроизведение аудио, и поэтому оно выбрасывается на костер. :)

Я потратил несколько дней на создание этого обходного пути:

  1. Добавить "Приложение воспроизводит аудио" в "Требуемый режим фона" в info.plist

  2. Создайте еще один AV-проигрыватель, который воспроизводит одну секунду mp3-файл со скоростью 0,00000001f (silentMp3Player.rate = 0,0000001f), который запускается, когда ваше приложение входит в фон, и останавливается, когда он снова входит в передний план.

0 голосов
/ 24 июля 2018

Попробуйте добавить этот код:

try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
try AVAudioSession.sharedInstance().setActive(true)
...