我已经浏览了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];
它有效,但不是视频我得到一个静止图像。我已经查看了它并查看了示例,但无法确定它为何无法正常工作。任何帮助将不胜感激。
谢谢!
答案 0 :(得分:6)
您需要在某处继续使用GPUImageVideoCamera。如果将上述内容放在方法中,并为项目启用ARC,则GPUImageVideoCamera实例将在该方法退出时立即释放。这将终止视频捕获并可能导致其他令人不安的伪像。
在您的类中创建一个GPUImageVideoCamera实例变量,并将其用于上述内容。您也需要这样做,这样您就可以在完成后暂停和停止相机。