iOS开发:如何将Date().timeIntervalSince1970生成的Int64转为CMTime?
将Unix时间戳转换为CMTime格式
Date().timeIntervalSince1970返回的是自1970年1月1日00:00:00 UTC以来的秒数(带小数),要转成Core Media框架的CMTime格式,核心是利用CMTime的value和timescale两个参数构建实例,下面是具体实现方式:
基础转换方法(AVFoundation推荐方案)
AVFoundation通常使用600作为标准时间刻度(timescale),兼顾精度和性能,代码如下:
import CoreMedia // 获取你的Unix时间戳 let unixTimestamp = Date().timeIntervalSince1970 // 定义时间刻度(AVFoundation常用600) let timescale = CMTimeScale(600) // 计算CMTime的value:将秒数乘以刻度,转换为Int64类型 let timeValue = Int64(unixTimestamp * Double(timescale)) // 生成CMTime实例 let targetCMTime = CMTime(value: timeValue, timescale: timescale)
自定义精度的转换
如果需要不同精度(比如毫秒级),只需调整timescale的值即可:
- 毫秒精度:设置
timescale = 1000,此时timeValue就是时间戳对应的毫秒数
import CoreMedia let unixTimestamp = Date().timeIntervalSince1970 let timescale = CMTimeScale(1000) // 毫秒级刻度 let timeValue = Int64(unixTimestamp * Double(timescale)) let targetCMTime = CMTime(value: timeValue, timescale: timescale)
注意事项
timescale必须是正整数,避免设置过大导致timeValue超出Int64的范围(极端大的刻度会让数值溢出)- 若要将转换后的
CMTime转回Unix时间戳,直接调用CMTimeGetSeconds(targetCMTime)即可得到秒数,与原始时间戳一致
内容的提问来源于stack exchange,提问作者normidar
相关产品推荐
相关产品推荐

