Essayer de comprendre CMTime

J'ai vu quelques exemples de CMTime (trois liens séparés), mais je ne comprends toujours pas. J'utilise une 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 pas la structure CMTime.

Apparemment, CMTimeMake (value, timeScale) devrait me donner des frameworks de valeurs 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 pour expliquer ce que cela fait?

Si cela fonctionne vraiment comme ça, comment pourrais-je get un nombre indéfini de frameworks?

Si c'est vraiment simple, je suis désolé, mais rien n'a encore cliqué.

    Une structure CMTime représente une durée stockée sous la forme d'un nombre rationnel (voir Référence CMTime ). CMTime a une value et un champ d' timescale , et représente la 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 time t3 et t4 représentent la même valeur de time, donc

     CMTimeCompare(t3, t4) == 0 

    Si vous définissez le videoMinFrameDuration d'une AVCaptureSession cela 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 time minimum entre les trames est de 1/20 = 0,05 secondes.