-
-
Save karosLi/85dd2f783c0a5c3dfa52488cc27d7d26 to your computer and use it in GitHub Desktop.
Getting a Screenshot for a AVPlayer
This file contains hidden or 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