gpt4 book ai didi

ios - 在 iOS 上使用 AVCaptureSession 加载摄像头速度很慢 - 如何加快速度?

转载 作者:可可西里 更新时间:2023-11-01 04:10:53 24 4
gpt4 key购买 nike

现在我正在尝试允许用户在不使用 UIImagePickerController 的情况下在我的应用程序中拍照。我正在使用 AVCaptureSession 和所有相关类在我的一个 View Controller 上的全屏 View 上加载相机源作为子层。该代码有效,但不幸的是相机加载速度非常慢。通常需要 2-3 秒。这是我的代码:

session = [[AVCaptureSession alloc] init];
session.sessionPreset = AVCaptureSessionPresetMedium;

if ([session canSetSessionPreset:AVCaptureSessionPresetHigh])
//Check size based configs are supported before setting them
[session setSessionPreset:AVCaptureSessionPresetHigh];

[session setSessionPreset:AVCaptureSessionPreset1280x720];

CALayer *viewLayer = self.liveCameraFeed.layer;
//NSLog(@"viewLayer = %@", viewLayer);

AVCaptureVideoPreviewLayer *captureVideoPreviewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:session];

captureVideoPreviewLayer.frame = viewLayer.bounds;
[viewLayer addSublayer:captureVideoPreviewLayer];

AVCaptureDevice *device;

if(isFront)
{
device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
}
else
{
device = [self frontCamera];
}

AVCaptureDevice *audioDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeAudio];
AVCaptureDeviceInput * audioInput = [AVCaptureDeviceInput deviceInputWithDevice:audioDevice error:nil];
[session addInput:audioInput];

NSError *error = nil;
input = [AVCaptureDeviceInput deviceInputWithDevice:device error:&error];
if (!input) {
// Handle the error appropriately.
//NSLog(@"ERROR: trying to open camera: %@", error);
}

[session addInput:input];
[session startRunning];

stillImageOutput = [[AVCaptureStillImageOutput alloc] init];
NSDictionary *outputSettings = [[NSDictionary alloc] initWithObjectsAndKeys: AVVideoCodecJPEG, AVVideoCodecKey, nil];
[stillImageOutput setOutputSettings:outputSettings];
[session addOutput:stillImageOutput];

有什么办法可以加快速度吗?我已经尝试使用 Grand Central Dispatch 和 NSThread 在另一个线程上加载它,虽然这阻止了应用程序卡住,但它使相机的加载时间更长。感谢您的帮助。

最佳答案

在我的例子中,我需要等待 session 开始运行

dispatch_async(queue) {
self.session.startRunning()

dispatch_async(dispatch_get_main_queue()) {
self.delegate?.cameraManDidStart(self)

let layer = AVCaptureVideoPreviewLayer(session: self.session)
}
}

关于ios - 在 iOS 上使用 AVCaptureSession 加载摄像头速度很慢 - 如何加快速度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21949080/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com