1) CMTimeMake(1,10)
significa duração de 1 segundo e escala de tempo de 10 ou 10 quadros por segundo. Isso significa 1s de duração de vídeo com 10 quadros?
2)
CMTime lastTime=CMTimeMake(1,10);
CMTime frameTime=CMTimeMake(1, 10);
CMTime currentTime=CMTimeAdd(lastTime, frameTime)
= (2, 10)?
2 segundos de vídeo e com 10 quadros por segundo do currentTime?
CMTimeMake(1, 48)
para executar um bloco de código a cada 1/48 de segundo ou seja, 1 bloco por frameRespostas:
1)
CMTimeMake(1,10)
na verdade significa um valor de 1 e uma escala de tempo de 10. Eles são um numerador e um denominador; portanto, é 1/10 de segundo, não 1 segundo.2) O resultado será semelhante
CMTimeMake(2, 10)
, que é 2 / 10ths de segundo.fonte
value/timescale = seconds
explicitamente.Peter está certo. O código a seguir torna o conceito mais claro:
1)
O código acima fornece: {3000/600 = 5.000}
O que significa uma duração total de 5 segundos, com 3000 quadros com uma escala de tempo de 600 quadros por segundo.
2)
Este fornece {10000/600 = 16.667}
O que significa uma duração total de 16.667 segundos, com 10.000 quadros com uma escala de tempo de 600 quadros por segundo.
Observe a diferença entre CMTimeMake (valor int64_t, escala de tempo int32_t) e CMTimeMakeWithSeconds (Float64 segundos, int32_t preferidoTimeScale)
Espero que esta explicação ajude. Para mais esclarecimentos, não hesite em postar mais perguntas sobre este post.
fonte
setMaxRecordedDuration
precisa dopreferredTimeScale
quandoframe_rate
é definido de forma diferente. Todo mundo está cegamente usando 600, e não há uma boa explicação para exatamente o que está fazendo.Com
CMTimeMake(A, B)
você armazena um número racional, uma fração exata deA / B
segundosCMTimeMake(1, 4)
-> o intervalo de tempo 0,25 segundosCom
CMTimeMakeWithSeconds(A, B)
você armazenaA
segundos em uma resolução deB
etapasCMTimeMakeWithSeconds(0.25, ...)
-> o intervalo de tempo 0,25 segundosVocê costuma ver
CMTimeMakeWithSeconds(time, NSEC_PER_SEC)
. ONSEC_PER_SEC
significa efetivamente " resolução máxima ".fonte
Se você quer apenas saber como fazer um intervalo por 1 segundo (como eu), esta é sua resposta:
fonte
Uma estrutura CMTime representa um
length of time that is stored as rational number.
CMTime com um valor e um campo de escala de tempo e representa o valor de tempo / segundos da escala de tempo.Consulte Veja esta resposta SO que está clara
fonte