试图了解CMTime和CMTimeMake
1) CMTimeMake(1,10)
表示持续时间为1秒,时间刻度为10或10帧/秒。 这意味着10帧的video持续时间是1秒?
2)
CMTime lastTime=CMTimeMake(1,10); CMTime frameTime=CMTimeMake(1, 10); CMTime currentTime=CMTimeAdd(lastTime, frameTime)
=(2,10)?
2秒的video和每秒10帧的currentTime?
1) CMTimeMake(1,10)
实际上是指1的值和10的时间刻度。它们是分子和分母,所以它是1/10秒,而不是1秒。
2)结果就像CMTimeMake(2, 10)
,这是十分之二秒。
彼得是对的。 下面的代码使得这个概念更加清晰:
1)
Float64 seconds = 5; int32_t preferredTimeScale = 600; CMTime inTime = CMTimeMakeWithSeconds(seconds, preferredTimeScale); CMTimeShow(inTime);
上面的代码给出了:{3000/600 = 5.000}
这意味着5秒的总持续时间,3000帧,每秒600帧的时间尺度。
2)
int64_t value = 10000; int32_t preferredTimeScale = 600; CMTime inTime = CMTimeMake(value, preferredTimeScale); CMTimeShow(inTime);
这个给出{10000/600 = 16.667}
这意味着总持续时间为16.667秒,10000帧,时间尺度为每秒600帧。
注意CMTimeMake(int64_t值,int32_t时间刻度)和CMTimeMakeWithSeconds(Float64秒,int32_t preferredTimeScale)
希望这个解释有帮助。 为了进一步的澄清,请不要犹豫,在这个职位上发表进一步的问题。
使用CMTimeMake(A, B)
您可以存储一个有理数,精确的分数A / B
秒
-
CMTimeMake(1, 4)
– >时间间隔0.25秒
使用CMTimeMakeWithSeconds(A, B)
您可以存储A
秒至B
步骤的分辨率
-
CMTimeMakeWithSeconds(0.25, ...)
– >时间间隔0.25秒
您通常会看到CMTimeMakeWithSeconds(time, NSEC_PER_SEC)
。 NSEC_PER_SEC
有效的意思是“ 最高分辨率 ”。
CMTime结构体表示length of time that is stored as rational number.
CMTime具有值和时间范围字段,并且表示时间值/时间刻度秒。
看到这个SO答案很清楚