AVFoundation 将 Swift 代码更改为 Objective-C

AVFoundation change Swift code to Objective-C

我找到了 Swift 中编写的 AVFoundation 示例代码。我试图将代码更改为 Objective-C。但我不确定我这样做是否正确,因为代码目前不起作用。你能看一下吗?

func initialiseCaptureSession()
{
    captureSession.sessionPreset = AVCaptureSessionPresetPhoto

    guard let frontCamera = (AVCaptureDevice.devicesWithMediaType(AVMediaTypeVideo) as! [AVCaptureDevice])
        .filter({ [=12=].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];