1) CMTimeMake(1,10)
significa duración de 1 segundo y escala de tiempo de 10, o 10 cuadros por segundo. ¿Esto significa 1s de duración de video con 10 cuadros?
2)
CMTime lastTime=CMTimeMake(1,10);
CMTime frameTime=CMTimeMake(1, 10);
CMTime currentTime=CMTimeAdd(lastTime, frameTime)
= (2, 10)?
¿2 segundos de video y con 10 cuadros por segundo del tiempo actual?
CMTimeMake(1, 48)
ejecutar un bloque de código cada 1/48 de un segundo bloque es decir, 1 por cuadroRespuestas:
1) en
CMTimeMake(1,10)
realidad significa un valor de 1 y una escala de tiempo de 10. Son un numerador y un denominador, por lo que es 1/10 de segundo, no 1 segundo.2) El resultado será como
CMTimeMake(2, 10)
, que es 2/10 de segundo.fuente
value/timescale = seconds
explícitamente.Peter tiene razón. El siguiente código aclara el concepto:
1)
El código anterior da: {3000/600 = 5.000}
Lo que significa una duración total de 5 segundos, con 3000 cuadros con una escala de tiempo de 600 cuadros por segundo.
2)
Este da {10000/600 = 16.667}
Lo que significa una duración total de 16.667 segundos, con 10.000 fotogramas con una escala de tiempo de 600 fotogramas por segundo.
Observe la diferencia entre CMTimeMake (valor int64_t, int32_t escala de tiempo) y CMTimeMakeWithSeconds (Float64 segundos, int32_t preferredTimeScale)
Espero que esta explicación ayude. Para más aclaraciones, no dude en publicar más preguntas en esta publicación.
fuente
setMaxRecordedDuration
necesita elpreferredTimeScale
cuándoframe_rate
está configurado de manera diferente. Todos usan ciegamente 600, y no hay una buena explicación de lo que está haciendo exactamente.Con
CMTimeMake(A, B)
usted almacena un número racional, una fracción deA / B
segundo exactaCMTimeMake(1, 4)
-> el intervalo de tiempo 0.25 segundosCon
CMTimeMakeWithSeconds(A, B)
usted almacenaA
segundos para una resolución deB
pasosCMTimeMakeWithSeconds(0.25, ...)
-> el intervalo de tiempo 0.25 segundosComúnmente ves
CMTimeMakeWithSeconds(time, NSEC_PER_SEC)
. ElNSEC_PER_SEC
efectivamente significa " resolución máxima ".fuente
Si solo quieres saber cómo hacer un intervalo durante 1 segundo (como yo), esta es tu respuesta:
fuente
Una estructura CMTime representa un
length of time that is stored as rational number.
CMTime que tiene un valor y un campo de escala de tiempo, y representa el valor de tiempo / segundos de escala de tiempo.Ver Ver esta respuesta SO que está clara
fuente