Das Gerät war da, die VA-Anzeige dahinter nicht

ffmpeg endete mit 234. No VA display found for device
    /dev/dri/renderD128. Device creation failed: -22.

Hier stand `File.Exists("/dev/dri/renderD128")`, und das war keine
Prüfung, sondern eine Vermutung. Auf dem NAS liegt das Gerät
durchgereicht da — eine VA-Anzeige steht nicht dahinter. ffmpeg bricht
dann schon an der globalen Option ab, vor dem ersten Bild, und für den
Zuschauer sieht das aus wie ein kaputter Server: HTTP 500 auf die
Abspielliste, „Die Wiedergabe wurde unterbrochen".

Jetzt wird ffmpeg einmal je Lauf wirklich gefragt: ein Bild aus dem
Nichts, nirgendwohin, mit Frist. Geht die Zeile vor dem ersten Bild nicht
durch, läuft es in Software weiter — langsamer, aber es läuft.
FLARO_HWACCEL=vaapi überspringt die Probe für den, der es ausdrücklich
verlangt.

Dazu, aus derselben Gegend: in der Hauptliste stehen nur Untertitelspuren,
die jetzt sofort abholbar sind. Sie werden beim ersten Bedarf aus der
Datei gezogen, und bei einem Dreistünder dauert das Minuten. Der Browser
verträgt das — er fragt die Spur einzeln an und wartet. AVPlayer bricht
daran die ganze Wiedergabe ab, nicht bloss den Untertitel. Das Füllen
läuft beim Anlegen der Sitzung schon an; beim nächsten Abspielen stehen
sie drin.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Scarriffle
2026-10-10 19:59:49 +02:00
co-authored by Claude Opus 5
parent 34ade18ed6
commit b88e58d5eb
4 changed files with 122 additions and 8 deletions
+19
View File
@@ -137,6 +137,25 @@ public sealed class Untertitelvorrat(
if (offen > 0) log.LogInformation("Untertitel: {Anzahl} Datei(en) werden im Hintergrund gelesen.", offen);
}
/// <summary>Ob diese Spur jetzt sofort ausgeliefert werden kann.</summary>
///
/// <remarks>
/// <b>Ohne zu warten und ohne anzustossen.</b> Für die HLS-Hauptliste:
/// was dort steht, muss ein Spieler in dem Augenblick abholen können, in
/// dem er es liest. AVPlayer nimmt ein „gleich" nicht an — eine Spur,
/// die beim Abruf noch nicht da ist, lässt ihn die ganze Wiedergabe
/// abbrechen, nicht bloss den Untertitel.
///
/// <b>Eine leere Datei zählt nicht.</b> Sie ist das Ergebnis „diese Spur
/// hat keinen Text"; sie anzubieten wäre ein Menüeintrag, der zu nichts
/// führt.
/// </remarks>
public bool Liegtvor(Guid dateiId, DateTimeOffset geaendert, int spur)
{
var ziel = Pfad(dateiId, geaendert, spur);
return File.Exists(ziel) && new FileInfo(ziel).Length > 0;
}
/// <summary>Holt eine Spur — und wartet dabei höchstens <paramref name="geduld"/>.</summary>
///
/// <remarks>