CMTime是什么
CMTime是框架 Core Media里的时间结构体,其核心是
使用两个Int来表达计算机无法准确计算的Float值 源自于计算机媒体行业的约定
1 | A struct representing a time value such as a timestamp or duration. |
Apple官方推荐
根据CMTime的定义,其中TimeScale代表把一秒分隔成多少份 Unit,而Value代表当前有几个 Unit
1 | Thus if the timescale is 4, each unit represents a quarter of a second; if the timescale is 10, each unit represents a tenth of a second, and so on. |
例如官方文档中说,如果
1 | timescale = 4 //代表每秒被分隔成4份 |
根据某些其他Blog的记载这可能是最详细的CMTime教程,官方文档 曾经出现过推荐把 timescale 设置成 600 理由是 600 是所有帧率的最小公倍数
1 | You frequently use a timescale of 600, because this is a multiple of several commonly used frame rates: 24 fps for film, 30 fps for NTSC (used for TV in North America and Japan), and 25 fps for PAL (used for TV in Europe). Using a timescale of 600, you can exactly represent any number of frames in these systems. |
但是目前官方文档2019年2月已经没有这句话了,可能是帧率范围变大了
实际取值原则
在实际项目中,如果取值原则如下
- 如果你有实例化后的PlayItem,则可以通过duration取到
- 如果你没有文件,你认识做相机或者录制视频的开发者,你们去口头约定一个
为什么我会知道,是因为开发相机的同事把TimeScale设置成了 30000 写到了MetaData里坑了我一把,他告诉我所有相机都是这样设置的。。。我不太相信