Estoy intentando leer y escribir archivos MOV H.264 escrito por AVAssetWriter simultáneamente. Logré extraer unidades NAL individuales, empacarlas en los AVPackets de ffmpeg y escribirlas en otro formato de video usando ffmpeg. Funciona y el archivo resultante funciona bien, excepto que la velocidad de reproducción no es correcta. ¿Cómo calculo los valores correctos de PTS/DTS a partir de datos H.264 sin procesar? ¿O tal vez exista alguna otra forma de obtenerlos?Obtener PTS de mdat H264 prima generada por el IOS AVAssetWriter
Aquí es lo que he intentado:
límite de captura min velocidad de fotogramas/max a 30 y asumen que el archivo de salida será de 30 fps. De hecho, su fps es siempre menor que los valores que establezco. Y también, creo que el fps no es constante de un paquete a otro.
Recuerde la marca de tiempo de presentación de cada muestra escrita y asuma que las muestras se correlacionan uno a uno con NALU y aplican la marca de tiempo guardada para generar el paquete. Esto no funciona
Configuración STP a 0 o AV_NOPTS_VALUE. No funciona
De googlear de ello entiendo que los datos H.264 prima por lo general no contienen ninguna información de temporización. A veces puede tener alguna información de sincronización dentro de SEI, pero los archivos que uso no la tienen. Por otro lado, hay algunas aplicaciones que hacen exactamente lo que intento hacer, así que supongo que es posible de alguna manera.
También estoy tratando de leer de forma simultánea H.264 desde un archivo mov escrito por AVAssetWriter, y no podía llegar a hacerlo utilizando tubos/lectura de archivos normal. ¿Cómo se las arregló para leerlo mientras se está escribiendo? ¡Gracias! –
Utilice la lectura regular de archivos, pero en lugar de detenerse en EOF relea nuevamente. Tarde o temprano su operación de lectura tendrá éxito. – kolyuchiy
@kolyuchiy: las fuentes de envío hacen un mejor uso del sistema. Configure una fuente de lectura en el descriptor FILE. Se llamará a un bloque cuando haya datos para leer. Si ocurre EOF, simplemente borre el error en su ARCHIVO. –