Hallo zusammen,
ich nutze selbst ein paar Patches, die vielleicht für den einen oder anderen von euch von Interesse sein könnten. Markus hat vorgeschlagen, solche Patches hier im Forum in jeweils einem Thread kurz vorzustellen und euer Votum einzuholen, ob sie ins Git sollen:
- 0014 Streaming of recordings into browser.zip
(originaler Entwurf mit statischer Player-Größe, aber ohne die anderen Goodies) - 0014g Streaming of recordings into browser.zip
(mit responsiver Player-Größe und überarbeitetem Setup)
Der Patch für das Streamen von Aufzeichnungen im Web-Browser basiert auf dem gleichen Ansatz wie das Streamen von Sendungen im Browser. Über die ID einer Aufzeichnung, die im gelben Streamen-Knopf (2. v. l.) hinterlegt ist:
… liefert der StreamDev-Server den TS-Datenstrom, der für den Clappr-Player in einen HLS-Datenstrom (m3u8) konvertiert wird:
Wie beim Streamen von Kanälen, kann man per Auswahlliste direkt eine andere Aufzeichnung für die Wiedergabe wählen:
… oder die Links benutzen, um zur davor liegenden bzw. zu nächsten Aufzeichnung zu wechseln. Die Statusleiste unterhalb des Players liefert die gleichen Daten wie eine vorhandene Aufnahme in der Programmübersicht, was die Hover- und Detailinformationen mit einschließt. Die Darstellung der Statusleiste unterhalb des Players habe ich für das Streamen von Aufzeichnungen und Kanälen etwas übersichtlicher gestaltet:
Damit das Ganze funktioniert, muss man für die Konversion nach HLS den Datenstrom begrenzen. Andernfalls wandelt ffmpeg die Aufzeichnung schneller, als der Player sie abrufen kann. Für den HLS-Datenstrom wird im Verzeichnis /tmp/live-hls-buffer hierzu ein fortlaufender Puffer aus 6 Dateien verwaltet, den man sich wie ein über die Aufzeichnung gleitendes HLS-Fenster vorstellen kann. Bei der Konversion von Aufzeichnungen gleitet dieses Fenster – um im Bild zu bleiben – schneller, als der Player folgen kann. Anders als beim Streamen von Sendungen, bei denen die Datenrate des Senders als natürliche Begrenzung dient, werden die 6 Dateien bei Aufzeichnungen binnen einer Sekunde mehrfach "umgeschlagen":
- ffmpeg buffer roll-over log.txt (ca. 7 Dateisätze pro Sekunde)
Das führt dazu, dass der Player schon den Anfang der gestreamten Aufzeichnung verpasst. In ffmpeg kann man mittels einer zusätzlichen Option das Einlesen vom StreamDev-Server so begrenzen, dass das gelesene Datenvolumen der Frame-Rate der Aufzeichnung entspricht. Leider führt das beim Streamen von Kanälen aber zu Aussetzern bzw. Artefakten und kann deshalb nicht standardmäßig verwendet werden. Diese Option muss somit vor -i <input> eingefügt werden, wenn Aufzeichnungen gestreamt werden sollen, für das Streamen von Kanälen aber entfallen.
Bei der von mir genutzten Version 4.4 von ffmpeg ist dies die Option -re. Bei der aktuellen Version wäre laut Dokumentation aber die Kombination -readrate 1 -readrate_initial_burst 1 eventuell eine bessere Wahl. Damit jeder Nutzer dies auf seine Installation und die zur Verfügung stehende Version von ffmpeg abstimmen kann, ist es konfigurierbar ausgelegt. Deshalb gibt es im Setup ein zusätzliches Feld, bei dem man die Optionen zur Begrenzung der Lesegeschwindigkeit einstellen kann:
Ich habe zum Testen ein paar zig Minuten an Aufzeichnungen und Kanälen gestreamt, und soweit scheint alles zu funktionieren. Bitte testet doch einmal selbst und meldet euch, wenn es noch irgendwo knirschen sollte. Ich selbst bin zwar kein ffmpeg-Guru, aber mit unserem gesammelten Wissen bekämen wird das sicherlich zum Laufen.
Erst einmal viel Spaß mit dem Patch
Stefan