iOS: предварительная загрузка видео AVPlayer

Я использую AVPlayer для воспроизведения видео. Продолжительность их короткая, 2-5 секунд. Они воспроизводятся в случайном порядке. Проблема в том, что при смене видео и начале воспроизведения нового видео устройство отстает на очень короткое время, но я не хочу, чтобы изменение было плавным. Есть ли способ предварительно загрузить видео с помощью AVPlayer?


person McDermott    schedule 02.12.2011    source источник
comment
Следуйте этому ответу. stackoverflow.com/questions/4218090/ Может быть полезно для вас.   -  person iPatel    schedule 19.08.2016


Ответы (1)


Попробуйте использовать AVQueuePlayer. Я предполагаю, что то, что вы описали как отставание, на самом деле является задержкой предварительной буферизации. Это должно быть сведено к минимуму или фактически полностью устранено при использовании AVQueuePlayer, так как этот ребенок будет буферизовать следующий AVPlayerItem во время воспроизведения текущего.

Из документации AVFoundation:

В iOS 4.1 и более поздних версиях вы можете использовать объект AVQueuePlayer для последовательного воспроизведения ряда элементов (AVQueuePlayer является подклассом AVPlayer).

Также см. ответ Михая на Pre-buffering-for-avqueueplayer.

person Till    schedule 05.12.2011
comment
Служба поддержки разработчиков Apple только что подтвердила мне, что AVQueuePlayer не буферизует элементы видео. - person midas06; 10.04.2013
comment
@ midas06 прав. Без буферизации. Вы все еще получаете разрыв между видео. - person Jordan Smith; 17.11.2014
comment
@midas06 @Jordan, убедитесь, что у вас есть insertItem достаточно времени, чтобы поставить элементы в очередь для плавного перехода. Если это достаточно короткие элементы, вам, возможно, придется поставить в очередь несколько элементов, прежде чем будет воспроизведен самый первый элемент. Вы можете обнаружить, что наблюдатели значений ключей помогают определить, когда элемент игрока готов. Также может помочь установка допусков playerItem.seekToTime(startTime, toleranceBefore: kCMTimeZero, toleranceAfter:kCMTimeZero) - person mgamba; 25.06.2016
comment
Следуйте этому ответу. stackoverflow.com/questions/4218090/ Может быть полезно для вас. - person iPatel; 19.08.2016
comment
@ midas06 похоже, это верно только для iOS 4, а не 5 или выше. - person Till; 21.02.2020