Beiträge von maluhi

    Mit diesem Plugin kann man Aufnahmen und andere Filme ganz einfach über den Streamserver schauen und diese Steuern. Weiterhin bringt die Benutzung des integrierten Reverse-Proxies einen Geschwindigkeitsvorteil, wenn man per HLS in langsamen Netzen streamed (bspw. über das Internet).


    Um Aufnahmen/Filmen per Browser, abzuspielen einfach im Web-Interface unter "Filme" auf den Play-Button klicken.


    Im Moment muss man noch manuell libsss-segment installieren. Ab dem nächsten Update liegt diese aber auch auf dem DMM-Feed.


    Da eine alte Version von StreamServerSeek auf dem Feed liegt, sollte man nach der Installation folgenden Befehl ausführen, damit eine Version aus diesem Thread bei einer System-Aktualisierung nicht überschrieben wird:


    apt-mark hold enigma2-plugin-extensions-streamserverseek


    Um das später wieder rückgängig zu machen und Versionen über den Feed zu aktualisieren:


    apt-mark unhold enigma2-plugin-extensions-streamserverseek



    Zum Streamen von Aufnahmen/Filmen in einem anderen beliebigen Clients ruft man nicht mehr den Streamserver direkt auf, sondern http://[IP]/streamserverseek/stream/[PROTOCOL][FILENAME]
    PROTOCOL ist dabei entweder "rtsp" oder "hls". [FILENAME] entspricht dem Pfad zum Film.


    Möchte man also bspw. den Film /media/hdd/movie/dateiname.ts per RTSP streamen, ist die Url: http://[IP]/streamserverseek/stream/rtsp/media/hdd/movie/dateiname.ts


    Wenn man direkt zu einer bestimmten Minute springen, hängt man an die URL einfach "?min=X" an. Wobei X der gewünschten Minute entspricht.


    Möchte man also bspw. den Film /media/hdd/movie/MeinFilm.mkv per HLS streamen und direkt zu Minute 30 springen, ist die Url: http://[IP]/streamserverseek/stream/hls/media/hdd/movie/MeinFilm.mkv?min=30


    Analog dazu kann direkt in den Web-Player springen, indem man http://[IP]/streamserverseek/stream/player/media/hdd/movie/MeinFilm.mkv aufruft. Am einfachsten ist es, den gewünschten Film einfach in der Standard Film-Liste unter http://[IP]/#!/movies/list/filter// zu starten. Der Play-Button startet automatisch Dreambox TV und spielt den gewünschten Film ab.


    Ein über /streamserverseek/stream/hls/... oder /streamserverseek/stream/player/... gestarteter Film läuft automatisch über den integrierten Reverse-Proxy!


    StreamServerSeek kann leider aktuell nur Aufnahmen (.ts Dateien) im Hintergrund abspielen. Um auch .avi/.mkv/usw. im Hintergrund über den Streamserver streamen zu können, fehlt noch eine Funktionalität im enigma2-core. Einen Feature Request dafür habe ich erstellt Mit gstreamer decodete Filme an encoder - aber ob und wann dieser umgesetzt wird, ist ungewiss. Trotzdem können solche Filme mit StreamServerSeek abgespielt werden:


    In StreamServerSeek ist ein "temporärer Live-Mode" enthalten, der die Server-Box temporär aus dem Idle aufweckt, den Film startet und im Anschluss wieder in den Idle wechselt. StreamServerSeek achtet dabei darauf, dass der normale Betrieb der Box durch den temporären Live-Mode nicht gestört wird. D.h. das Abspielen solcher Filme funktioniert nur, wenn die Box gerade im Idle ist. Außerdem wird der temporäre Live-Mode sofort beendet, wenn jemand an der Server-Box manuell den Service wechselt, oder diese in Idle versetzt. Andernfalls wird der Film bis zum Ende gespielt und danach automatisch der temporäre Live-Mode beendet und die Box wieder in den Idle geschickt. Auch wenn 30 Sekunden lang keine Clients mehr mit dem Streamserver verbunden sind, wird der temporäre Live-Mode automatisch beendet und die Box wieder in Idle versetzt.
    Während des temporären Live-Modes wird HDMI-CEC deaktiviert. Der TV sollte also nicht automatisch mit angehen!


    StreamServerSeek erkennt automatisch, ob es sich um eine Aufnahme oder um einen Film handelt, für den der temporäre Live-Mode erforderlich ist. Handelt es sich lediglich um eine Aufnahme (.ts Datei), dann kann diese im Hintergrund gestreamed werden und die Box somit während dessen normal benutzt werden.


    Der Reverse-Proxy kann auch zum Streamen von normalen TV-Kanälen benutzt werden. Hierzu benutzt man statt http://[IP]:8080/stream.m3u8?ref=... einfach die URL http://[IP]/streamserverseek/proxy/stream.m3u8?ref=...


    Um den Stream zu steuern, stellt StreamServerSeek neben der normalen Seek-Bar im Web-Player sowie anderen HLS-Clients ein Web-Interface und eine Web-API bereit.
    Das Web-Interface befindet sich unter http://[IP]/streamserverseek/ und enthält (noch) nur einen Slider zum Ändern der PlayPosition.


    Die Web-API, die unter http://[IP]/streamserverseek/web/[FUNKTION]?[PARAMETER] zu finden ist, stellt deutlich mehr Funktionen bereit:

    • getinfo

      • Liefert state (0 = INACTIVE, 1=BACKGROUND, 2=LIVE), statetext, servicename, servicereference, moviepath, pausable, seekable, length, playposition
      • Parameter:


        • unit (optional): "min" oder "sec"
    • getlength

      • Länge der Aufnahme
      • Parameter:


        • unit (optional): "min" oder "sec"
    • getplayposition


      • Aktuelle Position in der Aufnahme


      • Parameter:


        • unit (optional): "min" oder "sec"
    • pause


      • Pausiert die Wiedergabe
    • unpause


      • Startet die Wiedergabe
    • play


      • Macht das gleiche wie "unpause"
    • seekto


      • Springt zu einer absoluten Position


      • Parameter:

        • pos: Position, zu der gesprungen werden soll
        • unit (optional): "min" oder "sec"
    • seekrelative


      • Springt relativ zur aktuellen Position vor oder zurück.


      • Parameter:

        • pos: Position, zu der gesprungen werden soll. Ein negativer Wert führt zu einem Rückwärtssprung.
        • unit (optional): "min" oder "sec"
    • seekchapter

      • Springt zu einem bestimmten Chapter
      • Parameter:


        • number: Nummer des Chapters
    • fastforward

      • Spult vor
      • Parameter:


        • speed: Geschwindigkeits-Multiplikator
    • fastbackward

      • Spult zurück
      • Parameter:
      • speed: Geschwindigkeits-Multiplikator
    • slowmotion


      • Spielt die Aufnahme langsamer ab


      • Parameter:


        • speed: Geschwindigkeits-Multiplikator







    Beispiele:

    • Zu Minute 60 springen


      • [IP]/streamserverseek/web/seekto?unit=min&pos=60
    • 5 Minuten vorwärts springen


      • [IP]/streamserverseek/web/seekrelative?unit=min&pos=5
    • Video pausieren


      • [IP]/streamserverseek/web/pause
    • Länge in Sekunden ausgeben


      • [IP]/streamserverseek/web/getlength?unit=sec
    • Aktuelle Position in Minuten


      • [IP]/streamserverseek/web/getplayposition?unit=min
    • Mit fünffacher Geschwindigkeit vorspulen


      • [IP]/streamserverseek/web/fastforward?speed=5
    • Video wieder normal abspielen


      • [IP]/streamserverseek/web/unpause oder [IP]/streamserverseek/web/play

    Damit die Api-Funktionen manuell im Browser aufgerufen werden können, müssen folgende Einstellungen unter Einstellungen -> Netzwerk -> Webinterface auf "aus" gestellt werden:

    • Einfache Anti-Hijack Maßnahmen
    • Token-basierte Sicherheit

    Das sollte man aber nur machen, wenn das Webinterface definitiv nicht von außen zu erreichen ist. Zur Sicherheit im internen Netzwerk sollte man dann evtl. über ein Passwort für das Webinterface nachdenken. Wenn ich dazu komme, erstelle ich noch eine einfache Weboberfläche, damit die Api auch ohne die Deaktivierung der Sicherheits-Funktionen im Browser benutzbar ist.

    Mit dem letzten Enigma2-Update kam auch ein neuer Transcoding-Server, der dreamliveserver. Leider stecken noch ein paar Kinderkrankheiten in ihm, so dass man bspw. manchmal nach dem Zappen nur noch Ton und kein Bild erhält.


    Der alte Transcoding-Server, "dreamrtspserver", hatte zwar auch einige Bugs, funktioniert aber zuverlässig, wenn man das Problem der "stranded clients" patched. Wie das geht hatte ich in dreamrtspserver hangup zwar gepostet, das wurde aber leider nicht mehr in den Code aufgenommen, da der neue dreamliveserver kurz vor der Veröffentlichung stand. Wie dem auch sei, lässt sich der alte Server nicht mehr ohne weiteres mit dem neuen Enigma2 nutzen, da sich einiges an der Schnittstelle zwischen Enigma2 und dem Transcoding-Server geändert hat.


    Mit dem Plugin GstStreamServer ist es jetzt aber möglich den altern dreamrtspserver in Kombination mit dem neuen Enigma2 zu betreiben. Das Plugin übernimmt die Kommunikation mit dem Transcoding-Server selbst und ersetzt die Funktionalität, die vorher der Enigma2-Core übernommen hatte.


    Das Plugin ist ausdrücklich NICHT dazu gedacht den neuen dreamliveserver auf lange Sicht zu ersetzen. Es soll lediglich den jenigen, die aktuell Probleme haben, dazu dienen die Wartezeit zu überbrücken, bis dreamliveserver zuverlässig funktioniert.


    Die Konfiguration findet man unter Einstellungen -> Netzwerk -> Gst Rtsp Server


    Das Plugin kann weder gleichzeitig mit dem original dreamrtspserver, noch mit dem neuen dreamliveserver installiert werden. Es benötigt Pakete die sowohl gstreamer1.0 als auch dreamrtspserver ersetzen. Diese enthalten den "stranded client" Fix aus dem oben genannte Post.


    Bitte vor der Installation ein Backup machen!!


    Installation auf dm820 und dm7080:


    *_all.deb und die beiden *_mipsel.deb nach /tmp kopieren und dann folgende Befehle ausführen:


    Code
    apt-get remove dreamliveserver enigma2-plugin-systemplugins-streamserver
    dpkg -i /tmp/enigma2-plugin-systemplugins-gstrtspserver* /tmp/gstreamer1.0-maluhi* /tmp/dreamrtspserver-maluhi*
    apt-get update && apt-get -f -y install
    systemctl restart enigma2




    Installation auf dm900 und dm920:


    *_all.deb und die beiden *_armhf.deb nach /tmp kopieren und dann folgende Befehle ausführen:


    Code
    apt-get remove dreamliveserver enigma2-plugin-systemplugins-streamserver
    dpkg -i /tmp/enigma2-plugin-systemplugins-gstrtspserver* /tmp/gstreamer1.0-maluhi* /tmp/dreamrtspserver-maluhi*
    apt-get update && apt-get -f -y install
    systemctl restart enigma2


    WICHTIG: ein dpkg -i ./* funktioniert NICHT, da es auf die Reihenfolge ankommt. Bitte den Befehl so wie er angegeben ist nutzen!


    Zum Deinstallieren von GstRtspServer (und gleichzeitigem Installieren von dreamliveserver) auf allen Boxen:


    Code
    apt-get install --reinstall gstreamer1.0 enigma2-plugin-systemplugins-streamserver dreamliveserver
    systemctl restart enigma2

    Und genau mit der Ausgabe von /proc/mounts fängt der erste von mir gepostete Link an... dann werden die darin enthaltenen Werte erklärt und danach geht es mit Sachen weiter, die nicht in der Ausgabe stehen. Bspw. MTU Anpassung usw. Jumbo Frames beschleunigen die Übertragung im lokalen Netzwerk ja zweifellos, davon sieht man aber in /proc/mounts gar nichts. Genausowenig wie von der socket queue. Was daran jetzt Urban Legend ist verstehe ich zwar nicht ganz, aber Du kannst ihm die Ausgabe von /proc/mounts auch gern manuell auseinander nehmen, statt auf einen Link zu verweisen, der genau das erklärt ;P

    1) Wenn nicht gerade total viel anderes Zeug das Traffic verbraucht aktiv ist, dürfte QoS keinen Unterschied machen
    2) IGMP ist ein Routing-Protokoll... Das kann nichts mit der Übertragungsgeschwindigkeit zu tun haben, außer Du musst zwischendurch das Routing zum NAS anpassen, weil mehrere Router zwischen den Standorten von Dreambox und NAS sind und diese während der Übertragung umkonfiguriert werden oder ausfallen....
    3) Flow Control ist seit Full Duplex eh an. Und falls Du die TCP Flow-Control meinst, dann ist die auch immer an. Davon ab solltest Du im lokalen Netzwerk statt tcp eher udp für NFS mounts benutzen.


    Irgendwie haben ALLE Deiner Punkte gar nichts mit dem Problem zu tun. Du wirfst da anscheinend mit Begriffen um Dich, die zwar toll klingen, aber eher rumdoktern an der falschen Stelle sind.


    Dass NFS seit Ewigkeiten async kann, weisst Du aber schon, oder?

    Ja, natürlich. Ob nun enigma auf den Stream zum Aufnehmen zugreift, oder man das per VLC macht, ist egal.


    Nimm einfach:
    rtsp://[ip]:554/stream?ref=1%3A0%3A0%3A0%3A0%3A0%3A0%3A0%3A0%3A0%3A und häng daran den encodeten Pfad zur Aufnahme an. Dazu zB https://www.urlencoder.org nutzen. Aus "/media/hdd/movie/Meine tolle Aufnahme.ts" wird dann bspw. "%2Fmedia%2Fhdd%2Fmovie%2FMeine%20tolle%20Aufnahme.ts"



    Zusammen gesetzt lautet die Url also rtsp://[ip]:554/stream?ref=1%3A0%3A0%3A0%3A0%3A0%3A0%3A0%3A0%3A0%3A%2Fmedia%2Fhdd%2Fmovie%2FMeine%20tolle%20Aufnahme.ts

    Kann man. Starte mal im Movieplayer die Wiedergabe einer Aufnahme und schau Dir die ServiceRef im Log an. Diese setzt Du dann einfach encoded in der Stream-URL statt der ref eines Kanals.

    Macht es Sinn erst einen Blindscan ohne Netzwerksuche zu machen, um definitiv alle Sender zu finden und danach ohne Löschen einen Blindscan mit Netzwerksuche, um evtl. genauere Frequenzen für die meisten Sender zu erhalten? Oder werden dabei Sender evtl. unbrauchbar gemacht, indem bei falscher NIT ungültige Frequenzen eingetragen werden?

    Das mit der __rcUsedChanged umschreiben klappt leider nicht, da es ja eine notifier-Funktion für config.misc.rcused.value ist.
    Da sich der Wert ja nicht mehr ändert, wird die umgeschriebene Funktion nicht mehr aufgerufen.

    Entweder das, oder Du überschreibst Die Methode gar nicht :winking_face:


    Methoden, die mit __ beginnen, werden bei Aufruf dynamisch umbenannt.


    Schau Dir mal mein streamtimeshiftfix an, da habe ich eine solche Methode überschrieben. Glaube es war InfoBarGenerics.__evEOF(): reached EOF, but we are in stream mode. delaying 1 second.

    Ersetze doch einfach mal testweise die beiden(?) if abfragen und teste, ob Du weiter kommst.


    Bspw.


    #if defined(HAS_NEON) && !defined(__LP64__)


    Durch


    #if !defined(HAS_NEON) && !defined(__LP64__)


    Oder Du suchst nach allen Vorkommen von HAS_NEON und schaust wo das defined wird und kommentierst das aus.


    Was aber wie gesagt komisch ist: Die Prozessoren der 9X0 haben eigentlich NEON. Kann es sein, dass Du für einen alten armv6 oder so cross compilierst? Vllt einfach mal das target wechseln, wenn möglich.


    Edit: Ich kann da evtl nächste Tage auch mal drüber schauen, wenn ich Zeit habe. Hab bis jetzt nur kurz die von Dir angehängte Datei auf dem Handy gelesen und sonst noch keinen Überblick. Schick mir evtl einfach mal Deine bb files per PN oder so.

    Da wird Dir wohl nichts anderes übrig bleiben als den Assembler code in Matrix4Mul() durch intructions zu ersetzen, die der Prozessor kann.
    In der Datei steht auch bereits drin wie das ohne den asm code gelöst wird. Der asm code wird nur compiliert, wenn folgendes zutrifft:


    #if defined(HAS_NEON) && !defined(__LP64__)


    Einfach die entsprechenden Stellen anpassen, oder die defines anpassen. Ob das Ändern der defines andere Auswirkungen hat, habe ich jetzt nicht nachgesehen - gehe aber davon aus.


    Trotzdem komisch, weil eigentlich sollte die Dream neon können. Und hättest Du ein falsches target angegeben, würde ja HAS_NEON nicht gesetzt sein. Evtl. wird das Target auch durch einen Fehler im Makefile falsch an den Compiler übergeben, musst Du Dir vllt. mal anschauen.

    Später: Habe die editierte Dateien von Maluhi (github) versucht und da habe ich die Bouquette von Partnerbox hinzugefügt mit die Name von der Partnerbox-Name eingeklammert. Danke Maluhi.

    Das ging auch vorher bereits. Ich habe nur eine Option eingebaut, dass man den Partnerboxnamen in den Bouquets weglassen kann und direkt transkodierte Streams statt Direktstreams adden kann. Der Rest ist nicht auf meinen Mist gewachsen und ist schon lange integriert.