avcapture视频重复部分改变方向

时间:2015-03-20 07:53:36

标签: ios video avcapturesession

我遇到了有关视频捕捉方向的问题。首先是关于voip应用程序,它使用可以传输视频的pjsip。使用AVCapture帧捕获视频。所以当设备方向改变时出现问题,那么我也必须设置avcapture方向。 例如:

capConnection.videoOrientation = AVCaptureVideoOrientationLandscapeLeft;

它工作正常,但我有重复的图像部分。 enter image description here

所以问题是如何摆脱这个重复的图像部分。我已经尝试了这个solution,但它一直在崩溃vImageRotate90_ARGB8888任何想法如何解决这个问题?

为了自己试一试,你可以获得带有示例项目编译的PJSIP 2.3版视频,并在测试SIP服务器上运行它。

编辑:旋转预览图层并进行缩放。当该设备旋转并发送具有重复边缘的图像时,在接收RTP(视频)流时会发生特定问题。例如,如果iPadA(水平)用iPadB(水平)开始视频通话,则图像很好而且不会重复边缘。但如果iPadA旋转到垂直,那么iPadB会获得这些重复的边缘图像。旋转时注意捕获连接方向设置为当前设备方向。 请注意,预览图层具有AVLayerVideoGravityResize,但这不会影响传出的视频流。

1 个答案:

答案 0 :(得分:0)

两个关键部分是在viewDidLoad中设置autoresizingMask并将captureVideoPreviewLayer.frame调整为self.view.layer.bounds;在willAnimateRotationToInterfaceOrientation。

- (void)viewDidLoad
{
   [super viewDidLoad];

   self.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

      //
      // react to device orientation notifications
      //
      [[NSNotificationCenter defaultCenter] addObserver : self
                                               selector : @selector(deviceOrientationDidChange:)
                                                   name : UIDeviceOrientationDidChangeNotification
                                                 object : nil];

      [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];


}


- (void) willAnimateRotationToInterfaceOrientation : (UIInterfaceOrientation)toInterfaceOrientation
                                          duration : (NSTimeInterval)duration
{

   captureVideoPreviewLayer.frame = self.view.layer.bounds;

   [[captureVideoPreviewLayer connection] setVideoOrientation:toInterfaceOrientation];
}



- (void)deviceOrientationDidChange: (NSNotification*)notification
{
    UIDeviceOrientation orientation = [UIDevice currentDevice].orientation;

    switch (orientation)
    {
        case UIDeviceOrientationPortrait:
        case UIDeviceOrientationPortraitUpsideDown:
        case UIDeviceOrientationLandscapeLeft:
        case UIDeviceOrientationLandscapeRight:
            currentDeviceOrientation = orientation;
            break;

            // unsupported?
        case UIDeviceOrientationFaceUp:
        case UIDeviceOrientationFaceDown:
        default:
            break;
    }
}