iOS создает миниатюру для длинного видео
Привет, я хочу создать миниатюру из моего видео, длиной 2,46 минуты и 68 Мб. Я использовал этот код для создания эскиза:
AVAsset *asset = [AVAsset assetWithURL:videoURL];
AVAssetImageGenerator *imageGenerator = [[AVAssetImageGenerator alloc]initWithAsset:asset];
CMTime time = [asset duration];
time.value = 0;
CGImageRef imageRef = [imageGenerator copyCGImageAtTime:time actualTime:NULL error:NULL];
UIImage *thumbnail = [UIImage imageWithCGImage:imageRef];
CGImageRelease(imageRef);
return thumbnail;
Проблема в том, что миниатюра всегда равна нулю, но если я уменьшу продолжительность видео до 15 секунд, он создаст миниатюру. Могу ли я создать миниатюру для фильма продолжительностью более 15 секунд?
Спасибо
1 ответ
Мммм, этот способ использования AVAssetImageGenerator работает:
AVURLAsset *asset=[[AVURLAsset alloc] initWithURL:videoURL options:nil];
AVAssetImageGenerator *generator = [[AVAssetImageGenerator alloc] initWithAsset:asset];
generator.appliesPreferredTrackTransform=TRUE;
CGFloat videoLenght=((float)asset.duration.value)/((float)asset.duration.timescale);
CMTime thumbTime = CMTimeMakeWithSeconds(videoLenght,2.0);
AVAssetImageGeneratorCompletionHandler handler = ^(CMTime requestedTime, CGImageRef im, CMTime actualTime, AVAssetImageGeneratorResult result, NSError *error){
if (result != AVAssetImageGeneratorSucceeded) {
NSLog(@"couldn't generate thumbnail, error:%@", error);
}else{
UIImage *image=[self.class scaledImage:[UIImage imageWithCGImage:im]];
[self performSelectorOnMainThread:@selector(setVideoImage:) withObject:image waitUntilDone:NO];
}
};
[generator generateCGImagesAsynchronouslyForTimes:[NSArray arrayWithObject:[NSValue valueWithCMTime:thumbTime]] completionHandler:handler];
(videoLenght, 2.0) - это время, когда происходит моментальный снимок, в этом случае половина видео, я не рекомендую вам использовать фиксированное время скриншота, потому что если время выходит за пределы, изображение будет нулевым.