在 tableview 中缓存视频
Posted
技术标签:
【中文标题】在 tableview 中缓存视频【英文标题】:Cache videos in tableview 【发布时间】:2016-10-25 14:11:13 【问题描述】:我想缓存在 tableview 中显示的视频。但是,我不确定要缓存什么。我正在使用AVFoundation
,特别是我正在使用AVPlayer
并创建AVPlayerItem
。
我的问题是:我要缓存什么?是AVPlayer
、AVPlayerItem
,还是AVPlayerItem
的标的资产AVAsset
?
请给出一个带有答案的代码示例(或库)。谢谢!
【问题讨论】:
您是从网上下载视频吗?即 AVPlayer url,它的字符串是什么?如果我没记错的话,您应该下载视频并将其存储在库文档中 - 例如 - 然后获取其 url @AhmadF 是的,我正在从网上下载所有视频。我正在使用这个库,它是AVPlayer
和 AVPlayerLayer
类的简单包装器,称为 Vimeo VIMVideoPlayer
。所以是的,库创建了一个AVPlayer
并使用AVPlayerItem
,这些AVPlayerItem
是用url 初始化的。这是一个示例视频网址:https://vines.s3.amazonaws.com/videos/08C49094-DFB4-46DF-8110-EEEC7D4D6115-1133-000000B8AD9BE72C_1.0.1.mp4
。您是什么意思:“应该下载视频并将其存储在库文档中”?
【参考方案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
,那是AVPlayer
、AVPlayerItem
,还是AVPlayerItem
的基础资产称为AVAsset
? 以上是关于在 tableview 中缓存视频的主要内容,如果未能解决你的问题,请参考以下文章
在 viewController 中重新加载 tableView