I want CMTime to String an human readable.
So I Found below code.
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)
}
}
}
And I Have 30 second video files. It's CMTime value is 17945.
I expect this durationText 00:30.
But result is 00:29.
And other video files same.
What Should I fix??
You need to round your seconds before calculating your time components.
Testing all the possible edge rounding cases: