2017-03-03 2 views
3

In iOS 10 hinzugefügt Apple offline HLS. In der Dokumentation erwähnen sie:iOS offline HLS-Dateigröße

Wichtig: Heruntergeladene HLS-Assets werden auf der Festplatte in einem privaten Bundle-Format gespeichert. Dieses Bundleformat kann sich im Laufe der Zeit ändern, und Entwickler sollten nicht direkt versuchen, auf Dateien innerhalb des Bundles zuzugreifen oder sie zu speichern. Stattdessen sollten AVFoundation und andere iOS-APIs mit heruntergeladenen Assets interagieren.

Es scheint, dass der Zugriff auf Informationen über diese Dateien begrenzt ist. Ich versuche die Größe der gespeicherten Datei zu finden. Hier ist was ich tue. Nach dem Download beendet ist, speichere ich den relativen Pfad

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

    } 

später habe ich den Dateipfad rekonstruieren, wie

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

folgt Dies funktioniert: Dieses

try FileManager.default.removeItem(at: assetURL) 

nicht und gibt einen Fehler aus, dass die Datei existiert nicht:

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

Ich kann im Video-Asset laden, wie und es folgt spielen offline mit:

let avAsset = AVURLAsset(url: assetURL) 

Aber das gibt mir ein leeres Array:

let tracks = avAsset.tracks(withMediaType: AVMediaTypeVideo) 

Wieder versuche ich nur die Datei zu erhalten Größe eines Offline-HLS-Assets. Es scheint, dass die anderen Antworten auf SO, um eine Dateigröße mit FileManager zu erhalten, nicht für diese arbeiten, noch tun die Antworten für die Größe eines geladenen AVAsset. Danke im Voraus.

Antwort

0

Versuchen Sie stattdessen:

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

Hey, jetzt aber ich tatsächlich Attribute, die Dateigröße völlig falsch zu sein scheint. Ich habe zwei Dateien heruntergeladen und beide geben 204 zurück für "let fileSize = attr [FileAttributeKey.size] as! UInt64" Erstens sollte keiner von ihnen so klein sein und sie sind beide sehr unterschiedlich groß. – NickDK

+0

Gleiches Problem hier. –

+0

Ich hatte das gleiche Problem, weshalb ich (im Allgemeinen) die Funktion aus diesem Gist nutze, um richtige Schätzungen der Dateigröße zu erhalten: https://gist.github.com/blender/a75f589e6bd86aa2121618155cbdf827 Wenn Sie das 'allocatedSizeOfDirectory (at :) verwenden 'Mit Ihrem AssetURL sollte es funktionieren. Ich habe 1435750400 Bytes, was genau das ist, was der Speicher des Telefons für dieses Asset schätzt (1.44Gb) – fruitcoder

Verwandte Themen