Корневая проблема
Наше видео много буферизуется при поиске в iOS. Он буферизует немного больше, чем наш веб-плеер, который сохраняет копии уже просмотренных сегментов в хранилище temp.
Желаемое решение
Кэширование видео сегментов локально на диске устройства. Мы в порядке с кешированием одного качества и всегда воспроизводим его.
Blocker
Мы не можем найти способ выполнить кеширование в AVFoundation/AVPlayer.
Что мы пробовали
2 способа перехвата сетевых запросов с помощью AVPlayer.
- Соответствует AVAssetResourceLoaderDelegate и обрабатывает загрузку носителя вручную
Не работает с HLS. Вы можете загружать файлы m3u8, реализуя AVAssetResourceLoaderDelegate, который позволяет передавать аутентификацию или расшифровывать ответ, однако файлы .ts не могут быть загружены. Вот код, который мы пробовали: https://gist.github.com/nathanhillyer/84e46152d7c4c88183b6
- Реализация NSURLProtocol для захвата запросов для файлов
.ts
.
AVURLAsset фактически избегает перехвата. Как-то сетевые запросы просто не захватываются. (Не знаю, почему)