captureOutput中的iOS应用程序相机方向

首先,我知道很多人都问过类似的问题 – 但我找不到任何类似的问题。

当调用这个接口时:

- (void) captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection { CVImageBufferRef pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer); CVPixelBufferLockBaseAddress(pixelBuffer, 0); // get buffer dimensions size_t bufferHeight = CVPixelBufferGetHeight(pixelBuffer); size_t bufferWidth = CVPixelBufferGetWidth(pixelBuffer); ... 

当手机处于“肖像模式”时 ,我得到480的高度和640的宽度。 奇怪的是,当我检查[connection videoOrientation]它被正确设置为肖像。

  1. 为什么连接方向不会影响采样缓冲区?
  2. 我应该自己旋转图像吗?
  3. 有没有一种方法来configuration设备方向的样品?

谢谢


@ Gabriel:我已经有这个代码:

 -(void) viewWillLayoutSubviews { // Handle camera if (_videoPreviewLayer) { _videoPreviewLayer.frame = self.view.bounds; for (AVCaptureOutput* outcap in _captureSession.outputs) { for(AVCaptureConnection* con in outcap.connections) { switch ([[UIDevice currentDevice] orientation]) { case UIInterfaceOrientationPortrait: [con setVideoOrientation:AVCaptureVideoOrientationPortrait]; break; case UIInterfaceOrientationLandscapeRight: [con setVideoOrientation:AVCaptureVideoOrientationLandscapeRight]; //home button on right. Refer to .h not doc break; case UIInterfaceOrientationLandscapeLeft: [con setVideoOrientation:AVCaptureVideoOrientationLandscapeLeft]; //home button on left. Refer to .h not doc break; case UIInterfaceOrientationPortraitUpsideDown: [con setVideoOrientation:AVCaptureVideoOrientationPortraitUpsideDown]; //home button on left. Refer to .h not doc break; default: [con setVideoOrientation:AVCaptureVideoOrientationPortrait]; //for portrait upside down. Refer to .h not doc break; } } } } } 

正如我上面提到的,当检查连接时 – 这是正确的方向,图像虽然是错误的方向..

你是否通过手动修复来引用 – 使用什么方法来自动更改为正确的方向?

事情是,显示是好的,这只是拍摄的照片…

解决你的问题:

1 – 检查您是否禁用或修改了方向模式。

2 – 使用AVFoundation时,你必须自己旋转图像,这里是我使用的代码:

 AVCaptureVideoOrientation newOrientation; switch ([[UIDevice currentDevice] orientation]) { case UIDeviceOrientationPortrait: newOrientation = AVCaptureVideoOrientationPortrait; break; case UIDeviceOrientationPortraitUpsideDown: newOrientation = AVCaptureVideoOrientationPortraitUpsideDown; break; case UIDeviceOrientationLandscapeLeft: newOrientation = AVCaptureVideoOrientationLandscapeRight; break; case UIDeviceOrientationLandscapeRight: newOrientation = AVCaptureVideoOrientationLandscapeLeft; break; default: newOrientation = AVCaptureVideoOrientationPortrait; } 

3 – 使用上面的代码

希望这可以帮助。

好…

这是超级怪异的!

当默认的应用程序方向是横向的权利 – 它没有工作。

当我改变默认的应用程序的方向是肖像(button在底部) – 它突然开始工作…

我不知道这是一个错误或预期的行为…