我已经遍历了obj-c GPUImage框架,并且按照文档中的示例,我添加了以下代码段,目的是显示经过过滤的实时视频:

    CGRect mainScreenFrame = [[UIScreen mainScreen] applicationFrame];
    GPUImageVideoCamera *videoCamera = [[GPUImageVideoCamera alloc] initWithSessionPreset:AVCaptureSessionPreset640x480 cameraPosition:AVCaptureDevicePositionBack];
    videoCamera.outputImageOrientation = UIInterfaceOrientationPortrait;

    GPUImageFilter *customFilter = [[GPUImageFilter alloc] initWithFragmentShaderFromFile:@"PositionColor"];
    GPUImageView *filteredVideoView = [[GPUImageView alloc] initWithFrame:mainScreenFrame];

    // Add the view somewhere so it's visible
    [self.view addSubview:filteredVideoView];
    [videoCamera addTarget:customFilter];
    [customFilter addTarget:filteredVideoView];

    [videoCamera startCameraCapture];


它可以工作,但是我得到的不是静止图像而是视频。我已经对其进行了审查并查看了示例,但无法确切指出为什么它无法正常工作。任何帮助将非常感激。

谢谢!

最佳答案

您需要将GPUImageVideoCamera挂在某个地方。如果将以上内容放置在方法中,并且为项目启用了ARC,则在方法退出的那一刻将重新分配GPUImageVideoCamera实例。这将终止视频捕获,并可能导致其他令人不安的伪像。

而是在您的类中创建一个GPUImageVideoCamera实例变量,并将其用于上面的示例。您还将需要它,以便在完成后可以暂停和停止相机。

10-08 07:27