我已经遍历了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实例变量,并将其用于上面的示例。您还将需要它,以便在完成后可以暂停和停止相机。