Ich habe kürzlich festgestellt, dass mehrere Videos auf meinem selbst gehosteten Discourse-Forum auf iPhone und iPad stillschweigend nicht abgespielt wurden. Nach Untersuchungen lag die Ursache darin, dass die Videos mit dem VP9-Codec in einem MP4-Container codiert waren – eine Kombination, die iOS Safari nicht abspielen kann.
Wie es dazu kommt
Facebook (und möglicherweise andere Plattformen) liefert manchmal VP9-codierte Videos aus, wenn Nutzer ihre Inhalte herunterladen. Wenn diese Dateien dann auf Discourse hochgeladen werden, werden sie problemlos akzeptiert – die Endung .mp4 gibt keinen Hinweis auf den enthaltenen Codec. Auf Desktop-Browsern und Android laufen die Videos einwandfrei, sodass das Problem unbemerkt bleibt. Auf iOS Safari wird zwar ein Vorschaubild und eine Wiedergabetaste angezeigt, aber beim Tippen erscheint nur ein rotierendes Symbol. Nutzer gehen meist davon aus, dass es sich um ein Netzwerkproblem handelt, und melden es nicht.
Warum es schwer zu erkennen ist
- Die Dateierweiterung (
.mp4) ist identisch mit einer funktionierenden H.264-Datei - Desktop-Browser unterstützen VP9, sodass Administratoren beim Testen auf dem Desktop kein Problem bemerken
- iOS-Nutzer melden einzelne Medienfehler oft nicht, besonders wenn andere Inhalte im selben Beitrag sichtbar und abspielbar sind
- Es gibt keine Warnung oder Fehlermeldung für Administratoren
Empfohlene Lösung
Beim Hochladen von Videos könnte Discourse den Videocodec prüfen (ffprobe ist bereits im Docker-Container verfügbar) und entweder:
- Das Hochladen ablehnen mit einer klaren Meldung, dass VP9 auf iOS nicht unterstützt wird, und den Nutzer auffordern, das Video erneut in H.264 zu konvertieren, oder
- Das Video automatisch in H.264 transkodieren, ähnlich wie einige Plattformen dies bei Uploads tun
Option 1 ist weniger aufwendig und würde bereits eine deutliche Verbesserung darstellen. Option 2 wäre ideal für ein nahtloses Nutzererlebnis.
Umgebung
- Selbst gehostetes Discourse in Docker, lokaler Speicher (kein S3)
- Discourse-Version: 2026.4.0-latest
- Apache Reverse-Proxy vor Discourse nginx
Workaround
Für Administratoren, die auf dieses Problem stoßen, besteht die Lösung darin:
- VP9-Dateien mit
ffprobezu identifizieren - Umwandlung in H.264 mit
ffmpeg -c:v libx264 -profile:v main -level 3.1 -r 30 -movflags +faststart - Aktualisierung von
sha1,urlundfilesizein der Tabelleuploads - Aktualisierung der
upload://-Kurz-URL-Tokens im Rohtext der betroffenen Beiträge - Neuberechnung der betroffenen Beiträge
Dies ist ein nicht unerheblicher manueller Prozess, den die meisten Forum-Administratoren nicht durchführen können.