如何通过iPhone中的MPMediaPlayerController播放视频截图?

时间:2012-05-14 12:04:00

标签: iphone objective-c image mpmovieplayercontroller image-capture

有人可以帮助我吗?我想从通过MPMediaPlayerController播放的视频中获取屏幕截图。到目前为止我所尝试的是: -

-(void)viewDidLoad
{
NSURL *tempFilePathURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"LMFao" ofType:@"mp4"]];
player = [[MPMoviePlayerController alloc] initWithContentURL:tempFilePathURL];
[player setControlStyle:MPMovieControlStyleFullscreen];
//Place it in subview, else it won’t work
player.view.frame = CGRectMake(0, 0, 320, 400);
[self.view addSubview:player.view];
}

-(IBAction)screenshot
{
CGRect rect = [player.view bounds];
UIGraphicsBeginImageContext(rect.size);
CGContextRef context = UIGraphicsGetCurrentContext();
[player.view.layer renderInContext:context];   
image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

imgView = [[UIImageView alloc] initWithFrame:CGRectMake(150, 150, 100, 100)];
[imgView setImage:image];
imgView.layer.borderWidth = 2.0;
[self.view addSubview:imgView];
}

我现在得到的是: -

ScreenShot

现在发生的事情是我的播放器按钮在ScreenShot中被捕获但是我的视频图像没有得到。我正在使用这种上下文方法捕获我的图像,因为 我在我的视频上有一个叠加层,使用缩略图方法我无法使用叠加层捕捉视频,但我希望获得带叠加层的视频图像。

修改 我想要的是获取此视频和绘图叠加的截图,如此图所示 Overlay on Video

但是我得到的是一种方法我只得到视频没有叠加在我的截图中,方法是缩略图方法,我正在进行缩略图,由MPMoviePlayerController和第二种方法给出只有覆盖不是视频在ma中截图,那个方法是上下文方法。我得到rect的上下文。现在我认为解决方案可能是ki结合这两个图像。所以通过给出建议帮助我合并图像对我有用吗?

请帮忙。谢谢:)

3 个答案:

答案 0 :(得分:2)

您只需要在mpmovieplayer对象上调用单个方法:

- (UIImage *)thumbnailImageAtTime:(NSTimeInterval)playbackTime timeOption:(MPMovieTimeOption)option

此方法将返回UIImage对象。你要做的只是:

UIImage *thumbnail = [player thumbnailImageAtTime:1.0 timeOption:MPMovieTimeOptionNearestKeyFrame];

有关详细信息,请查看MPMoviePlayerController

希望这有帮助

编辑:在您的方法中,您可以先隐藏播放器的控件,然后再次显示控件后再捕获图像。你可以使用MPMoviePlayerController的controlStyle属性来实现这个目的。

不确定这是你在找什么,但这是我所理解的。如果您正在寻找不同的,请告诉我。

答案 1 :(得分:1)

U可以通过这种方式合并两个图像。请看下​​面的代码..

- (UIImage*) maskImage:(UIImage *)image withMask:(UIImage *)maskImage {
    MaskView=[[UIView alloc] init];
    UIImageView *image1=[[UIImageView alloc]init];
    UIImageView *image2=[[UIImageView alloc]init];
    MaskView.frame=CGRectMake(0, 0,500,500);    
    image1.frame=CGRectMake(0,0,160, 160);  
    image2.frame=CGRectMake(60,54,40,40);
    image1.image=image;
    image2.image=maskImage;
    [MaskView addSubview:image1];
    [MaskView addSubview:image2];   

    UIGraphicsBeginImageContext(CGSizeMake(160,160));

    [MaskView.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *finishedPic = UIGraphicsGetImageFromCurrentImageContext(); 

    return finishedPic;
}

答案 2 :(得分:0)

这可能会有所帮助

  - (UIImage *)thumbnailImageAtTime:(NSTimeInterval)playbackTime timeOption:(MPMovieTimeOption)option

在给定时间获取thumbnailImage并缩放该图像。