Created
May 9, 2013 01:38
-
-
Save moralez/5544955 to your computer and use it in GitHub Desktop.
Getting a Screenshot for a AVPlayer
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
- (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; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Hi can you please pass me the same code for swift
Thanks in advance