En essayant de comprendre CMTime et CMTimeMake
1) CMTimeMake(1,10)
signifie une durée de 1 seconde et l'échelle de temps de 10 ou 10 images par seconde. Cela signifie 1s 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 avec 10 images par seconde de la currentTime?
- si votre vidéo est de 48 FPS (frame par seconde), alors vous pouvez facilement faire
CMTimeMake(1, 48)
pour exécuter un bloc de code à chaque 1/48 d'un deuxième c'est à dire 1 bloc par bloc
Vous devez vous connecter pour publier un commentaire.
1)
CMTimeMake(1,10)
signifie, en réalité, d'une valeur de 1 et une échelle de temps de 10. Ils sont un numérateur et le dénominateur, de sorte qu'il est de 1/10 de seconde, pas 1 seconde.2) Le résultat sera comme
CMTimeMake(2, 10)
, qui est de 2/10ème de seconde.value/timescale = seconds
explicitement.Pierre est à droite.
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 plus de 3000 cadres avec un délai de 600 images par seconde.
2)
Celui-ci donne {10000/600 = 16.667 pour}
Ce qui signifie une durée totale de 16.667 pour les secondes, avec 10000 images avec un délai de 600 images par seconde.
Avis la différence entre CMTimeMake(int64_t valeur, int32_t échelle de temps)
et CMTimeMakeWithSeconds(Float64 secondes, int32_t preferredTimeScale)
Espérons que cette explication permet de. Pour plus de précisions, n'hésitez pas à poster d'autres questions sur ce post.
setMaxRecordedDuration
besoins de lapreferredTimeScale
quandframe_rate
est défini différemment. Tout le monde est juste aveuglément à l'aide de 600, et pas de bonne explication pour exactement ce qu'il fait.Avec
CMTimeMake(A, B)
vous stockez un nombre rationnel, une fraction exacteA /B
secondesCMTimeMake(1, 4)
-> l'intervalle de temps de 0,25 secondesAvec
CMTimeMakeWithSeconds(A, B)
vous stockezA
secondes à une résolution deB
étapesCMTimeMakeWithSeconds(0.25, ...)
-> l'intervalle de temps de 0,25 secondesVous avez l'habitude de voir
CMTimeMakeWithSeconds(time, NSEC_PER_SEC)
. LeNSEC_PER_SEC
signifie effectivement "max résolution".Si vous voulez savoir comment faire un intervalle de 1 seconde (comme moi), c'est votre réponse:
Un CMTime struct représente un
length of time that is stored as rational number.
CMTime a une valeur et une échelle de temps le terrain, et représente la valeur de l'heure/calendrier secondes .Voir Voir cette SORTE de Réponse qui est claire