什么是CMTime中的时间刻度部分?

4
我一直在研究与创建CMTime相关的文档。所有函数(CMTimeMake()CMTimeMakeWithSeconds()等)都有一个名为preferredTimeScale的第二个参数。
有人能解释一下这是什么,并且为什么要以这种方式指定吗?

你看过AVFoundation文档中关于"CMTime代表时间长度"的部分吗? - jscs
那个链接不幸已经失效了 :( - Robert Atkins
1个回答

8
根据Apple的CMTime文档的开头段落,CMTime被表示为一个有理数,其中分子是int64_t值,分母是int32_t时间刻度。从概念上讲,时间刻度指定了分子中每个单位占用的秒数的分数。因此,如果时间刻度为4,则每个单位代表四分之一秒;如果时间刻度为10,则每个单位代表十分之一秒,依此类推。除了简单的时间值外,CMTime还可以表示非数字值:+无穷大,-无穷大和不确定。使用标志CMTime指示时间是否在某个时刻被舍入。
因此,如果时间刻度为4,则每个单独的时间测量单位为四分之一秒。
如果您的时间刻度为1,则每个单独的时间测量单位为一秒(但对于用户来说可能会很慢)。

许多视频格式使用600的时间刻度

你经常使用600的时间刻度,因为这是几个常用帧率的公共倍数:电影的24帧每秒(fps),北美和日本电视中使用的NTSC的30fps,以及欧洲电视中使用的PAL的25fps。使用600的时间刻度,您可以精确地表示这些系统中任意数量的帧。


1的时间刻度实际上并不那么罕见。根据我的经验,0/1是玩家的初始当前时间,并且(至少在Lion上)kCMTimeZero的值也是如此。 - Peter Hosey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接