Establecer la velocidad a la que AVSampleBufferDisplayLayer procesa buffers de muestra

Estoy usando un AVSampleBufferDisplayLayer para mostrar CMSampleBuffers que están llegando a través de una conexión de red en el formato h.264. La reproducción de video es suave y funciona correctamente, sin embargo, parece que no puedo controlar la velocidad de fotogramas. Específicamente, si pongo en cola 60 cuadros por segundo en AVSampleBufferDisplayLayer, muestra esos 60 cuadros, aunque el video se esté grabando a 30 FPS.

Al crear buffers de muestra, es posible establecer la marca de tiempo de presentación pasando una matriz de información de temporización a CMSampleBufferCreate (la información de temporización no está presente en la secuencia h.264 pero se puede calcular o pasar en un formato de contenedor). Las marcas de tiempo de presentación que configuré tienen una separación de aproximadamente 0.033 segundos y la duración es de 0.033, pero la capa de visualización todavía muestra tantos fotogramas por segundo como puede.

Hay dos formas de poner en cola buffers en AVSampleBufferDisplayLayer: "restringido" llamando a - [AVSampleBufferDisplayLayer enqueueSampleBuffer:] cada vez que un búfer está listo, o "no restringido" llamando a - [AVSampleBufferDisplayLayer requestMediaDataWhenReadyOutQuequeando en el bloqueo de bloqueo de bloqueo de código de seguridad: He intentado ambos, pero incluso el segundo método muestra buffers tan rápido como puede; por ejemplo, si tengo 300 cuadros en cola en el lado receptor, entonces la primera vez que el bloque en el método anterior se ejecuta listo, ForMoreMediaData sigue siendo cierto, no importa cuántos los buffers se ponen en cola, y todos se muestran en muy poco tiempo.

Este comportamiento es similar a lo que cabría esperar si el archivo adjunto kCMSampleAttachmentKey_DisplayImmediately se configurara en el CMSampleBuffer, sin embargo, esto NO está configurado actualmente (y el valor predeterminado es falso).

Intenté configurar las capas controlTimeBase, pero no pareció tener ningún efecto. No puedo probar otras cosas y no pude encontrar ejemplos en línea. ¿Alguien sabe cómo se puede controlar la velocidad de fotogramas a la que AVSampleBufferDisplayLayer muestra fotogramas?

Respuestas a la pregunta(2)

Su respuesta a la pregunta