J'ai vu quelques exemplessurCMTime (trois liens distincts), mais je ne comprends toujours pas. J'utilise un AVCaptureSession avec AVCaptureVideoDataOutput et je veux définir la fréquence d'images maximale et minimale de la sortie. Mon problème est que je ne comprends tout simplement pas la structure CMTime.
Apparemment, CMTimeMake (valeur, timeScale) devrait me donner des trames de valeur toutes les 1/timeScale secondes pour un total de value/timeScale secondes, ou est-ce que je me trompe?
Pourquoi cela n'est-il documenté nulle part afin d'expliquer ce que cela fait?
Si cela fonctionne vraiment comme ça, comment pourrais-je obtenir un nombre indéfini d'images?
Si c'est vraiment simple, je suis désolé, mais rien n'a encore cliqué.
Une structure CMTime
représente une durée qui est stockée sous forme de nombre rationnel (voir Référence CMTime ). CMTime
a un champ value
et un champ timescale
et représente l'heure value/timescale seconds
.
CMTimeMake
est une fonction qui renvoie une structure CMTime
, par exemple:
CMTime t1 = CMTimeMake(1, 10); // 1/10 second = 0.1 second
CMTime t2 = CMTimeMake(2, 1); // 2 seconds
CMTime t3 = CMTimeMake(3, 4); // 3/4 second = 0.75 second
CMTime t4 = CMTimeMake(6, 8); // 6/8 second = 0.75 second
Les deux dernières valeurs de temps t3
et t4
représente la même valeur de temps, donc
CMTimeCompare(t3, t4) == 0
Si vous définissez le videoMinFrameDuration
d'un AVCaptureSession
is ne fait pas de différence si vous définissez
connection.videoMinFrameDuration = CMTimeMake(1, 20); // or
connection.videoMinFrameDuration = CMTimeMake(2, 40);
Dans les deux cas, l'intervalle de temps minimum entre les images est défini sur 1/20 = 0,05 seconde.