Хорошо, проблема решена.Похоже, передача AVURLAssetPreferPreciseDurationAndTimingKey в параметрах URLAssetWithURL: options: вызывает замедление.Это также происходит только тогда, когда к свойству duration AVURLAsset или некоторому другому свойству, связанному с синхронизацией потока, обращаются из селектора, запускаемого NSTimer.Так что, если вы можете избежать опроса информации о времени, эта проблема может не затронуть вас, но это не вариант для меня.Если точное время не запрашивается, задержка все равно составляет от 0,75 секунды до 1 секунды, но это все.
Оглядываясь назад, документация предупреждает, что точное время может привести к снижению производительности, но я никогда не предполагал10+ секунд задержек.Почему задержка должна масштабироваться со временем загрузки носителя, я не знаю;кажется, что он должен масштабироваться только с размером файла.Возможно, iOS выполняет какой-то интенсивный опрос новых данных и / или обрабатывает одни и те же байты снова и снова.
Так что теперь, без «точного времени и продолжительности», длительность ресурса постоянно равна 0,0,даже когда он полностью загружен.Я также могу ответить на мою первоначальную цель создания KVO на AVPlayerItem.isPlaybackBufferEmpty.Кажется, что KVO в любом случае будет бесполезным, поскольку свойство начинается с «НЕТ», меняется на «ДА», как только я запускаю воспроизведение, и продолжает оставаться «ДА», даже если мультимедиа воспроизводится несколько минут подряд.Документация говорит об этом свойстве:
Указывает, использовало ли воспроизведение все буферизованные носители и что воспроизведение будет остановлено или остановлено.
Так что я думаю, что это не точно, иПо крайней мере, в этом конкретном случае свойство не очень полезно.