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