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.