tag optimized moz images for example alternative image video ios7 deprecated nsnotificationcenter

optimized - thumbnailImageAtTime: ahora en desuso-¿Cuál es la alternativa?



seo images (7)

Hasta iOS7 actualización que estaba usando ...

UIImage *image = [moviePlayer thumbnailImageAtTime:1.0 timeOption:MPMovieTimeOptionNearestKeyFrame];

... con gran éxito, para que mi aplicación pudiera mostrar el video que el usuario acaba de tomar.

Entiendo que este método, a partir de iOS7 ahora se ha desaprobado y necesito una alternativa. Veo que hay un método de

- (void)requestThumbnailImagesAtTimes:(NSArray *)playbackTimes timeOption:(MPMovieTimeOption)option

sin embargo, ¿cómo devuelvo la imagen para poder ubicarla dentro de la imagen del botón videoReview?

Gracias de antemano, Jim.

**** Pregunta editada, después de intentar el método de centro de notificación ***

Use el siguiente código -

[moviePlayer requestThumbnailImagesAtTimes:times timeOption:MPMovieTimeOptionNearestKeyFrame]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(MPMoviePlayerThumbnailImageRequestDidFinishNotification::) name:MPMoviePlayerThumbnailImageRequestDidFinishNotification object:moviePlayer];

Hice los tiempos de NSArray de dos objetos NSNumber 1 y 2.

Luego traté de capturar la notificación en el siguiente método

-(void)MPMoviePlayerThumbnailImageRequestDidFinishNotification: (NSDictionary*)info{ UIImage *image = [info objectForKey:MPMoviePlayerThumbnailImageKey];

Luego procedió a usar esta imagen en miniatura como imagen del botón como una vista previa ... pero no funcionó.

Si puede ver desde mi codificación donde he fallado, su ayuda será apreciada nuevamente. Aclamaciones


Acabo de buscar una solución para este problema y obtuve una buena ayuda de su pregunta. Consiguió su código anterior para trabajar con un pequeño cambio, eliminó un punto ...

Cambio

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(MPMoviePlayerThumbnailImageRequestDidFinishNotification::) name:MPMoviePlayerThumbnailImageRequestDidFinishNotification object:moviePlayer];

a

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(MPMoviePlayerThumbnailImageRequestDidFinishNotification:) name:MPMoviePlayerThumbnailImageRequestDidFinishNotification object:moviePlayer];

Tengo esto para trabajar bien. Además, descubrí que no puedes llamar a un método para confiar en NotificationCenter si ya estás en un selector de notificaciones. Algo que intenté al principio: intenté llamar a requestThumbnailImagesAtTimes dentro del selector de notificación para MPMoviePlayerPlaybackDidFinishNotification , algo que no funcionará. Creo que porque la notificación no se activará.


El código en Swift 2.1 se vería así:

do{ let asset1 = AVURLAsset(URL: url) let generate1: AVAssetImageGenerator = AVAssetImageGenerator(asset: asset1) generate1.appliesPreferredTrackTransform = true let time: CMTime = CMTimeMake(3, 1) //TO CATCH THE THIRD SECOND OF THE VIDEO let oneRef: CGImageRef = try generate1.copyCGImageAtTime(time, actualTime: nil) let resultImage = UIImage(CGImage: oneRef) } catch let error as NSError{ print(error) }



El problema es que debe especificar valores flotantes en requestThumbnailImagesAtTimes .

Por ejemplo, esto funcionará

[self.moviePlayer requestThumbnailImagesAtTimes:@[@14.f] timeOption:MPMovieTimeOptionNearestKeyFrame];

pero esto no funcionará :

[self.moviePlayer requestThumbnailImagesAtTimes:@[@14] timeOption:MPMovieTimeOptionNearestKeyFrame];


Jeely proporciona un buen trabajo, pero requiere una biblioteca adicional que no es necesaria cuando MPMoviePlayer ya proporciona funciones para esta tarea. Noté un error de sintaxis en el código del póster original. El controlador de notificación de miniaturas espera un objeto de tipo NSNotification, no un objeto de diccionario. Aquí hay un ejemplo corregido:

-(void)MPMoviePlayerThumbnailImageRequestDidFinishNotification: (NSNotification*)note { NSDictionary * userInfo = [note userInfo]; UIImage *image = (UIImage *)[userInfo objectForKey:MPMoviePlayerThumbnailImageKey]; if(image!=NULL) [thumbView setImage:image]; }


La forma de hacerlo, al menos en iOS7 es usar flotadores para su tiempo

NSNumber *timeStamp = @1.f; [moviePlayer requestThumbnailImagesAtTimes:timeStamp timeOption:MPMovieTimeOptionNearestKeyFrame];

Espero que esto ayude


Logré encontrar una excelente manera de usar AVAssetImageGenerator, por favor vea el código a continuación ...

AVURLAsset *asset1 = [[AVURLAsset alloc] initWithURL:partOneUrl options:nil]; AVAssetImageGenerator *generate1 = [[AVAssetImageGenerator alloc] initWithAsset:asset1]; generate1.appliesPreferredTrackTransform = YES; NSError *err = NULL; CMTime time = CMTimeMake(1, 2); CGImageRef oneRef = [generate1 copyCGImageAtTime:time actualTime:NULL error:&err]; UIImage *one = [[UIImage alloc] initWithCGImage:oneRef]; [_firstImage setImage:one]; _firstImage.contentMode = UIViewContentModeScaleAspectFit;

Dentro del archivo de encabezado, por favor importe

#import <AVFoundation/AVFoundation.h>

Funciona perfecto y he podido llamarlo desde viewDidLoad, que fue más rápido que llamar al desaprobado thumbNailImageAtTime: desde viewDidAppear.

Espero que esto ayude a cualquier otra persona que tenga el mismo problema.