मैं मिलिए के समाधान मेरे लिए काम नहीं कर सकता है, लेकिन यह मुझे सही दिशा में सोच मिला ।
नीचे कोड है जो मैंने अपनी परियोजना में उपयोग किया है। विधि screenshotFromPlayer:maximumSize:
AVPlayer
का एक उदाहरण स्वीकार करता है जिसमें से स्क्रीनशॉट लेने के लिए, और CGSize
जो लौटाई गई छवि का अधिकतम आकार होगा।
- (UIImage *)screenshotFromPlayer:(AVPlayer *)player maximumSize:(CGSize)maxSize {
CMTime actualTime;
NSError *error;
AVAssetImageGenerator *generator = [[AVAssetImageGenerator alloc] initWithAsset:player.currentItem.asset];
// Setting a maximum size is not necessary for this code to
// successfully get a screenshot, but it was useful for my project.
generator.maximumSize = maxSize;
CGImageRef cgIm = [generator copyCGImageAtTime:player.currentTime
actualTime:&actualTime
error:&error];
UIImage *image = [UIImage imageWithCGImage:cgIm];
CFRelease(cgIm);
if (nil != error) {
NSLog(@"Error making screenshot: %@", [error localizedDescription]);
NSLog(@"Actual screenshot time: %f Requested screenshot time: %f", CMTimeGetSeconds(actualTime),
CMTimeGetSeconds(self.recordPlayer.currentTime));
return nil;
}
return image;
}
भी ध्यान रखें कि एक अतुल्यकालिक रूप से छवि पीढ़ी प्रदर्शन करने के लिए (AVAssetImageGenerator
के कहने पर) विधि generateCGImagesAsynchronouslyForTimes:completionHandler:
बजाय copyCGImageAtTime:actualTime:error:
इस्तेमाल कर सकते हैं।
यह कोड नमूना AVPlayer
के currentTime
पर एक स्क्रीनशॉट उत्पन्न करता है, लेकिन इसके बजाय किसी भी समय इसका उपयोग किया जा सकता है।
स्रोत
2012-09-13 21:40:22
क्या हम उस कोड को देख सकते हैं जो छवि बनाने के लिए विधि को आमंत्रित करता है? –