Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add #EXT-X-DISCONTINUITY support e.g. when encoder cubes restarts #6

Open
saerdnaer opened this issue Mar 30, 2024 · 1 comment
Open

Comments

@saerdnaer
Copy link
Member

saerdnaer commented Mar 30, 2024

Wenn das Internet wackelt oder der Encoder kurz vor Beginn eines Vortrag neu gestartet wird kommt der Relive Player aber auch VLC leider etwas durcheinander.

https://stackoverflow.com/a/51107435

ffmpeg fails with "Non monotuonous DTS" because it tries to forcefully merge streams which dont have the exact same framerate or so (see https://superuser.com/questions/1150276/trim-video-and-concatenate-using-ffmpeg-getting-non-monotonous-dts-in-output for a more detailed explanation).

and since there is currently no option to tell ffmpeg to NOT merge streams separated by #EXT-X-DISCONTINUITY in m3u8, the only possibility is to manually split the m3u8 in several pieces. where you see the #EXT-X-DISCONTINUITY tags. then (after making these pieces valid m3u8 singleton) feed them all to ffmpeg.

Notfalls kann man sich das über dem Relive Player verlinked remuxed.mp4 per ffmpeg reparieren, aber nachhaltig wäre sich mal die Patches die in ffmpeg dazu rumschwirren sich mal genauer anzuschauen und das #EXT-X-DISCONTINUITY aus dem Origin mit ins relive recording zu übernehmen:
https://trac.ffmpeg.org/ticket/5419

@saerdnaer saerdnaer changed the title Add #EXT-X-DISCONTINUITY support, when encoder cubes restart Add #EXT-X-DISCONTINUITY support e.g. when encoder cubes restarts Mar 30, 2024
@florolf
Copy link
Member

florolf commented Mar 30, 2024

Bitte beschreib mal was eigentlich das Szenario ist in dem Probleme (welche genau?) auftreten. Verstehe ich es richtig dass die Quelle hier HLS ist und nicht ein Icecast o.Ä.?

In diesem Fall: https://github.com/voc/hls-relive/blob/master/hls-relive/record.pl tut das alles (discontinuity on start, discontinuity vom Upstream übernehmen) schon. Das HLS-Recording ist genau so gut oder schlecht wie der Upstream. Das wird inzwischen aber wahrscheinlich gar nicht mehr benutzt weil alle recording-Prozesse ihre Quelle (im Gegensatz zu früher wo das am gleichen Ort wie der nginx-rtmp HLS writer lief) remote haben. Eine denkbare Lösung wäre das Script mal mit HTTP/Polling-Support aufzubohren.

Alternativ scheint https://github.com/voc/hls-relive/blob/master/hls-relive/record_icedist.sh#L11 (analog record_hls.sh) zumindest on start ein #EXT-X-DISCONTINUITY anzulegen.

Ich nehme an aktuell wird record_hls.sh benutzt? Das setzt das gleiche Flag für eine Discontinuity beim Resumen und wenn ich den ffmpeg-Quellcode richtig querlese sollte eine Discontinuity im HLS-Upstream auch eine im Output erzeugen. Das die verlinkten Probleme beziehen sich darauf dass ffmpeg sich irgendwo beim Transcoden verschluckt, aber eigentlich müsste man für einen reinen HLS-Download nix transcoden. (remuxed.mp4 mal aussen vor). Ob ffmpeg trotzdem versucht irgendwelche Timestamps zu parsen und sich dann verhaspelt weiss ich nicht. Genau so wenig ob man es ihm austreiben kann.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants