Código de solución que utiliza AVFoundation
framework y Swift 3.0 (código comentado no es necesario y se discute a continuación el código - que tiene que decidir si lo necesita o no):
import AVFoundation
func generateThumbnailForVideo(at url: URL) -> UIImage? {
let kPreferredTimescale: Int32 = 1000
let asset = AVURLAsset(url: url)
let generator = AVAssetImageGenerator(asset: asset)
generator.appliesPreferredTrackTransform = true
//generator.requestedTimeToleranceBefore = kCMTimeZero
//generator.requestedTimeToleranceAfter = kCMTimeZero
//generator.maximumSize = CGSize(width: 100, height: 100)
var actualTime: CMTime = CMTime(seconds: 0, preferredTimescale: kPreferredTimescale)
//generates thumbnail at first second of the video
let cgImage = try? generator.copyCGImage(at: CMTime(seconds: 1, preferredTimescale: kPreferredTimescale), actualTime: &actualTime)
return cgImage.flatMap() { return UIImage(cgImage: $0, scale: UIScreen.main.scale, orientation: .up) }
}
Tenga en cuenta que usted puede considerar la ejecución de este código en subproceso de fondo como la creación de miniaturas puede ser una operación potencialmente costosa.
También, por favor, eche un vistazo a algunas de las propiedades de AVAssetImageGenerator
clase:
requestedTimeToleranceBefore
(Apple's documentation):
La longitud máxima de tiempo antes de una hora solicitada por el cual una la imagen puede ser generada.
El valor predeterminado es kCMTimePositiveInfinity.
Establezca los valores de requestedTimeToleranceBefore y requestTimeToleranceDespués de kCMTimeZero para solicitar la generación de imágenes con precisión de cuadro; esto puede incurrir en un retraso de decodificación adicional.
requestedTimeToleranceAfter
(Apple's documentation):
La longitud máxima de tiempo después de un tiempo solicitado por el cual se puede generar una imagen.
El valor predeterminado es kCMTimePositiveInfinity.
Establezca los valores de requestedTimeToleranceBefore y requestTimeToleranceDespués de kCMTimeZero para solicitar la generación de imágenes con precisión de cuadro; esto puede incurrir en un retraso de decodificación adicional.
maximumSize
(Apple's documentation):
especifica las dimensiones máximas de la imagen generada.
El valor predeterminado es CGSizeZero, que especifica las dimensiones sin escalar del activo.
AVAssetImageGenerator escala las imágenes de forma que quepan dentro del cuadro delimitador definido. Las imágenes nunca se amplían. La relación de aspecto de la imagen escalada se define mediante la propiedad apertureMode.
posible duplicado de [Cómo tomar una captura de pantalla mediante programación] (http://stackoverflow.com/questions/2200736/how-to-take-a-screenshot-programmatically) –
realidad estaba refiriendo a la generación de una imagen en miniatura de un archivo de video en IOS y no toma una captura de pantalla de forma programática. Para tomar una captura de pantalla, uno debería reproducir el archivo, pero en mi caso no es necesario reproducir el archivo. –