我正在编写一个应用程序来显示 iphone 相机看到的光照条件的统计信息。我每秒拍摄一张图像,并对其进行计算。
要捕获图像,我使用以下方法:
-(void) captureNow
{
AVCaptureConnection *videoConnection = nil;
for (AVCaptureConnection *connection in captureManager.stillImageOutput.connections)
{
for (AVCaptureInputPort *port in [connection inputPorts])
{
if ([[port mediaType] isEqual:AVMediaTypeVideo] )
{
videoConnection = connection;
break;
}
}
if (videoConnection) { break; }
}
[captureManager.stillImageOutput captureStillImageAsynchronouslyFromConnection:videoConnection completionHandler: ^(CMSampleBufferRef imageSampleBuffer, NSError *error)
{
NSData *imageData = [AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:imageSampleBuffer];
latestImage = [[UIImage alloc] initWithData:imageData];
}];
}
但是,该captureStillImageAsynhronously....
方法会导致手机播放“快门”声音,这对我的应用程序没有好处,因为它会不断地捕捉图像。
我已经读到无法禁用此音效。相反,我想从手机的视频输入中捕获帧:
AVCaptureDeviceInput *newVideoInput = [[AVCaptureDeviceInput alloc] initWithDevice:[self backFacingCamera] error:nil];
并希望将这些变成UIImage
对象。
我将如何实现这一目标?我不太了解 AVFoundation 的工作原理——我下载了一些示例代码并为我的目的对其进行了修改。