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表示时间范围的持续时间。一般使用CMTimeRangeMake和CMTimeRangeFromTimeToTime创建如:
CMTimeRange timeRange1 = CMTimeRangeMake(t1, t2);
CMTimeRange timeRange2 = CMTimeRangeFromTimeToTime(t4, t3);
CMTimeRange的交集和并集:
交叉时间范围
CMTimeRange intersectionRange = CMTimeRangeGetIntersection(timeRange2, timeRange1);
总和时间范围
CMTimeRange unionRange = CMTimeRangeGetUnion(timeRange1, timeRange2);
相关推荐
在手机上选择上网的方式,根据自己和网络的要求选择
SwiftyLRC 将lrc文件解析为swift-tuple的实用程序,由(CMTime,String)构造安装简单地将“ SwiftyLRC.swift”拖放到当前工作区中如何使用SwiftyLRC. parse (lrc_content) // returns a LRCTuple instance, which ...
Windows Mobile手机中枚举拨号接入点
input for wince player
matlab代码中向量的点乘 title date tags 人脸追踪并给人脸打码 2021-03-25 opengl vision 高斯模糊 人脸追踪并实时打码 流程图 初始化视频输入流 ...CMTime(value: 1, timescale: 30) session.addInput
.duration { let seconds = CMTimeGetSeconds(duration) let time = CMTime(seconds: Float64(sender.value) * seconds, preferredTimescale: duration.timescale) player.fl_seekSmoothlyToTime(time) }}Reference
使用VB实现的红绿灯系统
轮转调度算法 短作业优先算法 动态优先级算法
多进程同步橘子苹果问题
磁盘调度算法 C语言