import type HlsTyp from 'hls.js'; import { stromStarten, stromBeenden, untertitelAdresse, fortschritt, type Stromauskunft, type Spurauskunft, } from './api'; import { dauer, knopf, meldung } from './util'; import { icons, icon } from './icons'; /* ---------- Was der Browser kann ---------- */ /** Fragt den Browser, statt es zu raten. * * **Vorher bekam er Apples Geräteprofil**, und das erlaubt HEVC, AC3 und * EAC3 — von denen Chrome keines öffnet. Der Server packte die Datei * pflichtschuldig in eine MP4 um, liess Bild und Ton aber unberührt, und * heraus kam eine tadellose Datei, mit der der Browser nichts anfangen * konnte. Genau das war „der Player funktioniert nicht". * * `canPlayType` antwortet mit `"probably"`, `"maybe"` oder `""`. Alles ausser * der leeren Zeichenkette zählt: `"maybe"` heisst „der Codec ist bekannt, über * das Profil sage ich nichts". * * **Und es zählt nur, wenn der MSE-Puffer mitgeht.** Gemessen in Chromium: * `canPlayType('audio/flac')` sagt „probably", `MediaSource.isTypeSupported` * derselben Zeichenkette sagt `false`. Ein Strom läuft über den Puffer, eine * durchgereichte Datei über das Element — und welcher der beiden Wege es * wird, entscheidet der Server erst danach. Also muss beides gehen. */ export function geraeteprofil(): { containers: string[]; videoCodecs: string[]; audioCodecs: string[]; } { const v = document.createElement('video'); const hatPuffer = typeof MediaSource !== 'undefined' && typeof MediaSource.isTypeSupported === 'function'; /** Ein Typ zählt nur, wenn **beide** Auskünfte ihn bestätigen. * * **Gemessen, und es ist der Grund für „kann die Spuren nicht öffnen".** * In Chromium sagt `canPlayType('audio/flac')` „probably", und * `MediaSource.isTypeSupported` derselben Zeichenkette sagt `false`. Für * MP3 in einer MP4 ebenso. Der Spieler weiss vorher nicht, auf welchem Weg * die Datei kommt — als fertige Datei im `