当前位置: 首页 > 面试题库 >

是否可以缓存视频?iOS-迅捷

申自明
2023-03-14
问题内容

我正在尝试在tableView之类的Instagram,vine甚至Facebook中下载和播放视频。

我想要实现的是一个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
        }
    }


 类似资料:
  • 我目前正在从事Angular/Ionic/Cordova项目,我们最近升级到了最新的Ionic测试版。从项目之前使用的版本来看,这引入了视图缓存。然而,这也带来了一个问题。 该应用程序面向客户,非常以数据为中心。但是,用户必须进行身份验证才能查看当前与其帐户关联的数据;当用户注销并登录到另一个帐户时,由于视图仍在缓存中,因此会显示上一个帐户的视图。 当用户登录时,应用程序仍应缓存视图,因为这有助于

  • 问题内容: 是否可以保护网站上的视频免遭下载? 虽然用户可以使用某些硬件设备来录制视频,但应该无法通过某些链接下载视频-就像Google视频一样。 例如,如果我的系统中装有Real One Player,则可以选择下载视频。这应该受到限制。 问题答案: 是。永远不要向任何人展示它。一旦您这样做,所有的赌注都将关闭(有关偏执狂的答案,请参阅最后一段)。 这是复制保护的常见问题:您无法以任何方式区分合

  • 鉴于这些实体和存储库可以访问DDBB中的数据: 我想为方法getTotalPurchaseAmounts(长customerId)添加缓存,这样,当为客户添加一些购买时,只有该客户的purchasesd被逐出。 相关的依赖项是: 相关配置: 由于spring缓存(和ehcache)逐出的次数受元素或所有条目的限制,我开发的解决方案是通过友好方式创建缓存(每个客户一个),这样我就可以逐出这些缓存。

  • 在android中,有一个名为Exoplayer的库,它与从给定URL流媒体视频有关。 根据这一点,firebase不支持视频流,尽管您可以将uri从url传递到videoview(它实际上会流)。 问题:

  • 问题内容: 它可能是实现细节,但是对于Oracle和IBM JDK而言,至少是对已编译模式进行了缓存,还是作为应用程序开发人员我们需要自己对已编译模式进行缓存? 问题答案: 我不认为结果会被缓存,并且代码或文档中也没有这种行为的证据。自己实现这样的缓存(当然)是比较琐碎的,但是我对这样的缓存很有用的用例感兴趣。 回覆。下面的注释和String.split(),有一种不同的方法,即代码采用简单的1或

  • 问题内容: 在这里很难说出要问什么。这个问题是模棱两可,含糊不清,不完整,过于宽泛或夸张的,不能以目前的形式合理地回答。如需帮助澄清此问题以便可以重新打开, 请访问帮助中心。 8年前关闭。 是否可以在SQL数据库(或任何其他数据库)中存储图片,声音,视频?如果是,应该是什么格式,请详细说明必须配置的特殊设置(如果有)。提前致谢。 问题答案: 在MySQL中,您可以使用列的BINARY或VARBIN