Obtenga PTS de mdat H264 sin procesar generado por iOS AVAssetWriter

Estoy tratando de leer y escribir simultáneamente el archivo H.264 mov escrito por AVAssetWriter. Logré extraer unidades NAL individuales, empaquetarlas en los paquetes AV de ffmpeg y escribirlas en otro formato de video usando ffmpeg. Funciona y el archivo resultante se reproduce bien, excepto que la velocidad de reproducción no es la correcta. ¿Cómo calculo los valores correctos de PTS / DTS a partir de datos en bruto H.264? ¿O tal vez existe alguna otra forma de conseguirlos?

Esto es lo que he intentado:

Limite la velocidad de fotogramas mínima / máxima de captura a 30 y suponga que el archivo de salida será de 30 fps. De hecho, sus fps son siempre menores que los valores que establezco. Y también, creo que los fps no son constantes de paquete a paquete.

Recuerde la marca de tiempo de presentación de cada muestra escrita y suponga que las muestras se asignan de uno a uno a las NALU y aplican la marca de tiempo guardada al paquete de salida. Esto no funciona.

Poniendo PTS a 0 o AV_NOPTS_VALUE. No funciona

De googlear sobre esto, entiendo que los datos en bruto H.264 generalmente no contienen ninguna información de tiempo. A veces puede tener alguna información de tiempo dentro de SEI, pero los archivos que utilizo no la tienen. Por otro lado, hay algunas aplicaciones que hacen exactamente lo que estoy tratando de hacer, así que supongo que es posible de alguna manera.

Respuestas a la pregunta(1)

Su respuesta a la pregunta