发布于 2012-10-22 04:32:29
CMTime结构表示以有理数形式存储的时间长度(请参阅CMTime Reference)。CMTime有一个value和一个timescale字段,表示时间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最后两个时间值t3和t4表示相同的时间值,因此
CMTimeCompare(t3, t4) == 0如果设置了AVCaptureSession的videoMinFrameDuration,如果设置了
connection.videoMinFrameDuration = CMTimeMake(1, 20); // or
connection.videoMinFrameDuration = CMTimeMake(2, 40);在这两种情况下,帧之间的最小时间间隔被设置为1/20 = 0.05秒。
发布于 2020-04-08 05:36:29
我的经验有所不同。
对于let testTime = CMTime(seconds: 3.83, preferredTimescale: 100)
如果您设置了一个断点并查看调试器侧窗口,它会显示:
"383百分之一秒“
通过在AVPlayer的视频中寻求固定偏移量的测试已经证实了这一点。
因此,将实际秒数放在seconds字段中,将精度放在preferredTimescale字段中。所以100意味着百分之一秒的精度。
做let testTime = CMTime(seconds: 3.83, preferredTimescale: 100)
仍然在视频中查找相同的位置,但它在调试器侧窗口中显示为"3833千分之一秒“
做let testTime = CMTime(seconds: 3.83, preferredTimescale: 1)
不会在视频中查找相同的位置,因为它已被截断,并且在调试器侧窗口中显示为"3秒“。请注意,由于preferredTimescale,.833部件已丢失。
https://stackoverflow.com/questions/12902410
复制相似问题