es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

CMTime: Establecer una frecuencia de cuadros personalizada para AVCaptureDevice.

Estoy utilizando AVFoundation para capturar una grabación de la cámara. Necesito grabar 1 cuadro cada 5 segundos. No sé cómo configurarlo usando CMTime.

if let frameSupportRange = captureDevice.activeFormat.videoSupportedFrameRateRanges.first {
    self.session.beginConfiguration()

    do {
        try captureDevice.lockForConfiguration()
        print("Establecer cuadro")
        captureDevice.activeVideoMinFrameDuration = CMTime(seconds: 4, preferredTimescale: 1)
        captureDevice.unlockForConfiguration()
    } catch {
        print("LockForConfiguration falló con el error: \(error.localizedDescription)")
    }

    self.session.commitConfiguration()
}

Cómo puedo manejar activeVideoMinFrameDuration y activeVideoMaxFrameDuration para configurar la velocidad de cuadro en 1 cuadro cada 5 segundos en AVCaptureDevice. No estoy seguro si es posible usando AVFoundation. Solo necesito que el archivo de video resultante tenga cuadros que se hayan tomado cada 5 segundos.

¿Cómo puedo hacerlo? Gracias de antemano.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para establecer la velocidad de fotogramas para grabar 1 fotograma cada 5 segundos utilizando AVFoundation, se deben ajustar las propiedades activeVideoMinFrameDuration y activeVideoMaxFrameDuration del objeto AVCaptureDevice. La propiedad activeVideoMinFrameDuration debe establecerse con un valor de CMTime que represente el intervalo deseado entre fotogramas, en este caso serían 5 segundos. Aquí tienes un ejemplo de código para lograr esto:

    if let frameSupportRange = captureDevice.activeFormat.videoSupportedFrameRateRanges.first {
        self.session.beginConfiguration()
    
        do {
            try captureDevice.lockForConfiguration()
    
            let frameInterval = 5.0 // 1 fotograma cada 5 segundos
            let frameDuration = CMTimeMakeWithSeconds(frameInterval, preferredTimescale: Int32(NSEC_PER_SEC))
            captureDevice.activeVideoMinFrameDuration = frameDuration
            captureDevice.activeVideoMaxFrameDuration = frameDuration
    
            print("Se estableció la velocidad de fotogramas")
            captureDevice.unlockForConfiguration()
        } catch {
            print("LockForConfiguration falló con el error: \(error.localizedDescription)")
        }
    
        self.session.commitConfiguration()
    }
    

    Al establecer tanto activeVideoMinFrameDuration como activeVideoMaxFrameDuration con el mismo valor, la velocidad de fotogramas será fija en un fotograma cada 5 segundos. Cuando se grabe el vídeo, el archivo resultante contendrá fotogramas capturados con este intervalo.

Comments are closed.