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 大小的答案。提前致谢。
试试这个:
let att = try FileManager.default.attributesOfItem(atPath: assetURL.path)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
986 次 |
| 最近记录: |