ObjectC/CMTime - конвертировать AVPlayer.duration в миллисекунды
Я создаю приложение для воспроизведения мелодии звонка, и я хочу знать текущее время в миллисекундах воспроизводимой мелодии звонка каждый раз.
CMTime cTime = player_.currentTime;
float currentTime = cTime.value/cTime.timescale;
Это currentTime здесь получает значение в секундах.
Как получить точное значение currentTime, но в миллисекундах?
Ответы
Ответ 1
Существует способ получить текущее время в секундах, вы можете принять 1000 раз, и у вас есть ваши милисекунды:
Float64 dur = CMTimeGetSeconds([player currentTime]);
Float64 durInMiliSec = 1000*dur;
К сожалению, вам придется использовать его как float
или Float64
, вы не можете использовать этот результат как CMTime
Ответ 2
Я думаю, что принятый ответ теряет детали. Более точный способ получить миллисекунды будет следующим:
let seconds : Double = Float64(time.value * 1000) / Float64(time.timescale)
Если вы сначала конвертируете в секунды, вы потеряете точность.
Ответ 3
CMTime.value и CMTime.timescale являются целыми числами, поэтому, судя по вашему коду, результат округляется, и вы не получаете точную метку времени. Вместо этого попробуйте использовать CMTimeGetSeconds.