iOS: AVQueuePlayer не указывает, что он остановил воспроизведение

У меня есть AVQueuePlayer, который загружает URL-адреса для воспроизведения аудиофайлов, и по большей части он работает хорошо. Однако я столкнулся с проблемой, когда после того, как проигрыватель закончит воспроизведение файла (с другим файлом в очереди), он просто перестанет воспроизводиться. Обычно приложение может использовать rate, status и items игрока. В этом случае я прошел через отладчик, и все выглядит нормально.

Вроде все играет, кроме самого плеера. После принудительного воспроизведения проигрыватель перейдет к следующему треку, указывая на то, что AVPlayerItem, который у него был, не был загружен (я могу подтвердить, что URL-адреса аудио действительны).

У кого-нибудь есть идеи, как я поймаю это программно?


person loadedion    schedule 22.01.2014    source источник


Ответы (1)


Вам нужен метод делегата:

- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag;

Как только этот метод будет завершен, запустите новый звук.

person random    schedule 22.01.2014
comment
Приложение зарегистрировано для уведомления AVPlayerItemDidPlayToEndTimeNotification. Однако в этом случае я не форсирую воспроизведение, а только удаляю текущий элемент проигрывателя (файл, который только что закончился). AVQueuePlayer продолжит воспроизведение любых элементов в своей очереди. - person loadedion; 22.01.2014
comment
AVPlayerItemDidPlayToEndTimeNotification может публиковать сообщения в другой теме, отличной от той, в которой он был зарегистрирован. Вы проверили это? - person random; 22.01.2014
comment
Я не проверял, но будет ли это актуально в данном случае? Аудиоплеер является потокобезопасным и содержится в одноэлементном классе. - person loadedion; 22.01.2014
comment
Хм, наверное, нет, вызывается ли указанный выше метод делегата при запуске AVPlayerItemDidPlayToEndTimeNotification? - person random; 22.01.2014
comment
Я не реализовал audioPlayerDidFinishPlaying, но думаю, что он не сработает, так как он предназначен для AVAudioPlayer. Я начинаю думать, что причиной проблемы может быть AVPlayerItem, который стоит в очереди в плеере. После ручного нажатия кнопки воспроизведения появляется немедленное уведомление AVPlayerItemDidPlayToEndTimeNotification. Хотя URL-адреса мультимедиа действительны, срок их действия истекает примерно через минуту. Файлы крошечные и должны начать буферизацию сразу после создания AVPlayerItem, но это предположение может быть подозрительным. - person loadedion; 23.01.2014