2017-08-16 71 views
0

我使用swift3和我的决心,当我使用AVCaptureSessionPresetMedium等它不适合屏幕比例无法改变自定义值(1/1.77)。如何AVCaptureSession.sessionPreset到720x1280px(或1/1.77规模的任何东西)

let output = AVCaptureVideoDataOutput() 

    output.setSampleBufferDelegate(self, queue: sampleQueue) 

    let metaOutput = AVCaptureMetadataOutput() 
    metaOutput.setMetadataObjectsDelegate(self, queue: faceQueue) 

    session.beginConfiguration() 

//期望的分辨率:720x1280px // session.sessionPreset = AVCaptureSessionPresetMedium;

if session.canAddInput(input) { 
     session.addInput(input) 
    } 
    if session.canAddOutput(output) { 
     output .alwaysDiscardsLateVideoFrames = true; 
     session.addOutput(output) 
     connection1 = output.connection(withMediaType: AVMediaTypeVideo) 
     connection1?.preferredVideoStabilizationMode = AVCaptureVideoStabilizationMode.auto; 
     connection1?.videoOrientation = .portrait 
     connection1?.isVideoMirrored = true; 
    } 
    if session.canAddOutput(metaOutput) { 
     output .alwaysDiscardsLateVideoFrames = true; 
     session.addOutput(metaOutput) 
     connection2 = metaOutput.connection(withMediaType: AVMediaTypeMetadata) 
     connection2?.preferredVideoStabilizationMode = AVCaptureVideoStabilizationMode.auto; 
     connection2?.videoOrientation = .portrait 
     connection2?.isVideoMirrored = true 
    } 
+0

您可以设置AVCaptureSessionPreset1280x720而不是AVCaptureSessionPresetMedium –

+0

我的屏幕是肖像,因此高度应该高于宽度。我必须将上限设置为720x1280px或更低(1/1.77)。 –

回答

0

您应该使用AVCaptureSessionPreset1280x720预设。预设以横向表示,但1280x720的捕捉设置与720x1280相同,唯一的区别在于方向。例如有一个应用程序,支持旋转:

func captureOutput(_ captureOutput: AVCaptureOutput!, didOutputSampleBuffer sampleBuffer: CMSampleBuffer!, from connection: AVCaptureConnection!) 
{ 
    guard let pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer) else { return } 
    cameraImage = CIImage(cvPixelBuffer: pixelBuffer) 
    print(cameraImage?.extent ?? "") 
} 

将打印(0.0, 0.0, 1280.0, 720.0)景观的时候,和(0.0, 0.0, 720.0, 1280.0)人像时。

+0

谢谢,但整个应用程序是用于纵向方向,我认为旋转一个单一的VC不太好的用法。我认为在获取样本缓冲区后降低分辨率也会很有用,您知道如何去做(使用vImage等)吗? –

+0

我认为你错过了这一点。无论您是想要纵向还是横向的视频流,即“AVCaptureSessionPreset1280x720”==“AVCaptureSessionPreset720x1280”,“ – beyowulf

+0

”,那么配置是相同的。您是对的。它会自动生成720x1280像素。多么可惜,我没有看到这一点。非常感谢。 –

相关问题