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(horizontal) 与 iPadB(horizontal) 开始视频通话,则图像很好,没有重复的边缘。但是如果 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