【问题标题】:Caching Video iOS缓存视频 iOS
【发布时间】:2017-01-24 11:25:29
【问题描述】:
  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];

..etc 和播放

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

我怎样才能以不同的方式实现缓存或升级这个。帮助。

【问题讨论】:

    标签: ios objective-c caching avplayer avplayeritem


    【解决方案1】:

    我们可以使用NSURLSession从云端下载任何数据,正在下载和完成NSURLSession触发委托方法,我们可以通过使用该委托方法知道下载完成事件和进度事件,您可以使用@987654322实现下载功能@如下

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

    【讨论】:

      【解决方案2】:

      我有一个带有视频项目垂直集合视图的应用,每个项目都应该不断重复,直到向上或向下滑动。

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

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

      1. 流 AVURLAsset,
      2. 结束时,我使用 AVAssetExportSession 将文件保存到磁盘,
      3. 然后我使用保存的文件创建新的 AVPLayerItem 和新的 AVAsset,
      4. AVPlayer 的 replaceCurrentItem(with: )

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

      【讨论】:

        猜你喜欢
        • 2020-08-11
        • 2020-07-24
        • 2016-09-16
        • 2012-02-12
        • 2015-07-15
        • 1970-01-01
        • 2017-05-23
        • 2014-07-15
        • 2014-01-03
        相关资源
        最近更新 更多