在 tableview 中缓存视频

Posted

技术标签:

【中文标题】在 tableview 中缓存视频【英文标题】:Cache videos in 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。您是什么意思:“应该下载视频并将其存储在库文档中”? 【参考方案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

以上是关于在 tableview 中缓存视频的主要内容,如果未能解决你的问题,请参考以下文章

在 viewController 中重新加载 tableView

仿微博视频边下边播之滑动TableView自动播放-b

以编程方式在特定 UICollectionViewCell 内的 TableView?

滚动视图内的不可滚动的tableview

在 tableview 中填充数组字典的高效和干净的方法

javafx 在tableView里插入checkbox