2017-07-07 4 views
0

Extraire toutes les images image par image en vidéo pendant que la vidéo est lue dans AVPlayer. Par exemple, si la vidéo est à 30 images par seconde et la durée de la vidéo est de 10 secondes, je devrais être en mesure d'obtenir 300 images de la vidéo.Vous souhaitez extraire toutes les images image par image en vidéo pendant que la vidéo est lue dans AVPlayer

Actuellement, je suis EXTRACTION images en utilisant ce code:

[self.player addPeriodicTimeObserverForInterval: CMTimeMake (1, fps) file d'attente: dispatch_get_main_queue() usingBlock:

^(CMTime time) { 
    [weakSelf readNextMovieFrame]; 
}]; 
(void) readNextMovieFrame { 

CMTime outputItemTime = [[self playerItem] currentTime]; 

CMTime t = [[self playerItem] currentTime]; 
CMTime d = [[self playerItem] duration]; 

if ([_output hasNewPixelBufferForItemTime:outputItemTime]) { 
    CVPixelBufferRef buffer = [_output copyPixelBufferForItemTime:outputItemTime itemTimeForDisplay:nil]; 

    CIImage *image = [CIImage imageWithCVPixelBuffer:buffer]; 

    UIImage *imageUI = [self makeUIImageFromCIImage:image]; 

    [self saveImage]; 

    //CFRelease(sampleBuffer); 
    CVBufferRelease(buffer); 

} 

}

Répondre

0

J'utilise ce qui suit pour extraire une image d'une vidéo sur iOS.

- (UIImage *)getVideoImageAtTime:(CMTime)time player:(AVPlayer *)player { 
    NSError *error = nil; 
    AVAsset *asset = player.currentItem.asset; 
    AVAssetImageGenerator *ig = [[AVAssetImageGenerator alloc] initWithAsset:asset]; 
    CGImageRef image = [ig copyCGImageAtTime:time actualTime:nil error:&error]; 
    UIImage *screenShot = [UIImage imageWithCGImage:image]; 
    CGImageRelease(image); 
    return error ? screenShot : nil; 
}