试图了解CMTime

我已经看到CMTime的一些例子 (三个单独的链接),但我仍然不明白。 我使用AVCaptureVideoDataOutput AVCaptureSession和我想设置输出的最大和最小帧速率。 我的问题是我只是不明白的CMTime结构。

显然CMTimeMake(价值,timeScale)应该给我价值帧每1 / timeScale秒为总价值/ timeScale秒,或者我得到那个错误?

为什么不把这个logging下来以解释这是什么?

如果真的这样工作,我怎么会得到它有无限的帧数?

如果真的很简单,我很抱歉,但没有任何点击。

CMTime结构体表示以有理数存储的时间长度(请参阅CMTime Reference )。 CMTime具有valuetimescale字段,并且表示时间value/timescale seconds

CMTimeMake是一个返回CMTime结构的函数,例如:

 CMTime t1 = CMTimeMake(1, 10); // 1/10 second = 0.1 second CMTime t2 = CMTimeMake(2, 1); // 2 seconds CMTime t3 = CMTimeMake(3, 4); // 3/4 second = 0.75 second CMTime t4 = CMTimeMake(6, 8); // 6/8 second = 0.75 second 

因此,最后两个时间值t3t4代表相同的时间值

 CMTimeCompare(t3, t4) == 0 

如果你设置AVCaptureSessionvideoMinFrameDuration是不会有所作为,如果你设置

 connection.videoMinFrameDuration = CMTimeMake(1, 20); // or connection.videoMinFrameDuration = CMTimeMake(2, 40); 

在这两种情况下,帧之间的最小时间间隔设置为1/20 = 0.05秒。