最近發(fā)現(xiàn)項(xiàng)目里,切換前后攝像頭幾次之后,會(huì)出現(xiàn)錄制的視頻方向上下顛倒,可是明明已經(jīng)在切換攝像頭后,給videoconnection重新設(shè)置了錄制方向,我項(xiàng)目視頻錄制固定為橫屏錄制,所以每次切換攝像頭都執(zhí)行了以下方法self.videoConnection.videoOrientation=AVCaptureVideoOrientationLandscapeRight;摸索了兩天,才發(fā)現(xiàn)了bug所在,是因?yàn)関ideoConnection 采用了懶加載,切換攝像頭后并沒有重新初始化,所以才讓設(shè)置沒有生效。解決辦法很簡單,重寫懶加載,直接改為每次都重新初始化。
//視頻連接
- (AVCaptureConnection*)videoConnection {
_videoConnection= [self.videoOutputconnectionWithMediaType:AVMediaTypeVideo];
return_videoConnection;
}
最后附上攝像頭前后切換的代碼
//切換前后置攝像頭
- (void)changeCameraInputDeviceisFront:(BOOL)isFront {
if(isFront) {
//改變會(huì)話的配置前一定要先開啟配置,配置完成后提交配置改變
[self.recordSessionstopRunning];
[self.recordSessionbeginConfiguration];
[self.recordSessionremoveInput:self.backCameraInput];
if([self.recordSessioncanAddInput:self.frontCameraInput]) {
[selfchangeCameraAnimation];
[self.recordSessionaddInput:self.frontCameraInput];
//提交會(huì)話配置
[self.recordSessioncommitConfiguration];
}
}else{
[self.recordSessionstopRunning];
[self.recordSessionbeginConfiguration];
[self.recordSessionremoveInput:self.frontCameraInput];
if([self.recordSessioncanAddInput:self.backCameraInput]) {
[selfchangeCameraAnimation];
[self.recordSessionaddInput:self.backCameraInput];
[self.recordSessioncommitConfiguration];
}}}
//后置攝像頭輸入
- (AVCaptureDeviceInput*)backCameraInput {
if(_backCameraInput==nil) {
NSError*error;
_backCameraInput= [[AVCaptureDeviceInputalloc]initWithDevice:[selfbackCamera]error:&error];
if(error) {
NSLog(@"獲取后置攝像頭失敗~");
}
}
return_backCameraInput;
}
//前置攝像頭輸入
- (AVCaptureDeviceInput*)frontCameraInput {
if(_frontCameraInput==nil) {
NSError*error;
_frontCameraInput= [[AVCaptureDeviceInputalloc]initWithDevice:[selffrontCamera]error:&error];
if(error) {
NSLog(@"獲取前置攝像頭失敗~");
}
}
return_frontCameraInput;
}