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

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-11-29
猜你喜欢
  • 2021-08-31
  • 2022-02-02
  • 2021-11-18
  • 2021-12-22
  • 2021-11-05
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案