- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用新的 AVFoundation 框架
使用 iPhone 拍摄静态照片。
按下按钮即可调用此方法。我可以听到快门声,但看不到日志输出。如果我多次调用此方法,相机预览将卡住。
有没有关于如何使用captureStillImageAsynchronouslyFromConnection
的教程?
[[self stillImageOutput] captureStillImageAsynchronouslyFromConnection:
[[self stillImageOutput].connections objectAtIndex:0]
completionHandler:^(CMSampleBufferRef imageDataSampleBuffer,
NSError *error) {
NSLog(@"inside");
}];
- (void)initCapture { AVCaptureDeviceInput *captureInput = [AVCaptureDeviceInput deviceInputWithDevice:[AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo] error:nil]; AVCaptureVideoDataOutput *captureOutput = [[AVCaptureVideoDataOutput alloc] init]; captureOutput.alwaysDiscardsLateVideoFrames = YES; dispatch_queue_t queue; queue = dispatch_queue_create("cameraQueue", NULL); [captureOutput setSampleBufferDelegate:self queue:queue]; dispatch_release(queue); NSString* key = (NSString*)kCVPixelBufferPixelFormatTypeKey; NSNumber* value = [NSNumber numberWithUnsignedInt:kCVPixelFormatType_32BGRA]; NSDictionary* videoSettings = [NSDictionary dictionaryWithObject:value forKey:key]; [captureOutput setVideoSettings:videoSettings]; self.captureSession = [[AVCaptureSession alloc] init]; self.captureSession.sessionPreset = AVCaptureSessionPresetLow; [self.captureSession addInput:captureInput]; [self.captureSession addOutput:captureOutput]; self.prevLayer = [AVCaptureVideoPreviewLayer layerWithSession: self.captureSession]; [self.prevLayer setOrientation:AVCaptureVideoOrientationLandscapeLeft]; self.prevLayer.frame = CGRectMake(0.0, 0.0, 480.0, 320.0); self.prevLayer.videoGravity = AVLayerVideoGravityResizeAspectFill; [self.view.layer addSublayer: self.prevLayer]; // Setup the default file outputs AVCaptureStillImageOutput *_stillImageOutput = [[[AVCaptureStillImageOutput alloc] init] autorelease]; NSDictionary *outputSettings = [[NSDictionary alloc] initWithObjectsAndKeys: AVVideoCodecJPEG, AVVideoCodecKey, nil]; [_stillImageOutput setOutputSettings:outputSettings]; [outputSettings release]; [self setStillImageOutput:_stillImageOutput]; if ([self.captureSession canAddOutput:stillImageOutput]) { [self.captureSession addOutput:stillImageOutput]; } [self.captureSession commitConfiguration]; [self.captureSession startRunning];}
最佳答案
经过多次尝试和错误,我找到了如何做到这一点。
提示:Apple 的官方文档完全是错误的。他们给你的代码实际上不起作用。
我在这里写了它并附有分步说明:
链接上有很多代码,但总结一下:
-(void) viewDidAppear:(BOOL)animated
{
AVCaptureSession *session = [[AVCaptureSession alloc] init];
session.sessionPreset = AVCaptureSessionPresetMedium;
CALayer *viewLayer = self.vImagePreview.layer;
NSLog(@"viewLayer = %@", viewLayer);
AVCaptureVideoPreviewLayer *captureVideoPreviewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:session];
captureVideoPreviewLayer.frame = self.vImagePreview.bounds;
[self.vImagePreview.layer addSublayer:captureVideoPreviewLayer];
AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
NSError *error = nil;
AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device error:&error];
if (!input) {
// Handle the error appropriately.
NSLog(@"ERROR: trying to open camera: %@", error);
}
[session addInput:input];
stillImageOutput = [[AVCaptureStillImageOutput alloc] init];
NSDictionary *outputSettings = [[NSDictionary alloc] initWithObjectsAndKeys: AVVideoCodecJPEG, AVVideoCodecKey, nil];
[stillImageOutput setOutputSettings:outputSettings];
[session addOutput:stillImageOutput];
[session startRunning];
}
-(IBAction) captureNow
{
AVCaptureConnection *videoConnection = nil;
for (AVCaptureConnection *connection in stillImageOutput.connections)
{
for (AVCaptureInputPort *port in [connection inputPorts])
{
if ([[port mediaType] isEqual:AVMediaTypeVideo] )
{
videoConnection = connection;
break;
}
}
if (videoConnection) { break; }
}
NSLog(@"about to request a capture from: %@", stillImageOutput);
[stillImageOutput captureStillImageAsynchronouslyFromConnection:videoConnection completionHandler: ^(CMSampleBufferRef imageSampleBuffer, NSError *error)
{
CFDictionaryRef exifAttachments = CMGetAttachment( imageSampleBuffer, kCGImagePropertyExifDictionary, NULL);
if (exifAttachments)
{
// Do something with the attachments.
NSLog(@"attachements: %@", exifAttachments);
}
else
NSLog(@"no attachments");
NSData *imageData = [AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:imageSampleBuffer];
UIImage *image = [[UIImage alloc] initWithData:imageData];
self.vImage.image = image;
}];
}
关于iPhone SDK 4 AVFoundation - 如何正确使用 captureStillImageAsynchronouslyFromConnection?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3847140/
根据类引用,captureStillImageAsynchronouslyFromConnection 的完成处理程序接受一个 NSError 对象,但它不是可选的。 函数声明: func captu
目前,captureStillImageAsynchronouslyFromConnection 从 AVCaptureSessionPreset640x480 的 AVCaptureSession
有什么办法可以提高 captureStillImageAsynchronouslyFromConnection 的速度吗? ? 我试着只关注输出的帧,像这样:captureOutput:didOutp
我创建了一个应用程序,它使用 AVFoundation captureStillImageAsynchronouslyFromConnection 每 0.2 秒拍摄一张照片并分析照片。然而,直到我已
let VideoDevice = CameraWithPosition(AVCaptureDevicePosition.Back) // not working let VideoDevice =
我正在尝试在 iOS 上拍照。 我坚持使用 captureStillImageAsynchronouslyFromConnection 方法拍摄图像。 我实现了该方法并且它有效,但我的问题是它会立即拍
我正在尝试在实时预览期间从相机捕捉图像,来自 AVFoundation captureStillImageAsynchronouslyFromConnection .到目前为止,该程序按预期工作。但是
我正在编写一个 iPhone 应用程序,它使用 AVFoundation 来处理相机内容,并且我正在尝试将 UIImage 从相机保存到相机胶卷中。 目前它是这样做的...... [imageCapt
如何设置完成处理程序: captureStillImageAsynchronouslyFromConnection:completionHandler: 用于 AVCaptureStillImageO
当我使用 captureStillImageAsynchronouslyFromConnection 捕捉静态图像时AVCaptureStillImageOutput的方法|与 AVCaptureSe
我的自定义摄像头无法正常工作。有时它会拍照,有时它会无声地崩溃。我的应用程序由 3 个选项卡和一个选项卡栏 Controller 组成。当我从主页选项卡访问相机时,我可以正常拍照。当我从配置文件选项卡
我试图从相机中获得尽可能好的图像,但只能找到 captureStillImageAsynchronouslyFromConnection 的示例,然后直接转到: NSData *imageData =
我尝试构建一个从 iPhone 相机捕获帧并对这些帧进行一些处理的应用程序。我尝试了一些在互联网上找到的代码,例如这里:How to capture image without displaying
我正在尝试使用新的 AVFoundation 框架 使用 iPhone 拍摄静态照片。 按下按钮即可调用此方法。我可以听到快门声,但看不到日志输出。如果我多次调用此方法,相机预览将卡住。 有没有关于如
我正在尝试在循环中使用 captureStillImageAsynchronouslyFromConnection 捕获连续(多镜头)高分辨率图像,但它偶尔会暂停以重新聚焦。我锁定了对焦模式(如其他
在我的应用程序中,我显示了一个 AVCaptureVideoPreviewLayer,然后当用户使用 AVCaptureOutput 中的 captureStillImageAsynchronousl
AVCapturePhotoOutput 是已弃用的 AVCaptureStillImageOutput 库,它允许从 iOS 10 中的视频连接中异步捕获静止图像。 最佳答案 这不是 AVCaptu
我下载了 AVCam从苹果网站演示,并尝试添加一个简单的开始屏幕(我添加了一个 StartViewController。{h,m,nib}),带有一个按钮,然后将启动 AVCam 演示。按钮的代码如下
我看到不可能消除 avcapturesession captureStillImageAsynchronouslyFromConnection 附带的快门声音,但我没有看到有人试图移除它附带的那种屏幕
我有一个 Cocoa 应用程序,旨在从 USB 显微镜捕获静态图像,然后在将它们保存到图像文件之前对其进行一些后处理。目前,我试图从传递给我的 completionHandler block 的 CM
我是一名优秀的程序员,十分优秀!