avcapture video 在改变方向时重复部分

Posted

技术标签:

【中文标题】avcapture video 在改变方向时重复部分【英文标题】:avcapture video repeated part on changing orientation 【发布时间】:2015-03-20 07:53:35 【问题描述】:

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

capConnection.videoOrientation = AVCaptureVideoOrientationLandscapeLeft;

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

所以问题是如何摆脱这个重复的图像部分。我试过这个solution 但它一直在vImageRotate90_ARGB8888 上崩溃,知道如何解决这个问题吗?

为了亲自尝试,您可以获取 PJSIP 2.3 版视频,其中包含示例项目编译并在测试 SIP 服务器上运行它。

编辑:预览层被很好地旋转和缩放。当该设备旋转并发送具有重复边缘的图像时,接收RTP(视频)流时会出现特定问题。例如,如果 iPadA(horizo​​ntal) 与 iPadB(horizo​​ntal) 开始视频通话,则图像很好,没有重复的边缘。但是如果 iPadA 旋转到垂直,那么 iPadB 会得到这个重复的边缘图像。注意旋转捕获连接方向设置为当前设备方向。 注意预览层有AVLayerVideoGravityResize,但这不会影响传出的视频流。

【问题讨论】:

你好@Hashmat Khalil,我认为问题是由于self.previewLayer绑定设置。旋转后您是否正确设置了边界? 希望这个 [link]***.com/questions/21258372/… 帮助你。 这实际上不是我自己的预览层。我自己的相机的预览层看起来不错。它需要一个调整和它的罚款。但是来自其他iphone相机的RTP流会发送这种重复的图像部分。所以问题是如何正确旋转和裁剪,然后通过 RTP 发送。 【参考方案1】:

两个关键部分是在 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;
    

【讨论】:

我在原始问题中添加了更多详细信息,请检查。但简而言之,预览层很好。将视频流式传输到其他设备会出现问题。

以上是关于avcapture video 在改变方向时重复部分的主要内容,如果未能解决你的问题,请参考以下文章

更新到 Xcode 9 / Swift 4 后 AVCapture 出现奇怪的编译错误 [重复]

改变方向时keyboardWillShow没有响应,光标在UITextView

Ios:如何避免在捕获过程中改变视频方向?

Js判断H5上下滑动方向及滑动到顶部和底部判断

AvCapture / AVCaptureVideoPreviewLayer 无法获取正确的可见图像

Flutter ListView.builder在滚动时结结巴巴并跳到顶部[重复]