Попытка понять CMTime и CMTimeMake

1) CMTimeMake(1,10) означает продолжительность 1 секунды и временную шкалу 10 или 10 кадров в секунду. Это означает, что продолжительность видео длится 1 сек с 10 кадрами?

2)

CMTime lastTime=CMTimeMake(1,10);
CMTime frameTime=CMTimeMake(1, 10);
CMTime currentTime=CMTimeAdd(lastTime, frameTime)

= (2, 10)?

2 секунды видео и 10 кадров в секунду текущего времени?

Ответ 1

1) CMTimeMake(1,10) на самом деле означает значение 1 и временную шкалу 10. Они являются числителем и знаменателем, поэтому он составляет 1/10 секунды, а не 1 секунду.

2) Результат будет как CMTimeMake(2, 10), который составляет 2/10 секунды.

Ответ 2

Питер прав. Следующий код делает концепцию более понятной:

1)

Float64 seconds = 5; 
int32_t preferredTimeScale = 600;
CMTime inTime = CMTimeMakeWithSeconds(seconds, preferredTimeScale);
CMTimeShow(inTime);

Приведенный выше код дает: {3000/600 = 5.000}

Это означает, что общая продолжительность составляет 5 секунд, с 3000 кадрами с временным интервалом 600 кадров в секунду.

2)

int64_t value = 10000;
int32_t preferredTimeScale = 600;
CMTime inTime = CMTimeMake(value, preferredTimeScale);
CMTimeShow(inTime);

Это дает {10000/600 = 16.667}

Это означает, что общая длительность 16,667 секунд, с 10000 кадрами со шкалой 600 кадров в секунду.

Обратите внимание на разницу между CMTimeMake (значение int64_t, int32_t timescale) и CMTimeMakeWithSeconds (Float64 секунды, int32_t preferredTimeScale)

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

Ответ 3

С CMTimeMake(A, B) вы храните рациональное число, точную долю A / B секунды

  • CMTimeMake(1, 4) → интервал времени 0,25 секунд

С CMTimeMakeWithSeconds(A, B) вы сохраняете A секунды до разрешения B шагов

  • CMTimeMakeWithSeconds(0.25, ...) → интервал времени 0,25 секунд

Вы обычно видите CMTimeMakeWithSeconds(time, NSEC_PER_SEC). Эффект NSEC_PER_SEC означает "максимальное разрешение".

Ответ 4

Структура CMTime представляет собой length of time that is stored as rational number. CMTime имеет значение и поле временной шкалы и представляет значение времени/временные интервалы.

См. См. этот ответ SO, который является ясным