2017-03-03 85 views
3

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

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

看起来对这些文件的信息访问是有限的。我试图找到存储文件的大小。这是我做的。下载完成后,我保存的相对路径

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

    } 

后来我重建的文件路径如下

if let assetPath = workout.downloadPath { 
       let baseURL = URL(fileURLWithPath: NSHomeDirectory()) 
       let assetURL = baseURL.appendingPathComponent(assetPath) 

这工作:

try FileManager.default.removeItem(at: assetURL) 

这不,并返回一个错误的文件不存在:

let att = try FileManager.default.attributesOfItem(atPath: assetURL.absoluteString) 

我可以在视频资产如下加载和离线播放:

let avAsset = AVURLAsset(url: assetURL) 

但这返回我一个空数组:再次

let tracks = avAsset.tracks(withMediaType: AVMediaTypeVideo) 

我只是想获取文件离线HLS资产的大小。它看起来用SO获取文件大小的其他答案不适用于这些,也不能做出获取已加载AVAsset大小的答案。提前致谢。

回答

0

试试这个:

let att = try FileManager.default.attributesOfItem(atPath: assetURL.path) 
+1

嘿,我居然得到的属性然而现在,文件大小似乎完全错误的。我下载了两个文件,并且它们都返回204,因为“let fileSize = attr [FileAttributeKey.size] as!UInt64”首先它们都不应该那么小,它们都是非常不同的尺寸。 – NickDK

+0

同样的问题在这里。 –

+0

我曾经有同样的问题,这就是为什么我(一般)使用这个要点的函数来获得适当的文件大小估计:https://gist.github.com/blender/a75f589e6bd86aa2121618155cbdf827当使用'allocatedSizeOfDirectory(at :) '用你的assetURL它应该可以工作。我获得了1435750400字节,这正是手机的存储估计值(1.44Gb) – fruitcoder