AVURLAsset obtenir la taille de la vidéo
C'est assez frustrant. Je vais essayer d'obtenir la taille d'un AVURLasset, mais essayez d'éviter de naturalSize
depuis Xcode me dit, c'est obsolète dans iOS5.
Mais: Quel est le remplacement?
Je ne trouve pas la moindre idée sur la façon d'obtenir la vidéo-dimensions sans l'aide de «naturalsize»...
Vous devez vous connecter pour publier un commentaire.
Je viens de vérifier la documentation en ligne, et le
naturalSize
méthode est déconseillée pour les AVAsset objet. Cependant, il devrait toujours être un AVAssetTrack qui se réfère à la AVAsset, et la AVAssetTrack a unnaturalSize
méthode que vous pouvez appeler.Via: AVAssetTrack de Référence pour iOS
nautralSize
est obsolète dans iOS 5naturalSize
dans les documentations.AVURLAsset.naturalSize
est obsolète, mais[[[videoAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0] naturalSize]
n'est pasAVAssetTrack
approche, ce qui n'est pas obsolète et qui est ce que Dave précise dans son deuxième ligne de code ci-dessous... Il semble que je n'avais pas d'ajouter la ligne de code à ma réponse.Résolution Swift 3:
Pour Swift 4:
Solutions sans
preferredTransform
ne renvoient pas de valeurs correctes pour certaines vidéos sur les derniers appareils!La dépréciation d'avertissement sur la documentation officielle l'indique, "l'Utilisation de la
naturalSize
etpreferredTransform
, selon le cas, de l'actif pistes vidéo à la place (voir aussitracksWithMediaType:
)."J'ai changé mon code à partir de:
à
C'est moins joli et moins sûr maintenant, mais ne cassera pas quand ils abandonnent cette méthode.
La désapprobation d'avertissement dit:
Nous avons besoin d'un AVAssetTrack, et nous voulons que ses naturalSize et preferredTransform. Cela peut être accédé par le suivant:
actif est évidemment votre AVAsset.
fabsf()
.C'est assez simple extension pour
AVAsset
dans Swift 4 pour obtenir la taille de la vidéo, si disponible:Pour en déduire la dimension d'un
AVAsset
, vous devez calculer l'union de tout le visuel de la piste rects (après l'application de leur correspondant privilégié pour la transformation):Méthodes qui s'appuient sur
CGSizeApplyAffineTransform
échouer si votre actif contient des pistes non triviale transformation affine (par exemple, 45 degrés en rotation) ou si votre actif contient des morceaux d'origines différentes (par exemple, deux pistes de jouer côte à côte avec la deuxième piste de l'origine augmentée par la largeur de la première piste).Voir:
MediaPlayerPrivateAVFoundationCF::sizeChanged()
à https://opensource.apple.com/source/WebCore/WebCore-7536.30.2/platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp