缓存视频 iOS


  AVAsset *asset = [AVAsset assetWithUrl:@"myUrl.mp4"];
  AVPlayerItem * item = [AVPlayerItem itemWithAsset:asset];
  AVPlayer * player  = [AVPlayer playerWithItem:item];
 playerViewController.player = player;
 [player play];

我如何才能完全知道该资产或项目或任何下载的视频。我需要它用于将来缓存它;

现在我使用

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];

..等和播放

但它有点慢。如果videoData包含在AVAsset中,我可以存储它或AVPlayerItem。但是我需要知道它何时下载。

如何以不同的方式实现缓存或升级此缓存。帮助。

我们可以使用 NSURLSession 从云下载任何数据,下载正在进行并完成 NSURLSession 触发委托方法,

我们可以使用该委托方法了解下载完成事件和进度事件,您可以使用 NSURLSession 实现下载功能,如下所示

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

我有一个具有视频项目垂直集合视图的应用程序,每个项目都应该连续重复,直到向上或向下滑动。

所以我不需要每次都流式传输文件也不需要下载之前下载的文件。

我想出了稍微不同的方法:

  1. Stream AVURLAsset,
  2. 到达末尾时,我使用 AVAssetExportSession 将文件保存到磁盘,
  3. 然后我使用保存的文件创建新的AVPLayerItem与新的AVAsset,
  4. AVPlayer's replaceCurrentItem(with: <#T##AVPlayerItem?#>)

但我想这是蹩脚的。我必须蒸两次文件。第一次运行时,然后保存文件时。我只想将 AVAsset 缓存到当前应用程序会话的内存中,因此我不需要保留文件。

最新更新