CMTime简单介绍

通常开发者认为时间的呈现格式应该是浮点数据,我们一般使用NSTimeInterval,实际上它是简单的双精度double类型,只是typedef了一下,但是由于浮点型数据计算很容易导致精度的丢失,在一些要求高精度的应用场景显然不适合,于是苹果在Core Media框架中定义了CMTime数据类型作为时间的格式,类型定义如下:

typedef struct{

CMTimeValue value;

CMTimeScale timescale;

CMTimeFlags flags;

CMTimeEpoch epoch;


} CMTime;

显然,CMTime定义是一个C语言的结构体,CMTime是以分数的形式表示时间,value表示分子,timescale表示分母,flags是位掩码,表示时间的指定状态。

CMTime的创建

我们一般使用CMTimeMake函数创建,如下:


CMTime t1 = CMTimeMake(3, 1);

CMTime t2 = CMTimeMake(6, 3);
我们也可以通过CMTimeShow函数打印CMTime的相关信息如:

CMTimeShow(t1);

CMTimeShow(t2);
结果如:
{3/1 = 3.000}
{6/3 = 2.000}

CMTime计算

相加

 CMTime t3 = CMTimeAdd(t1, t2);

想减

CMTime t4 = CMTimeSubtract(t3, t1);

我们也可以通过CMTimeGetSeconds函数获取时间的秒数。

CMTimeRange

CMTimeRange是一个表示时间范围的一个数据类型,定义如下:

 

其中start表示时间的起点,duratin表示时间范围的持续时间。
一般使用CMTimeRangeMake和CMTimeRangeFromTimeToTime创建如:


CMTimeRange timeRange1 = CMTimeRangeMake(t1, t2);


CMTimeRange timeRange2 = CMTimeRangeFromTimeToTime(t4, t3);
  1.  

CMTimeRange的交集和并集

有时候我们需要获取两个时间范围的交叉时间范围或者两个时间范围的总和时间范围。

交叉时间范围

CMTimeRange intersectionRange = CMTimeRangeGetIntersection(timeRange2, timeRange1);

总和时间范围

CMTimeRange unionRange = CMTimeRangeGetUnion(timeRange1, timeRange2);

CMTime一般用的不多,但是在时间精度有要求的应用中会用到,比如音频,视频的处理。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值