我在视图控制器中放置了一个简单UIView
的iOS应用。我试图在UIView
中显示前置摄像头的摄像头。我不想拍照或录制视频,我只想在UIView
中显示实时Feed。
我尝试实施AVCaptureVideoPreviewLayer
,但我得到的Feed是空白的。似乎什么也没发生。这是我的代码:
AVCaptureSession *session = [[AVCaptureSession alloc] init];
[session setSessionPreset:AVCaptureSessionPresetPhoto];
AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
NSError *error = nil;
AVCaptureDeviceInput *input;
@try {
input = [AVCaptureDeviceInput deviceInputWithDevice:device error:&error];
} @catch (NSException *exception) {
NSLog(@"Error; %@", error);
} @finally {
if (error == nil) {
if ([session canAddInput:input]) {
[session addInput:input];
AVCaptureStillImageOutput *stillImageOutput = [[AVCaptureStillImageOutput alloc] init];
[stillImageOutput setOutputSettings:@{AVVideoCodecKey : AVVideoCodecJPEG}];
if ([session canAddOutput:stillImageOutput]) {
[session setSessionPreset:AVCaptureSessionPresetHigh];
[session addOutput:stillImageOutput];
AVCaptureVideoPreviewLayer *previewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:session];
[previewLayer setVideoGravity:AVLayerVideoGravityResizeAspect];
[previewLayer.connection setVideoOrientation:AVCaptureVideoOrientationPortrait];
[backgroundStreamView.layer addSublayer:previewLayer];
[session startRunning];
NSLog(@"session running");
} else {
NSLog(@"cannot add output");
}
} else {
NSLog(@"cannot add inout");
}
} else {
NSLog(@"general error: %@", error);
}
}
会话运行完美,但没有显示视频。我究竟做错了什么?
谢谢你的时间,Dan。
答案 0 :(得分:0)
管理自己修复它,结果是一个相当简单的问题 - 我没有指定AVCapturePreviewLayer
的帧大小,因此它没有出现(大概是因为它默认为帧大小为零)。
要解决此问题,我将框架设置为与自定义UIView
的框架匹配:
[previewLayer setFrame:backgroundStreamView.bounds];
弃用代码修复
AVCaptureStillImageOutput
也已弃用,因此为了解决这个问题,我将其替换为AVCapturePhotoOutput
类。因此代码改为:
AVCaptureStillImageOutput *stillImageOutput = [[AVCaptureStillImageOutput alloc] init];
[stillImageOutput setOutputSettings:@{AVVideoCodecKey : AVVideoCodecJPEG}]
以下内容:
AVCapturePhotoOutput *stillImageOutput = [[AVCapturePhotoOutput alloc] init];