【问题标题】:AVCapturesession change video orientation while recordingAVCapturesession 在录制时更改视频方向
【发布时间】:2017-07-04 14:26:24
【问题描述】:

我需要在使用AVCaptureSession 录制视频时更改视频方向。我已经使用以下代码在开始录制之前更改了方向,但我需要在录制过程中更改方向。

- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator {
    [self orientationChanged];
}

//Respond with the rotation 
- (void)orientationChanged {
    AVCaptureConnection *videoConnection = nil;

    for ( AVCaptureConnection *connection in [_movieFileOutput connections] )
    {
        NSLog(@"%@", connection);
        for ( AVCaptureInputPort *port in [connection inputPorts] )
        {
            NSLog(@"%@", port);
            if ( [[port mediaType] isEqual:AVMediaTypeVideo] )
            {
                videoConnection = connection;
                break;
            }
        }
    }

    UIDeviceOrientation deviceOrientation = [UIDevice currentDevice].orientation;
    if (deviceOrientation == UIInterfaceOrientationPortraitUpsideDown) {
        [_previewLayer.connection setVideoOrientation:AVCaptureVideoOrientationPortraitUpsideDown];
        [videoConnection setVideoOrientation:AVCaptureVideoOrientationPortraitUpsideDown];
    }
    else if (deviceOrientation == UIInterfaceOrientationPortrait) {
        [_previewLayer.connection setVideoOrientation:AVCaptureVideoOrientationPortrait];
        [videoConnection setVideoOrientation:AVCaptureVideoOrientationPortrait];
    }

    else if (deviceOrientation == UIInterfaceOrientationLandscapeLeft) {
        [_previewLayer.connection setVideoOrientation:AVCaptureVideoOrientationLandscapeLeft];
        [videoConnection setVideoOrientation:AVCaptureVideoOrientationLandscapeLeft];
    }

    else {
        [_previewLayer.connection setVideoOrientation:AVCaptureVideoOrientationLandscapeRight];
        [videoConnection setVideoOrientation:AVCaptureVideoOrientationLandscapeRight];
    }
}

【问题讨论】:

    标签: ios objective-c orientation avcapturesession


    【解决方案1】:

    您可以在录制过程中使用此代码更改方向:

    AVCaptureConnection *videoConnection = [self.videoOutPut connectionWithMediaType:AVMediaTypeVideo];
    - (void)_setOrientationForConnection:(AVCaptureConnection *)connection
    {
        if (!connection || ![connection isVideoOrientationSupported])
            return;
    
        AVCaptureVideoOrientation captureOrientation = AVCaptureVideoOrientationPortrait;
    
        UIDeviceOrientation deviceOrientation = [UIDevice currentDevice].orientation;
        switch (deviceOrientation) {
            case UIDeviceOrientationLandscapeLeft:
                captureOrientation = AVCaptureVideoOrientationLandscapeRight;
                break;
            case UIDeviceOrientationLandscapeRight:
                captureOrientation = AVCaptureVideoOrientationLandscapeLeft;
                break;
            case UIDeviceOrientationPortrait:
                captureOrientation = AVCaptureVideoOrientationPortrait;
                break;
            case UIDeviceOrientationPortraitUpsideDown:
                captureOrientation = AVCaptureVideoOrientationPortraitUpsideDown;
                break;
            default:
                break;
        }
    
        [connection setVideoOrientation:captureOrientation];
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-08
      • 1970-01-01
      • 2023-03-05
      • 2014-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多