CMTimeGetSeconds返回0而不是0.0666667

时间:2013-06-27 17:18:20

标签: objective-c avfoundation cmtime

您好我正在尝试将表示帧速率的整数转换为CMTime,以便能够在AVCaptureScreenInput中设置minFrameDuration。

到现在为止我已经

int numberOfFrames = [self convertFrameRateStringToInt:[parameters objectForKey:@"frameRate"]];
Float64 frameDuration = 1.0/numberOfFrames;
NSLog(@"numberOfFrames %i - frameDuration %f",numberOfFrames, frameDuration);
NSLog(@"timeshow %f",CMTimeGetSeconds(CMTimeMakeWithSeconds(frameDuration, 1)));
return CMTimeMakeWithSeconds(frameDuration,1);

如果numberOfFrames设置为每秒15帧,则frameDuration为0.066667,因此CMTimeMakeWithSeconds的参数为0.066667和1,这意味着CMTimeGetSeconds应返回0.066667 / 1 = 0.066667,而是返回0.

有人可以弄清楚我做错了什么并解释为什么? 谢谢。

Edit1:我让它改变了这个功能:

int numberOfFrames = [self convertFrameRateStringToInt:string];
NSLog(@"timeshow %f",CMTimeGetSeconds(CMTimeMake(1, (int32_t)numberOfFrames)));
return CMTimeMake(1, (int32_t)numberOfFrames);

我仍然无法理解为什么最后一种方法不起作用

1 个答案:

答案 0 :(得分:0)

你应该像CMTime那样构建你的作品:

CMTimeMake(1, numberOfFrames);
  

CMTime表示为有理数,带有分子(int64_t值)和分母(int32_t时间刻度)。从概念上讲,时间刻度指定分子中每个单位占秒的分数。因此,如果时间刻度为4,则每个单位代表四分之一秒;如果时间刻度为10,则每个单位代表十分之一秒,依此类推。

您的来电CMTimeMakeWithSecondskCMTimeFlags_HasBeenRounded添加到CMTime。这就是为什么它会四舍五入到最接近的整秒。