2 votes

Comment obtenir instantanément une vignette de basse qualité de la vidéo distante en utilisant AVAssetImageGenerator

Je reçois une miniature de haute/moyenne qualité de la vidéo distante grâce à AVAssetImageGenerator, mais cela prend quand même 10 à 15 secondes pour en obtenir la miniature.
Y a-t-il un moyen d'obtenir une miniature de basse qualité instantanément?
Voici le code que j'ai utilisé pour obtenir la miniature de la vidéo distante.
Ce qui est étrange, c'est que lorsque j'ai téléchargé cette vidéo, sa taille était de 1,1 Mo et la taille de la miniature créée est de 1,8 Mo.

let assetForThumbnail = AVAsset(URL: videoURL)
let durationSeconds = CMTimeGetSeconds(assetForThumbnail.duration)
let generator = AVAssetImageGenerator(asset: assetForThumbnail)
generator.appliesPreferredTrackTransform = true
let time = CMTime(seconds: durationSeconds/3.0, preferredTimescale: 600)

generator.generateCGImagesAsynchronouslyForTimes([NSValue(CMTime: time)]) { (requestedTime: CMTime, thumbnail: CGImage?, actualTime: CMTime, result: AVAssetImageGeneratorResult, error: NSError?) in
     print("error: \(error)")
     print("status: \(result)")

     if let thumbnailC = thumbnail {
          let image = UIImage(CGImage: thumbnailC)
     }

}

1voto

Vlad Points 332

Essayez de définir la propriété maximumSize de AVAssetImageGenerator comme ceci:

generator.maximumSize = CGSize(width: 320, height: 320)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X