2017-01-24 7 views
1
AVAsset *asset = [AVAsset assetWithUrl:@"myUrl.mp4"]; 
    AVPlayerItem * item = [AVPlayerItem itemWithAsset:asset]; 
    AVPlayer * player = [AVPlayer playerWithItem:item]; 
playerViewController.player = player; 
[player play]; 

Как я могу узнать об этом свойстве или предмете или о том, что скачал полностью. Мне это нужно для будущего кеширования;Кэширование видео iOS

Теперь им с помощью

NSData * videoData = [NSData dataWithUrl:myurl.mp4"]; 
NSCache *cache = [NSCache new]; 
[cache setObject:videoData forKey:myUrl]; 

И когда я извлечения данных из nscache я пишу его в файл и играть

NSData *videoData = [cache objectForKey:myUrl]; 
[videoData writeToFile:MyPath.mp4 atomically:YES]; 

А потом

NSURL *url = [NSURL fileUrlWithPath:mypath]; 
AVAsset *asset = =[AVAsset assetWithURL:url]; 

..etc и играть

Но это a litt le бит медленный. , если videoData содержит в AVAsset, я могу сохранить его или AVPlayerItem. Но мне нужно знать, когда он загружается.

Как я могу реализовать кэширование по-другому или обновить этот. Помогите.

ответ

1

мы можем загрузить любые данные из облака, используя NSURLSession, Идет загрузку и завершение NSURLSession метода пожаров делегата, мы можем знать, событие завершения загрузки и и прогрессию событие, используя, что методы делегата, вы можете реализовать загрузку функциональности с помощью NSURLSession следующего образом

https://www.raywenderlich.com/110458/nsurlsession-tutorial-getting-started

0

у меня есть приложение с вертикальной точки зрения сбора видео элементов, каждый элемент должен повторяться непрерывно, пока не прокатывается вверх или вниз.

Поэтому мне не нужно передавать файл каждый раз, когда и не загружают файлы, которые были загружены ранее.

я придумал несколько иной подход:

  1. поток AVURLAsset,
  2. Когда достигнут конец я использую AVAssetExportSession, чтобы сохранить файл на диске,
  3. Затем я создаю новый AVPLayerItem с новым AVAsset использованием сохраненного файла ,
  4. AVPlayer в replaceCurrentItem (с: < # T ## AVPlayerItem #>)

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

Смежные вопросы