Mit gstreamer decodete Filme an encoder

  • Man kann wunderbar .ts Files vom SoC encoden lassen und streamen, indem man dem Streaming-Server einfach eine ServiceRef übergibt, die den Dateinamen enthält. Diese wird dann an eServiceCenter übergeben und danach hat man per Python keinen Einfluss mehr. Das sieht dann so aus:



    Allerdings funktioniert das nicht, wenn man statt einer Aufnahme einen Film streamen möchte, der erst noch durch gstreamer gejagt werden muss:




    Es wäre klasse, wenn das auch funktionieren würde. Vielen Dank!

  • Das eine hat ja dem anderen nichts zu tun. Klar wäre es gut, wenn die Ausgabe des Encoder Devices in ein File erfolgen könnte. Egal wie und wo das gelöst wird.


    Aber dann wäre das Problem aus diesem Thread immer noch da und man könnte zwar Aufnahmen in ein File encodieren, aber keine anderen Filme. Dein Thread geht um den Output - ich rede vom Input.


    Im Moment werden nämlich Filme (mkv / api / etc.), gar nicht erst richtig an das Encoder Device durchgereicht. Wenn es sich nicht um Aufnahmen handelt, müsste man gstreamer dazwischen schalten (= ServiceRef mit 4097). Da scheint aber irgendwas nicht im Core zu funktionieren.

  • Es spart dir eben so wie ich dort geschrieben habe das unnötige über das socket rausblasen und von dort dann wieder auslesen.


    Das was ich damit machen will geht auch in eine andere Richtung, auch wenn sich die use cases vielleicht überdecken mögen.


    Aber du hast recht das ist hier eigentlich OT ^^

  • Das habe ich verstanden. Aber darum geht es doch hier gar nicht :)


    Angenommen Dein Feature-Request wird realisiert, dann könntest man zwar das TV-Programm und Aufnahmen direkt in eine Datei encoden, aber das würde mit avi/mkv immer noch nicht funktionieren. Und genau darum geht es in diesem Thread: Die Möglichkeit avi/mkv zu encoden. Ob die Ausgabe dann per rtsp/hls oder in eine Datei erfolgt, möchte ich hier gar nicht thematisieren. Es geht lediglich darum avi/mkv als Input benutzen zu können. (Und da enigma zu Wiedergabe dieser gstreamer benutzt, muss man halt eine 4097 ServiceRef benutzen, die enigma2 veranlasst gstreamer *zur Wiedergabe* zu benutzen. Nur deshalb rede ich hier von gstreamer.. es geht NICHT darum, dass gstreamer als Client zum rtsp-Server benutzt werden soll!)

  • genau das wäre aber technisch möglich, für gstreamer is python ja nur ein shell - womit wir aber wieder bei der source Frage wären die ich in meinem Thread gestellt habe :D Und ja mich interessieren komische avi und mkv gar nicht ^^

  • Auch wenn ich mich wiederhole: Das wäre technisch dann eben nicht möglich...


    Es läuft so:


    Python -> e2-core -> SoC -> streamserver -> client


    Wobei python mit den Methoden eServiceCenter.play(ref) und dann .setTarget() und .start() dem e2-core mitteilt, welchen service er an den SoC senden soll. Der streamserver liest dann vom encoding device, die encodierten Daten. Der Client holt sich diese dann per Stream vom Streaming-Server.
    Du möchtest den letzten Schritt ersetzen. Statt eines Clients möchtest Du am Ende der Kette in eine Datei ausgeben.


    Ich rede allerdings davon, dass der e2-core einen 4097 service nicht richig an den SoC weitergibt. Normalerweise werden 4097 vor der Wiedergabe durch gstreamer gejagt (um divx/whatever zu DEcoden). Die Kette müsste dann also so aussehen:


    Python -> e2-core -> gstreamer -> SoC -> streamserver -> client


    Das funktioniert aber eben nicht. Ob dabei dann der client durch eine Ausgabe in eine Datei ersetzt wird ist irrelevant für das Problem, das ich hier anspreche.


    Übrigens habe ich der Einfachheit halber in der Kette oben weggelassen, dass vorher der streamserver noch die Client-Verbindung annimmt und dann per dbus dem e2-core bescheid gibt, dass eine neue Url aufgerufen wurde und dieser dann _onUriParametetChanged() in StreamServerControl.py aufgeruft, was dann wiederrum eServiceCenter nutzt, um dem e2-core zu sagen, welchen service er an den SoC durchschleifen soll...