goalC / CMTime - конвертировать AVPlayer.duration в миллисекунды - PullRequest
18 голосов
/ 11 мая 2011

Я создаю приложение для воспроизведения мелодии звонка, и мне бы хотелось знать текущее время в миллисекундах воспроизводимой мелодии звонка каждый раз.

CMTime cTime = player_.currentTime;float currentTime = cTime.value / cTime.timescale;

Этот currentTime здесь получает значение в секундах.Как я могу получить точное значение currentTime, но в миллисекундах?

Ответы [ 3 ]

56 голосов
/ 11 июля 2011

Существует способ получить текущее время в секундах, вы можете взять в 1000 раз больше, и у вас есть ваши миллисекунды:

Float64 dur = CMTimeGetSeconds([player currentTime]);
Float64 durInMiliSec = 1000*dur;

К сожалению, вам придется использовать его как float или Float64, вы не можете использовать этот результат как CMTime

6 голосов
/ 02 декабря 2015

Я думаю, что принятый ответ теряет детализацию.Более точный способ получить миллисекунды будет следующим:

let seconds : Double = Float64(time.value * 1000) / Float64(time.timescale)

Если вы преобразуетесь в секунды, вы потеряете точность.

2 голосов
/ 12 мая 2011

CMTime.value и CMTime.timescale оба являются целыми числами, поэтому, судя по вашему коду, результат округляется, и вы не получаете точную метку времени.Вместо этого попробуйте CMTimeGetSeconds.

...