У нас есть приложение, над которым мы работаем, которое должно обеспечивать воспроизведение видеофайлов через AVPlayer. Файлы должны храниться на устройстве пользователя, но также должны воспроизводиться во время загрузки.
На данный момент мы создали модуль загрузки, который использует библиотеку ASIHTTPRequest для получения видеофайлов через PHP. (мы не хотим, чтобы носители могли быть связаны через общедоступные URL-адреса) и записывать их на диск асинхронно.
Затем мы настроили AVPlayer согласно Руководство по программированию AV Foundation, получение файла с AVURLAsset, создание AVPlayerItem с активом, создание AVPlayer с этим элементом, а затем установка проигрывателя на AVPlayerLayer . Плеер отлично работает с полностью загруженным видеофайлом, а также отлично запускает постепенно загружаемый файл в симуляторе.
К сожалению, на реальном устройстве поведение плеера меняется, вместо этого он, по-видимому, загружает видео один раз и не пытается захватить новые пакеты с диска. В результате проигрыватель будет воспроизводить видео и аудио до той точки в видео, которая отмечает, где прогресс загрузки был на момент загрузки ресурса (например, если 2 МБ данных буферизованы, то проигрыватель создается, игрок будет воспроизводить только до 2 МБ данных). Поскольку у него есть заголовок видео, игрок с радостью продолжит думать, что он воспроизводится на протяжении всего видео, но никакое другое видео не отображается на экран.
Последняя проблема заключается в том, что если видео вставлено в AVComposition и AVPlayer создан с его помощью, прогрессивное видео будет воспроизводиться нормально. Это было бы прекрасным решением (и в любом случае оно необходимо для нашего приложения), за исключением того, что клиент для нашего приложения требует, чтобы видео воспроизводилось на Apple TV через AirPlay, на что AVCompositions неспособны.
Кто-нибудь знает, есть ли способ воспроизводить постепенно загружаемые видеофайлы с помощью AVPlayer, созданного из AVURLAssets? Есть ли способ заставить player / playerItem читать с диска с помощью AVURLAsset так, как кажется делать с AVComposition вместо, казалось бы, кеширования видео в памяти?
Спасибо!