iOS 中正确切换摄像头&正确实现设置帧率的方式

以前编写【魔拍】应用的时候,发现一个问题,设置相机按每秒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。

posted @ 2013-09-04 22:14  xiaopangjun  阅读(2473)  评论(0编辑  收藏  举报