gpt4 book ai didi

ios - 是否可以缓存视频? IOS- swift

转载 作者:搜寻专家 更新时间:2023-10-30 21:55:55 26 4
gpt4 key购买 nike

我正在尝试在 Instagram、vine 甚至 facebook 等 tableView 中下载和播放视频。

我想要实现的是一个 tableView,我在其中显示视频,它们会在滚动时自动下载和播放。喜欢 Instagram...

到目前为止,我已经完成了大部分工作,但我想改变的是,每次我查看一个单元格时,视频都会被一次又一次地下载……当然,必须有一种方法来缓存视频,或者只下载同一个视频一次......就像你对图像使用 SDWebImages 一样。

目前每次我查看单元格时都会下载它,您可以想象滚动非常糟糕。

现在我似乎无法弄清楚 Instagram 是如何做到这一点的,但我 100% 确定他们不会多次下载同一个视频!!

如果有人有建议或想法,我很想听听他们!!

非常感谢。

最佳答案

使用 Haneke,我无法检索缓存视频的文件路径。我通过将视频保存在缓存目录中来处理它。

public enum Result<T> {
case success(T)
case failure(NSError)
}

class CacheManager {

static let shared = CacheManager()

private let fileManager = FileManager.default

private lazy var mainDirectoryUrl: URL = {

let documentsUrl = self.fileManager.urls(for: .cachesDirectory, in: .userDomainMask).first!
return documentsUrl
}()

func getFileWith(stringUrl: String, completionHandler: @escaping (Result<URL>) -> Void ) {


let file = directoryFor(stringUrl: stringUrl)

//return file path if already exists in cache directory
guard !fileManager.fileExists(atPath: file.path) else {
completionHandler(Result.success(file))
return
}

DispatchQueue.global().async {

if let videoData = NSData(contentsOf: URL(string: stringUrl)!) {
videoData.write(to: file, atomically: true)

DispatchQueue.main.async {
completionHandler(Result.success(file))
}
} else {
DispatchQueue.main.async {
completionHandler(Result.failure(NSError.errorWith(text: "Can't download video")))
}
}
}
}

private func directoryFor(stringUrl: String) -> URL {

let fileURL = URL(string: stringUrl)!.lastPathComponent

let file = self.mainDirectoryUrl.appendingPathComponent(fileURL)

return file
}
}

这个类的示例用法如下所示:

CacheManager.shared.getFileWith(stringUrl: "http://techslides.com/demos/sample-videos/small.mp4") { result in

switch result {
case .success(let url):
// do some magic with path to saved video
case .failure(let error):
// handle errror
}
}

关于ios - 是否可以缓存视频? IOS- swift ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41551215/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com