いくつかの 例ofCMTime (3つの個別のリンク)を見ましたが、それでもわかりません。 AVCaptureVideoDataOutputでAVCaptureSessionを使用していますが、出力の最大および最小フレームレートを設定したいです。私の問題は、CMTime構造体を理解していないだけです。
どうやらCMTimeMake(value、timeScale)はvalue/timeScale秒の合計で1/timeScale秒ごとに値フレームを提供しますか、それとも間違っていますか?
これが何をするのかを説明するために、なぜこれがどこにも文書化されていないのですか?
それが本当にそのように機能する場合、どのようにしてフレーム数を無制限にすることができますか?
本当に簡単な場合は、すみませんが、まだ何もクリックされていません。
CMTime
構造体は、有理数として保存される時間の長さを表します( CMTimeリファレンス を参照)。 CMTime
にはvalue
フィールドとtimescale
フィールドがあり、時間を表しますvalue/timescale seconds
。
CMTimeMake
は、CMTime
構造体を返す関数です。次に例を示します。
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
最後の2つの時間値t3
およびt4
は同じ時間値を表すため、
CMTimeCompare(t3, t4) == 0
videoMinFrameDuration
のAVCaptureSession
を設定した場合、設定しても違いはありません
connection.videoMinFrameDuration = CMTimeMake(1, 20); // or
connection.videoMinFrameDuration = CMTimeMake(2, 40);
どちらの場合も、フレーム間の最小時間間隔は1/20 = 0.05秒に設定されます。