2010-12-19 696 views
2

我想写一个相机应用程序,使用iPhone的相机录制视频,但我找不到改变录制视频帧率的方法。例如,我想以每秒25帧而不是默认值30录制。如何在iPhone上录制视频时设置帧速率?

是否可以以任何方式设置此帧速率,如果是,如何?

回答

0

据我所知,您不能设置FPS进行录制。查看AVFoundation的WWDC 2010视频。这似乎表明,只要我可以说,只能用于捕获帧数据。

我很想被证明是错误的,但我敢肯定,你不能。抱歉!

+0

这太烂了:(这里欧罗巴我们不想记录30帧/秒,所以我想改变它到25 :(流血苹果 – Tammo 2010-12-19 22:49:31

+0

你绝对可以改变记录的FPS。下面的代码。 – Praxiteles 2015-07-14 22:31:45

+0

https://github.com/shu223/SlowMotionVideoRecorder – 2015-07-28 12:00:20

0

您需要AVCaptureDevice.h

这里在这里工作代码:

- (void)attemptToConfigureFPS 
{ 

    NSError *error; 
    if (![self lockForConfiguration:&error]) { 
     NSLog(@"Could not lock device %@ for configuration: %@", self, error); 
     return; 
    } 

    AVCaptureDeviceFormat *format = self.activeFormat; 
    double epsilon = 0.00000001; 

    int desiredFrameRate = 30; 

    for (AVFrameRateRange *range in format.videoSupportedFrameRateRanges) { 

     NSLog(@"Pre Minimum frame rate: %f Max = %f", range.minFrameRate, range.maxFrameRate); 


     if (range.minFrameRate <= (desiredFrameRate + epsilon) && 
      range.maxFrameRate >= (desiredFrameRate - epsilon)) { 

      NSLog(@"Setting Frame Rate."); 

      self.activeVideoMaxFrameDuration = (CMTime){ 
       .value = 1, 
       .timescale = desiredFrameRate, 
       .flags = kCMTimeFlags_Valid, 
       .epoch = 0, 
      }; 
      self.activeVideoMinFrameDuration = (CMTime){ 
       .value = 1, 
       .timescale = desiredFrameRate, 
       .flags = kCMTimeFlags_Valid, 
       .epoch = 0, 
      }; 

      // self.activeVideoMinFrameDuration = self.activeVideoMaxFrameDuration; 

      // NSLog(@"Post Minimum frame rate: %f Max = %f", range.minFrameRate, range.maxFrameRate); 

      break; 
     } 
    } 

    [self unlockForConfiguration]; 


    // Audit the changes 
    for (AVFrameRateRange *range in format.videoSupportedFrameRateRanges) { 

     NSLog(@"Post Minimum frame rate: %f Max = %f", range.minFrameRate, range.maxFrameRate); 

    } 



}