我有一个使用MPMoviePlayerViewController播放的视频,我想每1秒捕获一次屏幕截图,因为我想对捕获的图像上的个体执行某些操作。
我使用以下代码捕获屏幕截图----
CGRect contectRect = CGRectMake(0, 0, 1024,768);
UIGraphicsBeginImageContext(CGSizeMake(1024,768));
[_player.moviePlayer.view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
NSLog(@"view size %f %f",viewImage.size.width,viewImage.size.height);
UIGraphicsGetImageFromCurrentImageContext();
CGImageRef imageRef1 = CGImageCreateWithImageInRect([viewImage CGImage], contectRect);
UIImage *image = [UIImage imageWithCGImage:imageRef1 scale:1.0orientation:viewImage.imageOrientation];
但在此我总是得到一个黑色的图像。
我知道还有另一种从视频中获取图像的方式,即跟随但我不想使用这些图像,因为这些图像不符合我的要求。
AVAsset *asset = [AVAsset assetWithURL:[NSURL URLWithString:path]];
AVAssetImageGenerator *imageGenerator = [[AVAssetImageGenerator alloc]initWithAsset:asset];
CMTime time = CMTimeMake(1, 1);
UIImage *thumbnail = [UIImage imageWithCGImage:[imageGenerator copyCGImageAtTime:time actualTime:NULL error:NULL]];
[UIImagePNGRepresentation(thumbnail) writeToFile:imgName atomically:YES];
答案 0 :(得分:0)
您可以尝试捕捉视频的缩略图。并尝试设置。
答案 1 :(得分:0)
查看here。
-(void)generateImage
{
AVURLAsset *asset=[[AVURLAsset alloc] initWithURL:self.url options:nil];
AVAssetImageGenerator *generator = [[AVAssetImageGenerator alloc] initWithAsset:asset];
generator.appliesPreferredTrackTransform=TRUE;
[asset release];
CMTime thumbTime = CMTimeMakeWithSeconds(0,30);
AVAssetImageGeneratorCompletionHandler handler = ^(CMTime requestedTime, CGImageRef im, CMTime actualTime, AVAssetImageGeneratorResult result, NSError *error){
if (result != AVAssetImageGeneratorSucceeded) {
NSLog(@"couldn't generate thumbnail, error:%@", error);
}
[button setImage:[UIImage imageWithCGImage:im] forState:UIControlStateNormal];
thumbImg=[[UIImage imageWithCGImage:im] retain];
[generator release];
};
CGSize maxSize = CGSizeMake(320, 180);
generator.maximumSize = maxSize;
[generator generateCGImagesAsynchronouslyForTimes:[NSArray arrayWithObject:[NSValue valueWithCMTime:thumbTime]] completionHandler:handler];
}
答案 2 :(得分:0)
您可以选择从MPMoviePlayer异步请求缩略图:
requestThumbnailImagesAtTimes:timeOption:
但这是一项非常昂贵的操作,你很有可能发现它太慢而无法在“实时”中做很多事情
根据您的最终目标,您可能会发现一些更强大的工具in the GPUImage Library,特别是因为单个帧缓冲区很容易作为CGImageRef对象暴露给您,您可以定期对其进行采样。
答案 3 :(得分:0)
使用NSTimer
并执行相应的操作: -
NSTimer *tm1= [NSTimer scheduledTimerWithTimeInterval:1.0 //here it is 1 seconds
target:self
selector:@selector(yourMethod:)
userInfo:nil
repeats:NO];
-(void)yourMethod:(NSTimer*)timer
{
//your code
}