2016-09-08 13 views
16

私は現時点で積極的に研究していますが、iPhone 7 Plusにはデュアルカメラシステムが搭載されているため、AVFoundationで特定のカメラのビデオフレームを同時に処理できますか?iPhone 7 Plus - AVFoundationデュアルカメラ

AVCaptureDevice個のインスタンスからの出力を特定の位置に同時に処理できると思っています。

答えて

7

アップデートされたAVFoundationドキュメントには、builtInWideAngleCamerabuiltInTelephotoCameraの新しいデバイスタイプがあります。したがって、複数のキャプチャセッションを作成し、両方のセッションから同時にフィードバックを得ることが可能でなければなりません。

+1

これは、両方のカメラから別々に画像を取得できることを意味しますか? 実際には、これは私のアプリの1つの要件ですので、誰でも私の質問に答えることができれば大きな助けになります。 ありがとうございます。 –

+0

私は、両方のカメラから同時にビデオデータ出力をストリーミングすることはできません。複数のキャプチャセッションを作成する場合、2番目のセッションで '-startRunning'を呼び出すと、最初のセッションを停止します。 –

12

1つのカメラは、その時点でAVCaptureSessionにのみ追加できます。たとえば、前面と背面のカメラを切り替えることはできますが、同時に両方を使用することはできません。 7 Plusの2台のバックカメラと同じですが、いずれかを選択する必要があります。ただし、ズームしたときに両方のカメラの画像をマージする「デュオカメラ」も呼び出すことができるため、小さな違いがあります。しかし、これは静止画でのみ利用可能で、1枚の画像/キャプチャバッファを取得できます。ビデオの場合は、いずれかのカメラを選択する必要があります。

カメラを選択するには、新しいAVCaptureDeviceDiscoverySessionを使用します。あなたがこれを行う、またはあなただけでもあなたの場合はワイドカメラを使用する古いコードを維持していない場合は、個別に

@property (nonatomic) AVCaptureDevice *backCamera; 
@property (nonatomic) AVCaptureDeviceInput *backCameraInput; 
@property (nonatomic) AVCaptureDevice *teleCamera; 
@property (nonatomic) AVCaptureDeviceInput *teleCameraInput; 


if([AVCaptureDeviceDiscoverySession class]){ 
    NSArray *allTypes = @[AVCaptureDeviceTypeBuiltInDuoCamera, AVCaptureDeviceTypeBuiltInWideAngleCamera, AVCaptureDeviceTypeBuiltInTelephotoCamera ]; 
    AVCaptureDeviceDiscoverySession *discoverySession = [AVCaptureDeviceDiscoverySession discoverySessionWithDeviceTypes:allTypes mediaType:AVMediaTypeVideo position:AVCaptureDevicePositionBack]; 

    for(AVCaptureDevice *device in discoverySession.devices) { 
     if(device.deviceType==AVCaptureDeviceTypeBuiltInWideAngleCamera){ 
      self.backCamera = device; 
      self.backCameraInput = [AVCaptureDeviceInput deviceInputWithDevice:self.backCamera error:&error]; 
     } 

     if(device.deviceType==AVCaptureDeviceTypeBuiltInTelephotoCamera){ 
      self.teleCamera = device; 
      self.teleCameraInput = [AVCaptureDeviceInput deviceInputWithDevice:self.teleCamera error:&error]; 
     } 
    } 
} 

if(!self.backCamera){ 
    self.backCamera = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; 
    self.backCameraInput = [AVCaptureDeviceInput deviceInputWithDevice:self.backCamera error:&error]; 
} 

ワイドとテレのカメラを使用するには

@property (nonatomic) AVCaptureDevice *backCamera; 
@property (nonatomic) AVCaptureDeviceInput *backCameraInput; 


if([AVCaptureDeviceDiscoverySession class]){ 
    NSArray *allTypes = @[AVCaptureDeviceTypeBuiltInDuoCamera, AVCaptureDeviceTypeBuiltInWideAngleCamera, AVCaptureDeviceTypeBuiltInTelephotoCamera ]; 
    AVCaptureDeviceDiscoverySession *discoverySession = [AVCaptureDeviceDiscoverySession discoverySessionWithDeviceTypes:allTypes mediaType:AVMediaTypeVideo position:AVCaptureDevicePositionBack]; 

    for(AVCaptureDevice *device in discoverySession.devices) { 
     if(device.deviceType== AVCaptureDeviceTypeBuiltInDuoCamera){ 
      self.backCamera = device; 
      self.backCameraInput = [AVCaptureDeviceInput deviceInputWithDevice:self.backCamera error:&error]; 
     } 
    } 
} 

if(!self.backCamera){ 
    self.backCamera = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; 
    self.backCameraInput = [AVCaptureDeviceInput deviceInputWithDevice:self.backCamera error:&error]; 
} 

:デュオのカメラを使用するにはズーム。

編集:iOS 11には、dualCameraDualPhotoDeliveryEnabledという新しいAVCapturePhotoSettingsがあります。 2つの静止画を同時に取り込むことができますが、ストリーミング/ビデオは使用できません。