Streamdev-server: Frage zur Verwendung von externremux.sh

  • Hi,


    ich hab mir die externremux.sh vom Streamdev-Server mal angesehen und zu meinem Glück festgestellt, dass dort eigene Header-Angaben für HTTP angegeben werden können. Jetzt meine Frage:


    verstehe ich richtig, dass ich


    • die Header per putenv setzen muss
    • dann als Streaming-Methode "cat" für 1:1-Streaming verwenden muss?

    Letzteres müsste ja über URI-Parameter möglich sein: also ...;PROG=cat


    Beim ersten bin ich mir nicht ganz sicher, wie eine Kommunikation stattfinden kann. Der Client greift ja auf eine URL zu, die streamdev dazu veranlasst den remuxer zu erzeugen und zu starten. Zu diesem Zeitpunkt würde ich nun gerne Umgebungsvariablen setzen, damit ich zusätzliche Header mitschicken kann. Welche Möglichkeiten würden da bestehen ohne viel zu patchen? Problem bei der Sache, die Header müssten dynamisch für jeden Zugriff generiert werden, können also nicht pauschal für alle Streams gleichermaßen gesetzt werden.


    Wenn es keine Möglichkeit über Umgebungsvaraiblen gibt, wie müsste eine URL aussehen, damit ich das per Parameter mitschicken kann?


    Danke jetzt schon für eure Hilfe!


    Medion Digitainer; AsRock B75 Pro3-M, Celeron G540; Kingston Value 4GB
    Samsung SpinPoint 250GB 2,5"; Samsung WriteMaster DVD-Brenner;
    TT-S2-6400, 2x TT-S2-1600, Ubuntu 12.04 mit YaVDR-Paketen. VDR 1.7.27, UPnP/DLNA-Plugin


  • Die Auswahl von cat als Streaming-Methode kann - wie Du richtig vermutet hast - über URI-Parameter erfolgen. Alternativ die externremux.sh editieren und im Konfigbereich am Anfang PROG=mencoder in PROG=cat ändern.


    Zitat

    Beim ersten bin ich mir nicht ganz sicher, wie eine Kommunikation stattfinden kann. Der Client greift ja auf eine URL zu, die streamdev dazu veranlasst den remuxer zu erzeugen und zu starten. Zu diesem Zeitpunkt würde ich nun gerne Umgebungsvariablen setzen, damit ich zusätzliche Header mitschicken kann. Welche Möglichkeiten würden da bestehen ohne viel zu patchen? Problem bei der Sache, die Header müssten dynamisch für jeden Zugriff generiert werden, können also nicht pauschal für alle Streams gleichermaßen gesetzt werden.


    Wenn es keine Möglichkeit über Umgebungsvaraiblen gibt, wie müsste eine URL aussehen, damit ich das per Parameter mitschicken kann?


    Der Plugin-Teil von externremux übergibt so ziemlich alle Infos die zu dem Stream verfügbar sind über Environment-Variablen (vergleichbar CGI) an das Skript zur weiteren Verarbeitung "nach belieben". Die Header müsstest Du Dir innerhalb des Skripts erzeugen und im Array HEADER ablegen (das gegen Ende des Skripts - bei mir Zeile 287 - mit HEADER=() initialisiert wird). Die Ausgabe der Header erfolgt dann in der Funktion startReply. Putenv wird Dir da nicht weiterhelfen. Wenn Du kurz beschreibst, wovon der zu erzeugende Header genau abhängt, kann ich Dir vielleicht besser helfen.

  • Wenn es keine Möglichkeit über Umgebungsvaraiblen gibt, wie müsste eine URL aussehen, damit ich das per Parameter mitschicken kann?


    Doch, die gibt es. Schau dir mal das Fetzen externremux.sh von mir an und dann die Zeile z.B. für VLC. Die sind etwas betagt, aber als Orientierung sollte es reichen. ;)



    Code
    http://192.168.0.1:3000/EXTERN;WLAN54/1


    Das ist für WLAN54 für Kanal 1. Wenn Du niedriger willst, dann DSL3000 oder selber definieren. Kostet Rechenleistung! Du kannst Dir auch eine m3u erstellen lassen und diese Parameter einarbeiten. Sie müssen natürlich in deine externremux.sh schon vordefiniert sein.


    Albert

  • Zitat

    Der Plugin-Teil von externremux übergibt so ziemlich alle Infos die zu dem Stream verfügbar sind über Environment-Variablen (vergleichbar CGI) an das Skript zur weiteren Verarbeitung "nach belieben". Die Header müsstest Du Dir innerhalb des Skripts erzeugen und im Array HEADER ablegen (das gegen Ende des Skripts - bei mir Zeile 287 - mit HEADER=() initialisiert wird). Die Ausgabe der Header erfolgt dann in der Funktion startReply. Putenv wird Dir da nicht weiterhelfen. Wenn Du kurz beschreibst, wovon der zu erzeugende Header genau abhängt, kann ich Dir vielleicht besser helfen.

    Ich möchte den Streamdev-Server als Live-Streamer für den DLNA-Server missbrauchen. Die Header sind notwendig, damit die Dateien abspielen, spulen usw. kann. Die Daten sind pro Datei spezifisch bzw. teilweise auch pro Anfrage spezifisch. Das Externremux-Script muss doch kein Script sein, das könnte auch ein Programm sein, eine Art Helper-Programm, was die Daten zusammenstellen und als Stream auf STDOut schreibt, richtig? Letztlich könnte ich also die Infos mit einem Perl-Script oder sogar per C/C++-Programm hinbiegen, in dem das Programm per IPC mit dem Plugin kommuniziert. Geht das oder hab ich was falsch verstanden?


    Medion Digitainer; AsRock B75 Pro3-M, Celeron G540; Kingston Value 4GB
    Samsung SpinPoint 250GB 2,5"; Samsung WriteMaster DVD-Brenner;
    TT-S2-6400, 2x TT-S2-1600, Ubuntu 12.04 mit YaVDR-Paketen. VDR 1.7.27, UPnP/DLNA-Plugin

  • Ich möchte den Streamdev-Server als Live-Streamer für den DLNA-Server missbrauchen.


    Dafür ist aber vdr-plugin-upnp zuständig, nicht der Streamdev-Server.


    Albert

  • Falls Du Dein Glück trotzdem versuchen willst: Natürlich kannst Du anstelle von externremux auch ein Perl, C oder sonstwas Skript/Programm verwenden. Über Umgebungsvariablen werden viele Informationen über den Stream, den Client und den Request zur Verfügung gestellt (siehe Streamdev README). An stdin liegt der TS-Stream an, alles was an stdout ausgegeben wird, wird von streamdev 1:1 an den Client weitergereicht.

  • Zitat

    Dafür ist aber vdr-plugin-upnp zuständig, nicht der Streamdev-Server.


    Äh, nicht ganz richtig. Die Header müssen vom Datenlieferant eingefügt werden. Streamdev soll der Lieferant für Live-TV werden, weil's einfach weeeeeeeeesentlich stabiler läuft, als der interne Streamer vom UPnP-Plugin (war eben auch nicht meine größte Glanzleistung, da hat Schmirl vielleicht mehr Ahnung von). Ich will deshalb streamdev einsetzen, um die Patches der libupnp zu vermeiden, die eigene Header-Angaben ermöglicht. Der Patch ist von MediaTomb übernommen, wurde oder wird aber nicht in die Entwicklung von libupnp aufgenommen.


    Zitat

    Falls Du Dein Glück trotzdem versuchen willst: Natürlich kannst Du anstelle von externremux auch ein Perl, C oder sonstwas Skript/Programm verwenden. Über Umgebungsvariablen werden viele Informationen über den Stream, den Client und den Request zur Verfügung gestellt (siehe Streamdev README). An stdin liegt der TS-Stream an, alles was an stdout ausgegeben wird, wird von streamdev 1:1 an den Client weitergereicht.


    In Form von HTTP-Nachrichten, ab dem üblichen Header-Kram von HTTP nehme ich an? Ich muss mich also auch um den doppelten Zeilenumbruch kümmern, der zwischen Header und Body steht?


    Medion Digitainer; AsRock B75 Pro3-M, Celeron G540; Kingston Value 4GB
    Samsung SpinPoint 250GB 2,5"; Samsung WriteMaster DVD-Brenner;
    TT-S2-6400, 2x TT-S2-1600, Ubuntu 12.04 mit YaVDR-Paketen. VDR 1.7.27, UPnP/DLNA-Plugin

  • Zitat

    In Form von HTTP-Nachrichten, ab dem üblichen Header-Kram von HTTP nehme ich an? Ich muss mich also auch um den doppelten Zeilenumbruch kümmern, der zwischen Header und Body steht?


    So ist es. Das "HTTP/1.0 200 OK" schickt noch streamdev, für alles weitere ist das Skript zuständig.


    Wie umfangreich ist denn der Code-Block zum Erzeugen der Header? Ggf. wäre es sinnvoll, das ganze in das Streamdev-Plugin einzubauen anstatt über externremux zu gehen.

  • Das Problem ist, dass das dieser ganze hässliche DLNA-Krempel ist. Ich müsste da mal schauen, welche Header-Angaben alle notwendig werden. Hauptsächlich geht's dabei um Media-Streaming-Flags und Infos zu speziellen Funktionen. Wenn das eingebaut werden würde, bräuchte ich ein Rückkanal, um im UPnP-Plugin ggf. darauf reagieren zu können. Es sei denn, die Flags bestimmen tatsächlich nur den aktuellen Medienstrom und niemals den Browser.


    An welchen Stellen im server müsste ich denn ansetzen? HTTPConnection?


    Medion Digitainer; AsRock B75 Pro3-M, Celeron G540; Kingston Value 4GB
    Samsung SpinPoint 250GB 2,5"; Samsung WriteMaster DVD-Brenner;
    TT-S2-6400, 2x TT-S2-1600, Ubuntu 12.04 mit YaVDR-Paketen. VDR 1.7.27, UPnP/DLNA-Plugin

  • Okay, es gibt doch mehr Header als erwartet. Die sind auch nicht gerade trivial zu verwenden. Jetzt hab ich allerdings die Zwickmühle, dass die DLNA-Geräte auch Header zurückschicken, die ich auswerten muss. Das heißt, ich muss auf jeden Fall einen Ankerpunkt im Streamdev-Server finden, wo ich Infos erhalte und die entsprechend auswerten kann, wenn ich darauf nicht verzichten kann. Ideal wäre halt eine Service-Schnittstelle, damit ich als Plugin Infos eines Requests erhälte und auch wieder zurückschicken kann.


    Medion Digitainer; AsRock B75 Pro3-M, Celeron G540; Kingston Value 4GB
    Samsung SpinPoint 250GB 2,5"; Samsung WriteMaster DVD-Brenner;
    TT-S2-6400, 2x TT-S2-1600, Ubuntu 12.04 mit YaVDR-Paketen. VDR 1.7.27, UPnP/DLNA-Plugin

  • Hallo methodus,


    bist Du an dieser Front schon weiter gekommen? Ich wollte nämlich mit mediatomb Live - TV streamen. Mein Samsung TV braucht auch custom headers. Siehe hier: [HowTo] Mediatomb LiveTV und Aufnahmen mit vdr


    Wie müßte ich denn den header() - hash füllen?
    Hier der Eintrag im mediatomb:

    Code
    <custom-http-headers>
    <add header="transferMode.dlna.org: Streaming"/>
    <add header="contentFeatures.dlna.org: DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=01700000000000000000000000000000"/>
    </custom-http-headers>


    vG
    Wolfgang

    Clients
    VDR1: yaVDR 0.5 stable auf ZOTAC ION A 4Gbyte RAM / mit ATRIC - IR - Einschalter softhddevice per streamdev am Server
    VDR2 / VDR3: MLD 5.1 auf Raspberry pi3
    2 x VOMP 0.4 auf mediamvp
    Server
    Cubietruck, Lubuntu Trusty, vdr aus yaVDR - sourcen, 1 x TT S2-3600, 1 x TT S2-3650 CI, 1 x sundtek SkyTV III, 1 x sundtek SkyTV IV

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!