1) CMTimeMake(1,10)
signifie la durée de 1 seconde et l’échelle de temps de 10 ou 10 images par seconde. Cela signifie 1 durée de la vidéo avec 10 images?
2)
CMTime lastTime=CMTimeMake(1,10); CMTime frameTime=CMTimeMake(1, 10); CMTime currentTime=CMTimeAdd(lastTime, frameTime)
= (2, 10)?
2 secondes de vidéo et 10 images par seconde de currentTime?
1) CMTimeMake(1,10)
signifie en fait une valeur de 1 et une échelle de temps de 10. Il s’agit d’un numérateur et d’un dénominateur, soit 1/10 de seconde et non 1 seconde.
2) Le résultat sera comme CMTimeMake(2, 10)
, soit 2 / 10ème de seconde.
Peter a raison. Le code suivant rend le concept plus clair:
1)
Float64 seconds = 5; int32_t preferredTimeScale = 600; CMTime inTime = CMTimeMakeWithSeconds(seconds, preferredTimeScale); CMTimeShow(inTime);
Le code ci-dessus donne: {3000/600 = 5.000}
Ce qui signifie une durée totale de 5 secondes, avec 3000 images avec une échelle de temps de 600 images par seconde.
2)
int64_t value = 10000; int32_t preferredTimeScale = 600; CMTime inTime = CMTimeMake(value, preferredTimeScale); CMTimeShow(inTime);
Celui-ci donne {10000/600 = 16.667}
Ce qui signifie une durée totale de 16,667 secondes, avec 10000 images avec une échelle de temps de 600 images par seconde.
Notez la différence entre CMTimeMake (valeur int64_t, int32_t timescale) et CMTimeMakeWithSeconds (Float64 secondes, int32_t preferredTimeScale)
J’espère que cette explication vous aidera. Pour plus de précisions, n’hésitez pas à poster d’autres questions sur ce post.
Avec CMTimeMake(A, B)
vous stockez un nombre rationnel, une fraction exacte de secondes A / B
CMTimeMake(1, 4)
-> l’intervalle de temps de 0,25 secondes Avec CMTimeMakeWithSeconds(A, B)
vous stockez A
secondes à une résolution de pas B
CMTimeMakeWithSeconds(0.25, ...)
-> l’intervalle de temps de 0,25 secondes Vous voyez généralement CMTimeMakeWithSeconds(time, NSEC_PER_SEC)
. NSEC_PER_SEC
signifie effectivement ” résolution maximale “.
Une structure CMTime représente une length of time that is stored as rational number.
CMTime a une valeur et un champ d’échelle de temps et représente la valeur de temps / échelle de temps secondes.
Voir Voir cette réponse SO qui est claire
Si vous voulez seulement savoir comment faire un intervalle d’ une seconde (comme moi), voici votre réponse:
int seconds = 1; CMTime interval = CMTimeMakeWithSeconds(seconds, NSEC_PER_SEC);