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 1s durée de 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 avec 10 images par seconde de l'heure actuelle?
CMTimeMake(1, 48)
d'exécuter un bloc de code tous les 1/48 de seconde soit 1 bloc par imageRéponses:
1)
CMTimeMake(1,10)
signifie en fait une valeur de 1 et une échelle de temps de 10. Ils sont un numérateur et un dénominateur, donc c'est 1/10 de seconde, pas 1 seconde.2) Le résultat sera comme
CMTimeMake(2, 10)
, qui est de 2 / 10ème de seconde.la source
value/timescale = seconds
explicitement.Peter a raison. Le code suivant rend le concept plus clair:
1)
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)
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 preferTimeScale)
J'espère que cette explication vous aidera. Pour plus de précisions, n'hésitez pas à poster d'autres questions sur ce post.
la source
setMaxRecordedDuration
besoinspreferredTimeScale
quandframe_rate
sont définis différemment. Tout le monde utilise aveuglément 600, et aucune bonne explication quant à ce qu'il fait exactement.Avec
CMTimeMake(A, B)
vous stockez un nombre rationnel, une fraction deA / B
seconde exacteCMTimeMake(1, 4)
-> l'intervalle de temps 0,25 secondeAvec
CMTimeMakeWithSeconds(A, B)
vous stockez desA
secondes à une résolution d'B
étapesCMTimeMakeWithSeconds(0.25, ...)
-> l'intervalle de temps 0,25 secondeVous voyez souvent
CMTimeMakeWithSeconds(time, NSEC_PER_SEC)
. LeNSEC_PER_SEC
signifie effectivement " résolution maximale ".la source
Si vous voulez seulement savoir comment faire un intervalle d' une seconde (comme moi), voici votre réponse:
la source
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 / les secondes de l'échelle de temps.Voir Voir cette réponse SO qui est claire
la source