Wrapper in Open ATV 7.x (Streamlink, YT-DL und YT-DLP)

Wie im letzten Enigma2World Live Stream versprochen, haben wir versucht zu dem Thema alles Wichtige niederzuschreiben um das Verständnis für die Funktionsweise und vor allem der Abhängigkeiten beim Wrapper zu verbessern. Als Erstes geht mein persönlicher Dank an den User @4l3x2k der an einem der vergangenen Abende mal alles weggeschrieben hat was ihm zu dem Thema eingefallen ist. Doch damit nicht genug denn für die Realisierung war natürlich noch ein bisschen Brain und gut durchdachter Code nötig. Dieser Aufgabe nahm sich (wie so oft) @jbleyel an.

Was ist das Problem? Links (URLs) zu Streams im Netz sind nicht statisch, soll heissen wenn wir den Link im Browser auf einem PC (Windows, MacOS und Linux) eingeben ist es nicht sicher das das Video genau von der eingegebene Adresse abgespielt wird. Bestes Beispiel dafür ist das Einbinden von einer Video URL in ein HTML Frame, denn der Inhalt des Frame kann vom Zugriff her überhaupt nichts mit der Webseite zu tun haben. Wir brauchen also in Enigma2 eine Möglichkeit dem ‚wahren‘ Link zu folgen !

Ein weiteres Problem tritt dann auf wenn wir diese Links in ein Enigma2 Bouquet einbinden möchten, denn ohne zusätzliche Software weiss Enigma2 nicht was sie mit dem Link machen soll.

Voraussetzung für alle der hier erwähnten Anwendungszwecke ist ein installiertes Paket

opkg update && opkg install streamlink

Streamlink übergibt jede beliebige URL aufbereitet an den gstreamer (Mediaframework zum Abspielen des Video in Enigma2).

Als Erweiterung nach Einführung von streamlink wurde für die o.g. Probleme die sich aus der ‚versteckten‘ Video URL ergeben, die Installation des Paket

streamlinksrv (is a helper deamon for streamlink)

empfohlen, denn der setzt die Streams (HLS, Dash) entsprechend zusammen um sie an den Decoder weiterzuleiten.

Ihr ahnt es sicher schon denn das wäre ja Alles zu schön um wahr zu sein. Probleme treten spätestens dann auf wenn Dash oder HLS ins Spiel kommt, denn dabei werden teilweise getrennte Video und Audio Stream übertragen die natürlich beim Empfänger wieder syncron sein müssen. Dabei übernimmt FFmpeg das mergen bzw. muxen der getrennten Streams und der streamlinksrv die Übergabe des Stream an den Decoder. Die in der Folge des Artikel erwähnten Wrapper Pakete können das (noch) nicht.

Bei den vergangenen Test hatte wir jedenfalls viel Spass z.B. als wir versuchten auf YouTube veröffentlichten Videos (das sind ja hochgeladene Files) aus einem Bouquet heraus abzuspielen. Damit kam die Kombination streamlink/streamlinksrv leider nur bedingt klar und spielte die Videos sehr stark ruckelnd ab.

Hilfe brachten hier die folgenden OpenAlliance Wrapper Pakete

enigma2-plugin-extensions-streamlinkwrapper
enigma2-plugin-extensions-ytdlpwrapper
enigma2-plugin-extensions-ytdlwrapper

Damit diese Plugins nutzbar sind, ist aber auf bestehende Abhängigkeiten zu achten. Es müssen also noch Pakete im Zusammenhang manuell installiert werden. So wird für das Paket ytdlwrapper

python3-yt-dlp

benötigt und

python3-youtube-dl 

für den ytdlpwrapper.

Nun wär es doch schön wenn man einfach eine Empfehlung für jeden Anwendungszweck geben könnte, doch leider ist dem nicht so einfach.

Daher hier ein paar Erfahrungswerte: Sobald es um HLS (m3u8) oder Dash (mpd) geht muss man schauen was besser geht, meist ist es streamlinksrv. In den Audioeinstellungen des Enigma2 Receiver sollte man eventuell dann auf Passthrough verzichten und dem Downmix von Enigma2 vertrauen.

Streamlink und YT-DLP liefern ihren eigenen Code, um mit HLS (m3u8) und DASH (mpd) umgehen zu können und machen damit die gstreamer-plugins für DASH und HLS überflüssig. Damit sieht gstreamer nur einen container ala. MPEG-TS, MP4, MKV, WEBM usw.

Wer YouTube schon länger nutzt wird sicherlich festgestellt haben das man dort wirklich sehr dynamisch auf die Netzwerksituation des Kunden reagiert. Auch diesen Umstand muss die Software in Enigma2 Rechnung tragen um getrennte Audio/Video Streams mit dynamischer Bitrate zu mergen.

Wie ich schon im Enigma2World Livestream vom 15.07.2022 zeigte eignete sich hier zur Realisierung der Aufgabenstellung, bestimmte YouTube Playlisten als Bouquets zu hinterlegen der YT-DLP Wrapper am Besten.

Aktuell gibt es noch kein Enigma2 Bouqueteditor der die Modifikation der Links in der userbouquet.iptv*.tv Datei vornehmen kann weshalb diese manuelle Modifikation nötig ist.

Dabei ist die Datei mit einem Linux kompatiblen Editor (Nodepad++, Visual Studio Code usw.) zu öffnen und in jeder Zeile der fett markierte String

#SERVICE 4097:0:1:0:0:0:0:0:0:0:http%3a//127.0.0.1%3a8088/

durch z.B.

#SERVICE 4097:0:1:0:0:0:0:0:0:0:YT-DLP%3a//

zu ersetzen. Dafür eignet sich hervorragend die Editor Funktion ‚Suchen und Ersetzen‘. Der dafür am Besten geeignete Wrapper kann oder besser sollte ausprobiert werden, also STREAMLINK, YT-DL oder der oben erwähnte YT-DLP.

#SERVICE 4097:0:1:0:0:0:0:0:0:0:STREAMLINK%3a//
#SERVICE 4097:0:1:0:0:0:0:0:0:0:YT-DL%3a//