MPEGTS & HLS: Erst ab dem zweiten Segment ist gültig

Wenn ich das hexadekagonale Audiokanal-Layout in einem MPEGTS-Container verwende, kann ich den Stream nur dann gut empfangen und wiedergeben, wenn ich den hls-Server so konfiguriere, dass er das allererste Segment bedienen und dann nachfolgende Segmente verketten kann.

Dh wenn ich Segment 1414 sondiere:

[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

Wenn ich jedoch das erste Segment untersuche:

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

Die Playlist-Datei ist sehr einfach und sieht so aus:

#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 ...

Bei beispielsweise einem 8-Kanal-Layout passiert dies nicht. Jedes Segment enthält die richtigen Header. Aber ich bevorzuge es, 16 Kanäle beizubehalten, da meine Anwendung auf der Empfängerseite 16 Kanaldateien verwendet und dies die Notwendigkeit einer Transcodierung beim Herunterladen vermeidet.

Ich verwende FFmpeg, um den MPEGS-Stream hochzuladen.

Irgendwelche Einblicke in die Mechanik hinter dem, was hier vor sich geht, und was ich tun kann, um die gewünschte Unabhängigkeit der Segmente zu erreichen?

Antworten (1)

Bei nicht konventionellen Layouts schreibt der native AAC-Encoder einen PCE-Abschnitt in den Bitstream-Header als Teil der AudioSpecificConfig. Dies geschieht jedoch nur am Anfang, daher fehlen in nachfolgenden Dateien AAC-Streams.

Die Problemumgehung besteht darin, zu einem anderen Paketierungsschema für AAC in MPEG-TS zu wechseln.

-hls_ts_options mpegts_flags=latmBeim Generieren des HLS-Pakets hinzufügen .

Dies schien das Problem zu beheben, danke. (In meinem Fall habe ich -mpegts_flags latmdirekt verwendet). Gibt es irgendwelche unbeabsichtigten Folgen, die daraus entstehen können? Das Durchlesen von ANSI/SCTE 193-2 2014 legt nahe, dass LATM ohnehin die bevorzugte Kapselung ist.
Möglicherweise akzeptieren nicht alle HLS-Spieler AAC-LATM.