MPEGTS y HLS: solo el segundo segmento en adelante es válido

Cuando uso un diseño de canal de audio hexagonal en un contenedor mpegts, puedo recibir y reproducir la transmisión correctamente solo si configuro el servidor hls para permitir servir el primer segmento y luego concatenar los segmentos posteriores.

Es decir, si pruebo el segmento 1414:

[mpegts @ 0x7faf58001200] Could not find codec parameters for stream 1 (Audio: aac (LC) ([15][0][0][0] / 0x000F), 0 channels, fltp, 1464 kb/s): unspecified sample rate
Consider increasing the value for the 'analyzeduration' and 'probesize' options

Input #0, mpegts, from '1414.ts':
  Duration: 00:00:02.07, start: 2834.393367, bitrate: 9079 kb/s
  Program 1 
    Stream #0:0[0x100]: Audio: aac (LC) ([15][0][0][0] / 0x000F), 0 channels, fltp, 1430 kb/s
    Stream #0:1[0x101]: Audio: aac (LC) ([15][0][0][0] / 0x000F), 0 channels, fltp, 1464 kb/s
    Stream #0:2[0x102]: Video: h264 (High) ([27][0][0][0] / 0x001B), yuv420p(progressive), 1920x1080 [SAR 1:1 DAR 16:9], 59.94 fps, 59.94 tbr, 90k tbn, 119.88 tbc
    Stream #0:3[0x103]: Video: h264 (High) ([27][0][0][0] / 0x001B), yuv420p(progressive), 1920x1080 [SAR 1:1 DAR 16:9], 60 fps, 60 tbr, 90k tbn, 120 tbc

Sin embargo , si pruebo el primer segmento:

Input #0, mpegts, from '0.ts':
  Duration: 00:00:02.02, start: 1.412033, bitrate: 11598 kb/s
  Program 1 
    Stream #0:0[0x100]: Audio: aac (LC) ([15][0][0][0] / 0x000F), 48000 Hz, 16 channels, fltp, 1353 kb/s
    Stream #0:1[0x101]: Audio: aac (LC) ([15][0][0][0] / 0x000F), 48000 Hz, 16 channels, fltp, 744 kb/s
    Stream #0:2[0x102]: Video: h264 (High) ([27][0][0][0] / 0x001B), yuv420p(progressive), 1920x1080 [SAR 1:1 DAR 16:9], 59.94 fps, 59.94 tbr, 90k tbn, 119.88 tbc
    Stream #0:3[0x103]: Video: h264 (High) ([27][0][0][0] / 0x001B), yuv420p(progressive), 1920x1080 [SAR 1:1 DAR 16:9], 60 fps, 60 tbr, 90k tbn, 120 tbc

El archivo de la lista de reproducción es muy simple y se ve así:

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-TARGETDURATION:4

#EXTINF:2.000,
0.ts
#EXTINF:2.000,
1.ts
#EXTINF:2.000,
2.ts
#EXTINF:2.000,
3.ts
#EXTINF:2.000,

etc ...

Con, digamos, un diseño de 8 canales, esto no sucede... cada segmento contiene los encabezados correctos. Pero mi preferencia es mantener 16 canales porque mi aplicación en el extremo receptor usa archivos de 16 canales, y esto evita la necesidad de transcodificar al descargar.

Estoy usando FFmpeg para cargar el flujo de mpegts.

¿Alguna idea de la mecánica detrás de lo que está sucediendo aquí y qué puedo hacer para lograr la independencia deseada de los segmentos?

Respuestas (1)

Para diseños no convencionales, el codificador AAC nativo escribe una sección PCE en el encabezado del flujo de bits como parte de AudioSpecificConfig. Sin embargo, lo hace solo al principio, por lo tanto, los archivos posteriores tienen flujos AAC que faltan.

La solución consiste en cambiar a un esquema de paquetización diferente para AAC en MPEG-TS.

Agregar -hls_ts_options mpegts_flags=latmal generar el paquete HLS.

esto pareció solucionar el problema, gracias. (En mi caso lo usé -mpegts_flags latmdirectamente). ¿Hay alguna consecuencia no deseada que pueda surgir de esto? Tener una lectura a través de ANSI/SCTE 193-2 2014 sugiere que LATM es, de hecho, la encapsulación preferida de todos modos.
No todos los jugadores de HLS pueden aceptar AAC-LATM.