Eine Hauptliste, damit auch AVPlayer die Untertitel findet

`index.m3u8` ist eine Medienliste: eine Reihe von Schnipseln, sonst
nichts. Dem Browser reicht das, weil er die Untertitel als eigene Spur
ans Videoelement gehängt bekommt. AVPlayer kann das nicht — dort gibt es
keinen Weg, einer laufenden Wiedergabe eine Textspur von aussen
beizulegen. Was er findet, findet er in der Abspielliste oder gar nicht.

Also eine Hauptliste: dieselbe Medienliste als Bildspur, daneben je eine
Textspur als eigene Liste mit genau einem Stück — unsere WebVTT-Datei
über den ganzen Rest des Films. Der Vorlauf der Sitzung hängt daran, denn
die Zeitstempel in der Datei zählen ab Dateianfang und der Strom ab null.

Für den Browser ändert sich nichts; er holt weiterhin `index.m3u8`. Eine
Direktwiedergabe bekommt keine Hauptliste: die Datei bringt ihre Spuren
selbst mit, und eine Liste darum herum wäre eine Hülle um nichts.

Vorarbeit für die App, die bisher auf eine fertig umgepackte MP4 wartet —
dreissig Sekunden, wo das Web nach einer anfängt.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Scarriffle
2026-10-10 14:17:47 +02:00
co-authored by Claude Opus 5
parent 912969d829
commit 4a5576f939
3 changed files with 345 additions and 0 deletions
@@ -770,6 +770,18 @@ public sealed record SpurAuskunft(int Index, string Label, string? Language, boo
public sealed record StreamResponse(
Guid SessionId,
string Url,
/// <summary>Dieselbe Wiedergabe als Hauptliste, mit Untertitelspuren.</summary>
///
/// <remarks>
/// <b>Für Abspieler, die ihre Untertitel aus HLS beziehen.</b> Der
/// Browser hängt sie als eigene Spur ans Videoelement und braucht nur
/// <see cref="Url"/>; AVPlayer kennt diesen Weg nicht — dort gibt es
/// keine Möglichkeit, einer laufenden Wiedergabe eine Textspur von
/// aussen beizulegen. Bei einer Direktwiedergabe steht hier nichts: dort
/// liegen die Spuren in der Datei selbst.
/// </remarks>
string? MasterUrl,
string Method,
double StartSeconds,
int? Height,