以前编写【魔拍】应用的时候,发现一个问题,设置相机按每秒20帧的速度输出视频。开始时一切正常,但是切换摄像头后,帧率就变成动态的了且小于20帧/s。解决方式:
[_captureSession stopRunning]; [_captureSession beginConfiguration]; [_captureSession removeInput:videoInput]; if ([_captureSession canAddInput:newVideoInput]){ videoInput = newVideoInput; [_captureSession addInput:videoInput]; } [self setFrameRate]; [_captureSession commitConfiguration]; [_captureSession startRunning];
1 -(void) setFrameRate; 2 { 3 4 float rate = currentCameraPosition == 1 ? 20 : 30; 5 6 if ([_inputCamera respondsToSelector:@selector(activeVideoMinFrameDuration)]) { 7 [_inputCamera lockForConfiguration:nil]; 8 _inputCamera.activeVideoMinFrameDuration = CMTimeMake(1, rate); 9 _inputCamera.activeVideoMaxFrameDuration = CMTimeMake(1, rate);10 [_inputCamera unlockForConfiguration];11 12 }else{13 AVCaptureConnection *conn = [[_captureSession.outputs lastObject] connectionWithMediaType:AVMediaTypeVideo];14 if (conn.supportsVideoMinFrameDuration)15 conn.videoMinFrameDuration = CMTimeMake(1,rate);16 if (conn.supportsVideoMaxFrameDuration)17 conn.videoMaxFrameDuration = CMTimeMake(1,rate);18 19 }20 }
Tips: 在切换摄像头的时候Stop Seesion,然后重新设置FrameRate,最后重新Run Seesion。