Skip to content

Instantly share code, notes, and snippets.

@moralez
Created May 9, 2013 01:38
Show Gist options
  • Save moralez/5544955 to your computer and use it in GitHub Desktop.
Save moralez/5544955 to your computer and use it in GitHub Desktop.
Getting a Screenshot for a AVPlayer
- (UIImage *)screenshotFromPlayer:(AVPlayer *)player atTime:(CMTime)time {
CMTime actualTime;
NSError *error;
int attemptNumber = 0;
BOOL success = NO;
UIImage *image;
while (attemptNumber < 5 && !success) {
NSLog(@"Attempt Number: %d", attemptNumber);
NSURL *url = [NSURL fileURLWithPath:[TTFVideoViewController shareVideoPath]];
NSDictionary *options = [NSDictionary dictionaryWithObject:[NSNumber numberWithBool:YES]
forKey:AVURLAssetPreferPreciseDurationAndTimingKey];
AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:url options:options];
// AVAssetImageGenerator *generator = [AVAssetImageGenerator assetImageGeneratorWithAsset:player.currentItem.asset];
AVAssetImageGenerator *generator = [AVAssetImageGenerator assetImageGeneratorWithAsset:asset];
[generator setAppliesPreferredTrackTransform:YES];
[generator setRequestedTimeToleranceBefore:kCMTimeZero];
[generator setRequestedTimeToleranceAfter:kCMTimeZero];
CGImageRef cgIm = [generator copyCGImageAtTime:time
actualTime:&actualTime
error:&error];
image = [UIImage imageWithCGImage:cgIm];
CFRelease(cgIm);
if (nil != error) {
NSLog(@"Error making screenshot: %@", [error localizedDescription]);
return nil;
}
float actual = CMTimeGetSeconds(actualTime);
float requested = CMTimeGetSeconds(time);
NSLog(@"Actual screenshot time: %f Requested screenshot time: %f", actual, requested);
if (fabsf(actual - requested) > 0.01) {
NSLog(@"Try again!");
attemptNumber++;
} else {
success = YES;
}
}
if (!success) {
image = [self superExactScreenshoot:player atTime:time];
}
return image;
}
@anitalanet
Copy link

Hi can you please pass me the same code for swift

Thanks in advance

@davidlondono
Copy link

im gonna use this code on my project https://github.com/davidlondono/PlayerView

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment