CMTime

 

CMTime是专门用于标识电影时间的结构体,通常用如下两个函数来创建CMTime

typedef struct
{
	CMTimeValue	value;		/*! @field value The value of the CMTime. value/timescale = seconds. */
	CMTimeScale	timescale;	/*! @field timescale The timescale of the CMTime. value/timescale = seconds.  */
	CMTimeFlags	flags;		/*! @field flags The flags, eg. kCMTimeFlags_Valid, kCMTimeFlags_PositiveInfinity, etc. */
	CMTimeEpoch	epoch;		/*! @field epoch Differentiates between equal timestamps that are actually different because
												 of looping, multi-item sequencing, etc.  
												 Will be used during comparison: greater epochs happen after lesser ones. 
												 Additions/subtraction is only possible within a single epoch,
												 however, since epoch length may be unknown/variable. */
} CMTime;

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

 

他有两个构造函数: 

CMTimeMake

CMTime CMTimeMake(
				int64_t value,		/*! @param value		Initializes the value field of the resulting CMTime. */
				int32_t timescale)	/*! @param timescale	Initializes the timescale field of the resulting CMTime. */
							__OSX_AVAILABLE_STARTING(__MAC_10_7,__IPHONE_4_0);

 value当前第几帧,timescale每秒钟多少帧.当前播放时间a/b 

 

int64_t value = 10000;

int32_t preferredTimeScale = 600;

CMTime inTime = CMTimeMake(value, preferredTimeScale);

CMTimeShow(inTime);

OUTPUT: {10000/600 = 16.667}

代表时间为16.667s, 视频一共1000帧,每秒600

 

CMTimeMakeWithSeconds

CMTime CMTimeMakeWithSeconds(
				Float64 seconds,
				int32_t preferredTimescale)
							__OSX_AVAILABLE_STARTING(__MAC_10_7,__IPHONE_4_0);

 seconds当前时间,preferredTimescale每秒钟多少帧.

 

Float64 seconds = 5;

int32_t preferredTimeScale = 600;

CMTime inTime = CMTimeMakeWithSeconds(seconds, preferredTimeScale);

CMTimeShow(inTime);

OUTPUT: {3000/600 = 5.000}

代表当前时间为5s,视频一共有3000帧,一秒钟600

 

 

demo——拖动进度条:

float minValue = [slider minimumValue];
float maxValue = [slider maximumValue];
float value = [slider value];
seconds = duration * (value - minValue) / (maxValue - minValue);
preferredTimeScale = 1 *NSEC_PER_SEC;

 1 *NSEC_PER_SEC 如果只写 1 的话有很大的误差,使用纳秒也是为了保证指定一个时间播放视频的精确度timescale可能就是 1 preferredTimeScale的精确度就更高 1 * NSEC_PER_SEC

关键词解释:

  • NSEC:纳秒。
  • USEC:微妙。
  • SEC:秒
  • PER:每

所以:

  • NSEC_PER_SEC,每秒有多少纳秒。
  • USEC_PER_SEC,每秒有多少毫秒。(注意是指在纳秒的基础上)
  • NSEC_PER_USEC,每毫秒有多少纳秒。

1秒可以写成如下几种: 

  • 1 * NSEC_PER_SEC
  • 1000 * USEC_PER_SEC
  • USEC_PER_SEC * NSEC_PER_USEC

 

 

打印:

CMTimeShow(CMTime)//打印CMTime

 

相加:

  CMTime t3 = CMTimeAdd(t1, t2);

 

相减:

  CMTime t4 = CMTimeSubtract(t3, t1);

 

函数获取时间的秒数:

CMTimeGetSeconds(t1)

 

CMTimeRange是一个表示时间范围的一个数据类型:

  typedef struct{ 

  CMTime start; CMTime duration;

  } CMTimeRange;

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

  CMTimeRange timeRange1 = CMTimeRangeMake(t1, t2);

  CMTimeRange timeRange2 = CMTimeRangeFromTimeToTime(t4, t3);

CMTimeRange的交集和并集:

交叉时间范围

  CMTimeRange intersectionRange = CMTimeRangeGetIntersection(timeRange2, timeRange1);

总和时间范围

  CMTimeRange unionRange = CMTimeRangeGetUnion(timeRange1, timeRange2);

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值