Попытка понять 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, который является ясным