AVPlayer seekToTime: не использует буфер

Я занимаюсь разработкой приложения для воспроизведения видео с использованием технологии HTTP Live Streaming.
Для этого я использую AVPlayer, который инициализируется следующим образом:

[[AVPlayer alloc] initWithURL:[NSURL URLWithString:VIDEO_URL]];

Затем я проверяю состояние буфера, используя self.player.currentItem.loadedTimeRanges и отобразить этот диапазон в моем пользовательском представлении.

Проблема заключается в том, что при перемотке в области, которая загружается [self.player seekToTime:timeToSeek toleranceBefore:kCMTimeZero toleranceAfter:kCMTimeZero];, загрузка видео начинается так, как если бы его не было в буфере.

2 ответа

Прежде всего, мой ответ предполагает, что вы используете HTTP Live Streaming для статического списка m3u8, иначе поиск по видео не будет иметь особого смысла.

Возможная причина

HTTP Live Streaming использует список воспроизведения в стиле m3u, который включает подсписки воспроизведения. Каждый вспомогательный список воспроизведения показывает различное качество видео, и AVPlayer выбирает, какой из них использовать в соответствии со скоростью сети.

Но, согласно документации Apple, когда проигрыватель изначально начинает воспроизведение, он сначала выбирает первый вспомогательный список воспроизведения, и только после воспроизведения нескольких файлов ts он выбирает соответствующий вспомогательный список воспроизведения, как описано выше.

Так что может случиться так, что когда вы ищете определенное время, игрок сначала пытается воспроизвести первый подсписок, который не кэшируется.

Предлагаемое решение

Попробуйте следующее:

  1. Измените поток m3u8, чтобы иметь только один подпоток.
  2. Используйте значение, отличное от kCMTimeZero для допуска, т.е.CMTimeMake(30, 60)
  3. Контролируйте сетевые вызовы, чтобы увидеть, что именно загружает плеер и когда, например, вы можете использовать прокси-сервер Charles.

Попробуйте использовать пример кода StitchedStreamPlayer, предоставленный в библиотеке iOS Developer для вашего ответа.

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