iOS 离线 HLS 文件大小

Nic*_*kDK 5 avfoundation http-live-streaming ios avasset swift

在 iOS 10 中,Apple 添加了离线 HLS。在文档中,他们提到:

重要提示:下载的 HLS 资产以私有包格式存储在磁盘上。此捆绑包格式可能会随着时间的推移而改变,开发人员不应尝试直接访问或存储捆绑包中的文件,而应使用 AVFoundation 和其他 iOS API 与下载的资产进行交互。

似乎对有关这些文件的信息的访问受到限制。我正在尝试查找存储文件的大小。这就是我所做的。下载完成后,我保存相对路径

func urlSession(_ session: URLSession, assetDownloadTask: AVAssetDownloadTask, didFinishDownloadingTo location: URL) {
        //Save path
        video?.downloadPath = location.relativePath

    }
Run Code Online (Sandbox Code Playgroud)

后来我重建文件路径如下

if let assetPath = workout.downloadPath {
                let baseURL = URL(fileURLWithPath: NSHomeDirectory())
                let assetURL = baseURL.appendingPathComponent(assetPath)
Run Code Online (Sandbox Code Playgroud)

这有效:

try FileManager.default.removeItem(at: assetURL)
Run Code Online (Sandbox Code Playgroud)

这不会并返回文件不存在的错误:

let att = try FileManager.default.attributesOfItem(atPath: assetURL.absoluteString)
Run Code Online (Sandbox Code Playgroud)

我可以按如下方式加载视频资产并使用以下命令离线播放:

let avAsset = AVURLAsset(url: assetURL)
Run Code Online (Sandbox Code Playgroud)

但这会返回一个空数组:

let tracks = avAsset.tracks(withMediaType: AVMediaTypeVideo)
Run Code Online (Sandbox Code Playgroud)

再一次,我只是想获取离线 HLS 资产的文件大小。看来 SO 上使用 FileManager 获取文件大小的其他答案不适用于这些,也不适用于获取加载的 AVAsset 大小的答案。提前致谢。

And*_*rew 0

试试这个:

let att = try FileManager.default.attributesOfItem(atPath: assetURL.path)
Run Code Online (Sandbox Code Playgroud)