1) CMTimeMake(1,10)
signifie une durée de 1 seconde et une échelle de temps de 10 ou 10 images par seconde. Cela signifie une durée de vidéo de 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 du temps actuel?
1) CMTimeMake(1,10)
signifie en réalité une valeur de 1 et une échelle de temps de 10. Ils sont un numérateur et un dénominateur, il est donc de 1/10 de seconde et non de 1 seconde.
2) Le résultat sera comme CMTimeMake(2, 10)
, ce qui correspond à 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, échelle de temps int32_t) et CMTimeMakeWithSeconds (Float64 secondes, int32_t preferredTimeScale)
J'espère que cette explication aide. Pour plus de précisions, n'hésitez pas à poser d'autres questions sur ce post.
Avec CMTimeMake(A, B)
, vous stockez un nombre rationnel, une fraction exacte A / B
Secondes
CMTimeMake(1, 4)
-> l'intervalle de temps 0,25 secondeAvec CMTimeMakeWithSeconds(A, B)
, vous enregistrez A
secondes avec une résolution de B
étapes
CMTimeMakeWithSeconds(0.25, ...)
-> l'intervalle de temps 0,25 secondeVous voyez couramment CMTimeMakeWithSeconds(time, NSEC_PER_SEC)
. Le NSEC_PER_SEC
Signifie effectivement "résolution maximale".
Si vous voulez seulement savoir comment faire un intervalle pour 1 seconde (comme moi), voici votre réponse:
int seconds = 1;
CMTime interval = CMTimeMakeWithSeconds(seconds, NSEC_PER_SEC);
Une structure CMTime représente un 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 en secondes.