【发布时间】:2019-02-13 13:52:57
【问题描述】:
我希望 CMTime 为人类可读的字符串。
所以我找到了下面的代码。
extension CMTime {
var durationText:String {
let totalSeconds = CMTimeGetSeconds(self)
let hours:Int = Int(totalSeconds / 3600)
let minutes:Int = Int(totalSeconds.truncatingRemainder(dividingBy: 3600) / 60)
let seconds:Int = Int(totalSeconds.truncatingRemainder(dividingBy: 60))
if hours > 0 {
return String(format: "%i:%02i:%02i", hours, minutes, seconds)
} else {
return String(format: "%02i:%02i", minutes, seconds)
}
}
}
我有30 second 视频文件。它是CMTime,值为17945。
我希望这个 durationText 00:30.
但结果是00:29。
和其他视频文件一样。
我应该解决什么问题??
【问题讨论】:
-
您的 durationText 扩展为我返回
00:30。当我运行CMTime(value: 30, timescale: 1).durationText -
您的视频时长小于 30 秒。持续时间是
29.90833333333333你会期待什么?如果需要,您可以自己对结果进行四舍五入。seconds.rounded(.up) -
使用标准
rounded()可能更好,它使用.toNearestOrAwayFromZero舍入规则。 -
@LeoDabus 非常感谢。我修好了它。你随便回答。我选择你的答案。