您好我正在尝试将表示帧速率的整数转换为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);
我仍然无法理解为什么最后一种方法不起作用
答案 0 :(得分:0)
你应该像CMTime
那样构建你的作品:
CMTimeMake(1, numberOfFrames);
CMTime表示为有理数,带有分子(int64_t值)和分母(int32_t时间刻度)。从概念上讲,时间刻度指定分子中每个单位占秒的分数。因此,如果时间刻度为4,则每个单位代表四分之一秒;如果时间刻度为10,则每个单位代表十分之一秒,依此类推。
您的来电CMTimeMakeWithSeconds
将kCMTimeFlags_HasBeenRounded
添加到CMTime
。这就是为什么它会四舍五入到最接近的整秒。