NSURL de PHAsset
Je suis la conversion de notre application sur l'utilisation des Photos Cadre de iOS8, le ALAsset cadre est clairement un citoyen de deuxième classe sous iOS8.
Je vais avoir un problème, c'est que notre architecture veut vraiment un NSURL qui représente l'emplacement des médias sur le "disque dur". Nous nous en servons pour télécharger les médias à nos serveurs pour un traitement ultérieur.
C'était facile avec ALAsset:
ALAssetRepresentation *rep = [asset defaultRepresentation];
self.originalVideo = rep.url;
Mais je suis tout simplement pas voir cette capacité dans PHAsset. Je suppose que je peux appeler:
imageManager.requestImageDataForAsset
et puis l'écrire dans un temp place dans le système de fichiers, mais qui semble terriblement lourd et inutile, pour ne pas mentionner potentiellement lent.
Est-il un moyen pour obtenir ce ou vais-je avoir refactoriser plus de mon application à utiliser uniquement NSURLs pour iOS7 et une autre méthode pour iOS8?
- En regardant mon code un peu plus le seule raison pour laquelle j'utilise l'URL est de nourrir AVAssetExportSession et/ou AVAssetImageGenerator donc je suppose que je vais juste remplacer ces appels. Puis à nouveau, une fois que j'ai donner à ceux que j'ai encore besoin d'un NSURL à transmettre à nos uploader, donc je parie que le problème est toujours là.
- De votre commentaire ici, il semble que vous avez déjà compris vous-même, mais pour les autres à voir ici: Si vous avez besoin d'utiliser l'URL pour les anciennes méthodes (comme AVAssetExportSession), vous pouvez probablement utiliser les versions les plus récentes d'entre eux qui correspondent à un PHAsset plutôt qu'un AVAsset (AVURLAsset). Par exemple: requestExportSessionForVideo et requestPlayerItemForVideo de PHImageManager.defaultManager()
Vous devez vous connecter pour publier un commentaire.
Si vous utilisez [
imageManager
requestAVAssetForVideo
...], il va retourner unAVAsset
. Que AVAsset est en fait unAVURLAsset
, donc si vous le lancez, vous pouvez accéder c'est -url
de la propriété.Je ne suis pas sûr si vous pouvez créer un nouvel actif, mais il ne vous donner l'emplacement.
SWIFT version 2.0
Cette fonction renvoie NSURL de PHAsset (image et vidéo)
NSURLSessionUploadTask
de travail. Depuis l'iPhone de stockage est limité, je ne peux pas copier tous les atouts pour un temp emplacement pour le téléchargement. Ce serait un message d'erreur pour l'utilisateur ressembler à ceci: "Nous sommes désolés, vous ne pouvez pas télécharger vos fichiers sur notre serveur, car le stockage sur votre appareil est trop faible???" Personne ne va comprendre ceSi vous avez un PHAsset, vous pouvez obtenir la url pour dit actif comme ceci:
Utiliser le nouveau
localIdentifier
propriété de PHObject. (PHAsset hérite de celle-ci).Il offre des fonctionnalités similaires à un ALAsset URL, à savoir que vous pouvez charger de l'actif par l'appel de la méthode
Toutes les solutions ci-dessus ne fonctionne pas pour slow-motion vidéos. Une solution que j'ai trouvé gère toutes les vidéos les types d'actifs est: est-ce
Voir cette réponse ici.
Et celui-ci ici.
Dans mon expérience, vous aurez besoin de la première exportation de l'actif sur le disque afin d'obtenir pleinement accessible /fiable URL.
Les réponses liées à ci-dessus décrivent comment le faire.
Dans speking de l'url à partir de
PHAsset
, j'ai eu une fois préparé un util func sur Swift 2 (bien que seulement pour la lecture de vidéos à partir dePHAsset
). Partage dans cette réponse, pourrait aider quelqu'un.Veuillez cocher cette Réponse
Veux juste envoyer le joyau caché à partir d'un commentaire de @jlw
Voici une pratique PHAsset catégorie:
J'avais similaires problème avec les fichiers vidéo, ce qui a fonctionné pour moi a été:
Où l'actif est PHAsset.