我正在开发视频流应用程序,其中我需要捕获前置摄像头视频帧并编码然后转移到另一端,典型的流程是这样的
AVCaptureSession - > AVCaptureDeviceInput - > AVCaptureVideoDataOutput - >捕获帧 - >编码帧 - >发送帧到另一端,
它工作正常,我已将 kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange 设置为帧格式。
还预览用于显示预览的图层,
问题出现在设备方向发生变化时,如果设备从纵向移动到横向,然后在另一端框架旋转90度,我期待由于预览层支持方向,所以我将自动接收旋转缓冲区Capture回调,但看起来,预览层只显示捕获的缓冲区的预览和UI orating缓冲区,而在另一端我会得到咆哮的缓冲区,
所以我想知道,有没有任何配置可以让它改变,或者我需要在Capture缓冲区回调中旋转/转换缓冲区。
答案 0 :(得分:8)
感谢您查看,基本上解决方案是,应该设置连接方向,我正在使用预览图层,因此它影响预览图层而不是方向。
这里是代码段
-(void) orientationChanged
{
// get the new orientation from device
AVCaptureVideoOrientation newOrientation = [self videoOrientationFromDeviceOrientation];
// set the orientation of preview layer :( which will be displayed in the device )
[previewLayer.connection setVideoOrientation:newOrientation];
// set the orientation of the connection: which will take care of capture
[pCaptureConnection setVideoOrientation:newOrientation];
}