iOS 获取视频的任意一帧图像

- (void)videoToThumbImage:(NSURL *)videoUrl {

    AVURLAsset *asset=[[AVURLAsset alloc] initWithURL:videoUrl options:nil];

    __block AVAssetImageGenerator *generator = [[[AVAssetImageGenerator alloc] initWithAsset:asset] autorelease];

    [asset release];

    generator.appliesPreferredTrackTransform = YES;

    generator.apertureMode = AVAssetImageGeneratorApertureModeEncodedPixels;

    NSMutableArray *times = [[[NSMutableArray alloc] initWithCapacity:0] autorelease];

    

    for (int i=0; i<14; i++) {

        if (_allTime > 0) {

            CMTime firstThird = CMTimeMake(_allTime*60*i/14,60);//设置CMTime取第几帧

            [times addObject:[NSValue valueWithCMTime:firstThird]];

        }

    }

    

    __block int j = 0;

    AVAssetImageGeneratorCompletionHandler handler =

    ^(CMTime requestedTime, CGImageRef im, CMTime actualTime, AVAssetImageGeneratorResult result, NSError *error){

        if (result == AVAssetImageGeneratorSucceeded) {

           UIImage *thumbImg = [UIImage imageWithCGImage:im];

        }

        

        if (result == AVAssetImageGeneratorFailed) {

                       NSLog(@"Failed with error: %@", [error localizedDescription]);

        }

        

        if (result == AVAssetImageGeneratorCancelled) {

            //            NSLog(@"Canceled");

        }

        j++;

        [self performSelectorOnMainThread:@selector(updateProgressWithImage:) withObject:thumbImg waitUntilDone:YES];

    };

    generator.requestedTimeToleranceAfter = kCMTimeZero;

    generator.requestedTimeToleranceBefore = kCMTimeZero;

    generator.maximumSize = self.view.frame.size;

    [generator generateCGImagesAsynchronouslyForTimes:

     (NSArray *)times completionHandler:handler];

}


你可能感兴趣的:(iOS)