Кеширование поведения AVURLAsset

Я использую AVURLAsset с различными классами проигрывателей AV / MP, и похоже, что он игнорирует заголовки кеширования моего сервера. Я работаю с небольшими, постепенно загружаемыми видео (не HLS).

Есть ли способ обеспечить кеширование видео? Есть ли способ предварительно кешировать видео, чтобы они сразу воспроизводились? Я экспериментировал с простым изменением параметров в NSURLCache, но пока мне не повезло. Я также не могу найти прямого способа манипулировать тем, как AVURLAsset кэширует выборки URL-адресов.

Я не хочу загружать файл отдельно и указывать на локальную версию, потому что я не хочу ждать, пока файл будет полностью загружен, прежде чем я смогу начать играть. В идеале я бы также не хотел сам управлять кешем локального диска.


person Bjorn Roche    schedule 02.03.2016    source источник
comment
Один прием, который я видел раньше, - это разделение видео на два сегмента - первые 10 секунд или около того, а затем остальные. Идея состоит в том, чтобы традиционно загрузить и сохранить первый файл на диск, а второй - передать в потоковом режиме. Таким образом, вы в основном создаете список воспроизведения из двух файлов - локального URL-адреса и удаленного. AVPlayer достаточно умен, чтобы начать буферизацию удаленного потока во время воспроизведения локального файла.   -  person mszaro    schedule 03.03.2016
comment
Спасибо, Мэтт. Я не понимаю, как это будет работать с прогрессивными загрузками.   -  person Bjorn Roche    schedule 03.03.2016
comment
Допустим, вы проигрываете список из 10 небольших прогрессивных видео. Вы, вероятно, моделируете это как плейлист из 10 удаленных MP4. Я понимаю, что если вы действительно загрузите (например, загрузку NSURLSession) первые 1 или 2, теперь у вас есть список воспроизведения, содержащий два URL-адреса file: // и восемь URL-адресов https: //. Итак, если вы вначале предоставили AVFoundation полный список воспроизведения, будет достаточно умен, чтобы начать буферизацию ваших HTTP-фрагментов в фоновом режиме, пока первые несколько проигрываются с диска. Имеет ли это смысл?   -  person mszaro    schedule 04.03.2016


Ответы (1)


Есть класс AVAssetResourceLoader. Я думаю, вам следует реализовать два метода AVAssetResourceLoaderDelegate

Дополнительная информация здесь.

person typedef    schedule 02.03.2016
comment
Спасибо. Я смотрел на это, но, похоже, он не реализовал правильную вещь - я посмотрю более внимательно. - person Bjorn Roche; 03.03.2016