2017-03-03 5 views
3

Dans iOS 10, Apple a ajouté HLS hors connexion. Dans la documentation, ils mentionnent:iOS hors ligne Taille de fichier HLS

Important: actifs Téléchargé HLS sont stockés sur le disque dans un format de paquet privé. Ce format de bundle peut changer au fil du temps, et les développeurs ne doivent pas essayer d'accéder ou de stocker des fichiers dans le bundle directement, mais devraient plutôt utiliser AVFoundation et d'autres API iOS pour interagir avec les actifs téléchargés.

Il semble que l'accès aux informations sur ces fichiers soit limité. J'essaie de trouver la taille du fichier stocké. Voici ce que je fais. Après téléchargement terminé, j'enregistre le chemin relatif

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

    } 

plus tard, je reconstruisent le chemin du fichier comme suit

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

Cela fonctionne:

try FileManager.default.removeItem(at: assetURL) 

Cela ne fonctionne pas et renvoie une erreur que le le fichier n'existe pas:

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

Je peux charger dans l'actif vidéo comme suit et jouez en ligne avec:

let avAsset = AVURLAsset(url: assetURL) 

Mais cela me retourne un tableau vide:

let tracks = avAsset.tracks(withMediaType: AVMediaTypeVideo) 

Encore une fois, je suis juste essayer d'obtenir le fichier taille d'un actif HLS hors ligne. Il semble que les autres réponses sur SO pour obtenir une taille de fichier en utilisant FileManager ne fonctionnent pas pour celles-ci, pas plus que les réponses pour obtenir la taille d'un AVAsset chargé. Merci d'avance.

Répondre

0

Essayez ceci:

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

Hé, si toutefois, je reçois effectivement attributs maintenant la taille du fichier semble tout à fait tort. J'ai téléchargé deux fichiers et ils retournent tous deux 204 pour "let fileSize = attr [FileAttributeKey.size] en tant que! UInt64" D'abord aucun d'entre eux ne devrait être si petit et ils sont tous deux de tailles très différentes. – NickDK

+0

Même problème ici. –

+0

J'avais l'habitude d'avoir le même problème qui est la raison pour laquelle (en général) j'utilise la fonction de cet objet pour obtenir des estimations de fichiers correctes: https://gist.github.com/blender/a75f589e6bd86aa2121618155cbdf827 En utilisant le 'assignedSizeOfDirectory (at :) 'Avec votre assetURL cela devrait fonctionner. J'ai 1435750400 octets qui est exactement ce que les estimations de stockage du téléphone pour cet actif (1,44 Go) – fruitcoder