iOS离线HLS文件大小

在iOS 10中,Apple添加了离线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) 

我可以按如下方式加载video资源并通过以下方式离线播放:

 let avAsset = AVURLAsset(url: assetURL) 

但这会给我一个空数组:

 let tracks = avAsset.tracks(withMediaType: AVMediaTypeVideo) 

我再次尝试获取离线HLS资产的文件大小。 看来,使用FileManager获取文件大小的SO上的其他答案对这些不起作用,也没有为获取加载的AVAsset的大小做出答案。 提前致谢。

试试这个:

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

唯一的方法是将存储下载内容的文件夹中的所有文件大小相加。

 - (NSUInteger)hlsFileSize:(NSURL *)fileURL { NSUInteger size = 0; let enumerator = [NSFileManager.defaultManager enumeratorAtURL:fileURL includingPropertiesForKeys:nil options:0 errorHandler:nil]; for (NSURL *url in enumerator) { NSError *error = nil; // Get values let resourceValues = [url resourceValuesForKeys:@[NSURLIsRegularFileKey, NSURLFileAllocatedSizeKey, NSURLNameKey] error:&error]; // Skip unregular files let isRegularFile = [resourceValues[NSURLIsRegularFileKey] boolValue]; if (!isRegularFile) { continue; } let fileAllocatedSize = [resourceValues[NSURLFileAllocatedSizeKey] unsignedLongLongValue]; size += fileAllocatedSize; } return size; }