gpt4 book ai didi

objective-c - AVFoundation 将 Swift 代码更改为 Objective-C

转载 作者:行者123 更新时间:2023-11-30 10:02:57 25 4
gpt4 key购买 nike

我找到了一个用 Swift 编写的 AVFoundation 示例代码。我尝试将代码更改为 Objective-C。但我不确定我是否正确执行了此操作,因为该代码目前无法运行。您能看一下吗?

func initialiseCaptureSession()
{
captureSession.sessionPreset = AVCaptureSessionPresetPhoto

guard let frontCamera = (AVCaptureDevice.devicesWithMediaType(AVMediaTypeVideo) as! [AVCaptureDevice])
.filter({ $0.position == .Front })
.first else
{
fatalError("Unable to access front camera")
}

do
{
let input = try AVCaptureDeviceInput(device: frontCamera)

captureSession.addInput(input)
}
catch
{
fatalError("Unable to access front camera")
}

let videoOutput = AVCaptureVideoDataOutput()

videoOutput.setSampleBufferDelegate(self, queue: dispatch_queue_create("sample buffer delegate", DISPATCH_QUEUE_SERIAL))
if captureSession.canAddOutput(videoOutput)
{
captureSession.addOutput(videoOutput)
}

captureSession.startRunning()
}

我的 Objective-C 代码:

-(void)initializeCaptureSession {

self.captureSession.sessionPreset = AVCaptureSessionPresetPhoto;

AVCaptureDevice *inputDevice = nil;

NSArray *devices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo];
AVCaptureDeviceInput *deviceInput;

for(AVCaptureDevice *camera in devices) {

if([camera position] == AVCaptureDevicePositionFront) { // is front camera
inputDevice = camera;
deviceInput = [AVCaptureDeviceInput deviceInputWithDevice:inputDevice error:nil];
[self.captureSession addInput:deviceInput];
break;
}
}
AVCaptureVideoDataOutput *videoOutput = nil;
[videoOutput setSampleBufferDelegate:self queue:dispatch_queue_create("sample buffer delegate", DISPATCH_QUEUE_SERIAL)];
if([self.captureSession canAddOutput:videoOutput]) {
[self.captureSession addOutput:videoOutput];
}
[self.captureSession startRunning];

}

问题是,就我而言

if([self.captureSession canAddOutput:videoOutput]) {
[self.captureSession addOutput:videoOutput];
}

被忽略。我不确定,但我的 self.captureSession addInput:deviceInput]; 有问题吗?

最诚挚的问候,纳扎尔

最佳答案

该行有问题

AVCaptureVideoDataOutput *videoOutput = nil;

AVCaptureVideoDataOutput 未初始化,因此 canAddOutput:videoOutput 失败。

你可以像这样初始化它;

videoOutput = [[AVCaptureVideoDataOutput alloc] init];

关于objective-c - AVFoundation 将 Swift 代码更改为 Objective-C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37466811/

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