试图了解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答案很清楚