2016-05-26 5 views
0

Swiftで書かれたAVFoundationのサンプルコードが見つかりました。コードをObjective-Cに変更しようとしました。しかし、コードが現時点では機能していないため、これを正しく実行したかどうかはわかりません。あなたはそれを見ていただけますか?AVFoundationの変更Swiftコードから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];

敬具、 ナザール

答えて

1

この回線に問題

AVCaptureVideoDataOutput *videoOutput = nil; 

AVCaptureVideoDataOutputが初期化、ひいてはcanAddOutput:videoOutputが失敗していないがあります。

このように初期化できます。

videoOutput = [[AVCaptureVideoDataOutput alloc] init]; 
+0

ありがとう。これはうまくいった!私は** AVCaptureDevice = inputDevice = nil; ** AVCaptureDevice * inputDevice = [[AVCaptureDevice alloc] init]で** AVCaptureDeviceを初期化しようとしました。 **しかし例外が発生しました。これも初期化する必要がありますか? –

関連する問題