no pude conseguir la solución de reunirse para trabajar para mí, pero me hizo pensar en la dirección correcta .
A continuación se muestra el código que terminé usando en mi proyecto. El método screenshotFromPlayer:maximumSize:
acepta una instancia de AVPlayer
para tomar una captura de pantalla y CGSize
que será el tamaño máximo de la imagen devuelta.
- (UIImage *)screenshotFromPlayer:(AVPlayer *)player maximumSize:(CGSize)maxSize {
CMTime actualTime;
NSError *error;
AVAssetImageGenerator *generator = [[AVAssetImageGenerator alloc] initWithAsset:player.currentItem.asset];
// Setting a maximum size is not necessary for this code to
// successfully get a screenshot, but it was useful for my project.
generator.maximumSize = maxSize;
CGImageRef cgIm = [generator copyCGImageAtTime:player.currentTime
actualTime:&actualTime
error:&error];
UIImage *image = [UIImage imageWithCGImage:cgIm];
CFRelease(cgIm);
if (nil != error) {
NSLog(@"Error making screenshot: %@", [error localizedDescription]);
NSLog(@"Actual screenshot time: %f Requested screenshot time: %f", CMTimeGetSeconds(actualTime),
CMTimeGetSeconds(self.recordPlayer.currentTime));
return nil;
}
return image;
}
Nótese también que se podría utilizar el método generateCGImagesAsynchronouslyForTimes:completionHandler:
en lugar de copyCGImageAtTime:actualTime:error:
(en la instancia de AVAssetImageGenerator
) para llevar a cabo la generación de la imagen de forma asincrónica.
Este ejemplo de código genera una captura de pantalla en AVPlayer
's currentTime
, pero cualquier momento podría utilizarse en su lugar.
¿Podríamos ver el código que invoca el método para crear la imagen? –