【问题标题】:Cache videos in tableview在 tableview 中缓存视频
【发布时间】:2016-10-25 14:11:13
【问题描述】:

我想缓存在 tableview 中显示的视频。但是,我不确定要缓存什么。我正在使用AVFoundation,特别是我正在使用AVPlayer 并创建AVPlayerItem

我的问题是:我要缓存什么?是AVPlayerAVPlayerItem,还是AVPlayerItem的标的资产AVAsset

请给出一个带有答案的代码示例(或库)。谢谢!

【问题讨论】:

  • 您是从网上下载视频吗?即 AVPlayer url,它的字符串是什么?如果我没记错的话,您应该下载视频并将其存储在库文档中 - 例如 - 然后获取其 url
  • @AhmadF 是的,我正在从网上下载所有视频。我正在使用这个库,它是 AVPlayerAVPlayerLayer 类的简单包装器,称为 Vimeo VIMVideoPlayer。所以是的,库创建了一个AVPlayer 并使用AVPlayerItem,这些AVPlayerItem 是用url 初始化的。这是一个示例视频网址:https://vines.s3.amazonaws.com/videos/08C49094-DFB4-46DF-8110-EEEC7D4D6115-1133-000000B8AD9BE72C_1.0.1.mp4。您是什么意思:“应该下载视频并将其存储在库文档中”?

标签: ios swift avfoundation avplayer avasset


【解决方案1】:

您需要private var mediaCache = NSMutableDictionary() 来缓存视频。

如何缓存:

let assetForCache = AVAsset(url: URL(string: cell.videoRef)!)
self.mediaCache.setObject(assetForCache, forKey: cacheKey as NSCopying)

如何使用:只需检查该行的缓存中是否存在对象。如果是 - 使用它,不 - 下载它

【讨论】:

    【解决方案2】:

    缓存意味着下载每个单元格的视频,并尝试第二次使用下载的视频。您可以临时位置或文档目录。 执行下载调用以从 URL Video Link 下载视频。

    在您的 cellForRowat 索引路径中,检查您本地的视频是否有播放。否则第一次流式传输,同时下载 在后台调用该视频。这样您就可以第二次使用本地视频并在没有互联网的情况下播放。

    【讨论】:

    • 感谢您的解释。但是我不确定如上所述要缓存什么,我知道它是视频,但使用AVFoundation,那是AVPlayerAVPlayerItem,还是AVPlayerItem 的基础资产称为AVAsset
    猜你喜欢
    • 1970-01-01
    • 2020-07-24
    • 1970-01-01
    • 2021-06-28
    • 1970-01-01
    • 2015-07-15
    • 1970-01-01
    • 2021-03-01
    • 1970-01-01
    相关资源
    最近更新 更多