【问题标题】:iPhone 7 Plus - AVFoundation dual cameraiPhone 7 Plus - AVFoundation 双摄像头
【发布时间】:2017-10-03 19:11:21
【问题描述】:

我目前正在积极研究这一点,但现在 iPhone 7 Plus 具有双摄像头系统,AVFoundation 是否允许您同时处理来自每个特定摄像头的视频帧?

我正在考虑/希望在给定特定位置的情况下,我能够同时处理来自两个 AVCaptureDevice 实例的输出。

【问题讨论】:

    标签: ios avfoundation


    【解决方案1】:

    您一次只能将一台摄像机添加到 AVCaptureSession。例如,您可以在前后摄像头之间切换,但不能同时使用两者。 7 Plus 的两个后置摄像头也是如此,您必须选择其中一个。但是,有一个小的区别,因为您也可以调用“双摄像头”,在缩放时合并来自两个摄像头的图像。但这仅适用于静态照片,您只会获得一个图像/捕获缓冲区。对于视频,您必须选择任一相机。

    要选择相机,您可以使用新的 AVCaptureDeviceDiscoverySession。要使用双摄像头:

    @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];
    }
    

    单独使用广角和长焦相机

    @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];
    }
    

    如果您不这样做,或者保留旧代码,即使您缩放,您也只会使用广角相机。

    编辑:在 iOS 11 中有一个名为 dualCameraDualPhotoDeliveryEnabled 的新 AVCapturePhotoSettings。它允许您同时拍摄两张静止图像,但是,没有流媒体/视频。

    【讨论】:

      【解决方案2】:

      在更新的 AVFoundation 文档 (AVCaptureDeviceType) 中有新的设备类型:builtInWideAngleCamerabuiltInTelephotoCamera。因此,应该可以创建多个捕获会话并同时从它们两个获取反馈。

      【讨论】:

      • 这是否意味着我们可以分别从两个摄像头获得单独的图像?实际上,这是我的一个应用程序的要求,所以如果有人能回答我的问题,这将是一个很大的帮助。提前致谢。
      • 我很确定您不能同时从两台摄像机流式传输视频数据。如果您创建多个捕获会话,则在第二个会话上调用 -startRunning 将停止第一个。
      猜你喜欢
      • 2017-01-22
      • 1970-01-01
      • 1970-01-01
      • 2021-05-09
      • 1970-01-01
      • 1970-01-01
      • 2019-04-09
      • 1970-01-01
      • 2012-06-19
      相关资源
      最近更新 更多