Streamdev-server StreamQuality,m3u,ExternalIP patch

  • Hallo VDR Gemeinde,


    ich habe gestern ein wenig am Stremdev-server herumgebastelt und hier ist das Ergebnis. Der angehängte Patch baut folgende Sachen in den HTTP Teil des Streamdev-servers ein:


    1) m3u support (basierend auf einem Patch den Google aus irrgendeinem tschechischen Forum ausgespuckt hat)


    Wenn man wiefolgt auf den vdr zugreift bekommt man eine Playlist im m3u Format.
    http://<vdr-ip>:<streamdev-port>/<stream-type>/channels.m3u


    2) external IP support (mir ist leider keine bessere Bezeichnung eingefallen)


    Wenn man so wie ich Wireless lan hat das nicht geroutet sondern via FW und masquerading am lan hängt hat streamdev bis jetzt trozdem die interne IP in den generierten HTML Dokumenten benutzt. Mithilfe des Patches kann man nun ein externes Netz angeben und wenn der Zugriff via Portforward aus diesem Netz in das interne erfolgt dann benutzt er die Externe IP als Ziel der Links.
    also z.B.:
    WLAN IP der FW 10.100.0.1/255.255.0.0 port 3000 via dnat auf vdr weitergeleitet
    LAN Netz: 192.168.50.0/255.255.255.0


    vorher:
    Zugriff aus dem internen Netz 192.168.50.0 Links zeigen auf 192.168.50.254 was ja auch passt
    Zugriff aus dem externen Netz 10.100.0.0 Links zeigen auf 192.168.50.254 was nicht so toll ist

    jetzt:
    Zugriff aus dem internen Netz 192.168.50.0 Links zeigen auf 192.168.50.254
    Zugriff aus dem externen Netz 10.100.0.0 Links zeigen auf 10.100.0.1


    eingestellt wird die externe ip in der setup.conf oder via osd


    Code
    streamdev-server.HTTPExternalIP = 10.100.0.1
    streamdev-server.HTTPExternalMask = 255.255.0.0


    3) Externremux Quality


    Weiters habe ich mir erlaubt Externremux zu erweitern (wobei ich fast sagen muß das ist grob hineingezimmert) , wenn man den streamdevserver via


    Code
    http://<vdr-ip>:<streamdev-port>/extern/<Qualität>/<Kanal>


    aufruft wird der String Qualität an das externremux.sh script als Parameter übergeben -> man kann jetzt mit der URL die Qualität steuern ohne das remux script jedesmal umstellen zu müssen.
    Das externremux script muß natürlich dahingehend geändert werden.


    meines sieht derzeit so aus:



    Lg


    Tuxinger


    PS:
    Der Patch ist gegen streamdev cvs von heute


    [EDIT]
    Hab den Patch ein wenig aufgeräumt und folgendes geändert bei Radiokanälen wird automatisch RADIO in die URL als letzter Parameter eingefügt (-> wenn man auf einen Radiokanal klickt bekommt das externremux script als letzten parameter RADIO übergeben), zudem ist es jetzt möglich beliebig viele Parameter an das externremux script zu übergeben. (-> man könnte eine Qualität MANUAL definieren und VBR,ABR,CODEC,... via url übergeben)

    Code
    z.B.: http://<vdr-ip>:<streamdev-port>/extern/MANUAL/VBR=1000/ABR=200/VCODEC=MP4/ACODEC=MP3/<Kanal>

    [/EDIT]

  • der m3u Patch ist imOriginal im streamdev bug tracking system mantis auf vdrdeveloper.org zu bekommen. Die andere geschichte ist nett :) Was ich suche wäre das übergeben wird ob es Radio oder TV ist, dann könnte man im script drauf reagieren ...

    VDR User: 87 - LaScala LC14B - LG/Phillipps 6,4" VGA Display | Asrock H61/U3S3 | G630T | 1x 16GB Mobi Mtron 3035 1x WD 750GB 2,5" |1x L4m DVB-S2 Version 5.4

  • Behelfsmäßig geht das derzeit mit der Qualität Radio, aber wenn ich rausfind wie ich radiokanäle identifizieren kann kann ich das als extra Parameter übergeben.
    Übrigens die m3us gehen selbsvertändlich auch mit extern und quality sprich

    Code
    http://<vdr-ip>:<streamdev-port>/extern/<Qualität>/channels.m3u


    geht auch.


    Lg


    Willi

    Server:

    Pentium D * 3 TB HDD * Ubuntu 6.06* VDR 1.4.7,2xSkystar2 in XEN DomU

    Clients:

    Compaq Deskpro EN umgebautes easyvdr via pxe boot

    2 SMT 7020s umgebautes Zenslack

    Einmal editiert, zuletzt von tuxinger ()

  • Hi


    Netter Patch, mit der Qualität kann ich das sehr gut gebrauchen.
    Beim kurz überfliegen ist mir aufgefallen dass du den Content-Type der m3u-Playlist auf plain/text gesetzt hast, da würde sich audio/x-mpegurl anbieten.


    Radio erkennt man an vpid==0. m_ListChannel hat vielleicht sowas (nur geraten :) )


    Gruss

  • Danke für den Hinweis, ich werde das mit dem Radio bei Gelegenheit einbauen. Vielleicht versuch ich den Patch auch aufzuteilen, ein wenig zu überarbeiten und einzureichen.


    Lg


    Willi

    Server:

    Pentium D * 3 TB HDD * Ubuntu 6.06* VDR 1.4.7,2xSkystar2 in XEN DomU

    Clients:

    Compaq Deskpro EN umgebautes easyvdr via pxe boot

    2 SMT 7020s umgebautes Zenslack

  • neue Version siehe 1. Post

    Server:

    Pentium D * 3 TB HDD * Ubuntu 6.06* VDR 1.4.7,2xSkystar2 in XEN DomU

    Clients:

    Compaq Deskpro EN umgebautes easyvdr via pxe boot

    2 SMT 7020s umgebautes Zenslack

  • tuxinger: Ich stelle gerade das gesamte HTTP-URL-Handling im streamdev-server um. Das ganze ist schon recht weit gediehen, kann aber noch nicht auf die Menschheit losgelassen werden ;). Mangels Zeit werden auch noch ein paar Wochen ins Land ziehen. Mach Dir daher bitte keine unnötige Arbeit.


    In der neuen Version wird im HTML grundsätzlich mit relativen Links gearbeitet. Das external-IP-Problem stellt sich hier dann nicht mehr. Anders in den m3u-Playlists, denn dort muss - soweit ich das bisher gelernt habe - immer die komplette URL rein. Da wäre Deine Idee mit der konfigurierbaren externen IP eine geschickte Lösung. Werde ich in irgendeiner Form mit einbauen.


    In Anlehnung an den m3u-Patch werden die verfügbaren Kanal-Listen erweitert und untereinander verlinkt: Alle Kanäle, alle Gruppen, Kanäle einer bestimmten Gruppe sowie eine Baumansicht in der eine Gruppe geöffnet ist.


    Für externremux: Wenn Radio auch noch in irgendeiner Form übergeben werden soll, würde ich hier eher HTTP-Parameter einsetzen anstatt den Pfad zu erweitern: http://<vdr-ip>:<streamdev-port>/extern/<kanal>?quality=dsl6000&vpid=0).

  • Hi schmirl,


    Radio soll nicht übergeben werden in der URL, aber sollte an externremux übergeben werden. Hintergedanke ist der, das du beim extrnremux zum Beispiel nicht glücklich wirst mit Radio, weil zB kein Video vorhanden ist, andersrum möchte man zB Video ganz anders handeln (runterrechnen zB während Radio unbearbeitet rausgeht oder so). Wenn das skript das übers Environment erfahren könnte, und die Qualität auch, könnte man ein extern-remux skript für viele Einsatzzwecke schreiben und es müsste nicht jeder das Rad neu erfinden. *


    * auch audio/x-mpegurl , audio/mpeg etc pp also die Mimetypen sind abhängig vom Content.


    Heisst das was du da grade machst die Zuverlässigkeit des Streamings erhöht ? Bei mir bleibt er momentan mal hängen und mal nicht - hab auch keine Idee wie ich hier mehr Infos liefern könnte ...

    VDR User: 87 - LaScala LC14B - LG/Phillipps 6,4" VGA Display | Asrock H61/U3S3 | G630T | 1x 16GB Mobi Mtron 3035 1x WD 750GB 2,5" |1x L4m DVB-S2 Version 5.4

  • schmirl
    Freut mich zu hören das an dieser Front gearbeitet wird, das die Lösung mit der erweiterten URL nicht gerade die schönste ist, ist mir klar, war aber der Weg des geringsten Widerstandes (Ich habe eine schnelle Lösung gebraucht und war zu faul mit GET oder POST Parametern herumzubasteln).
    Das mit den M3u Listen und relativen Links ist korrekt. Wenn ich dir irrgendwie helfen kann lass es mich wissen, bin zwar nächste Woche 4 Tage im Urlaub aber sonst gerne.


    steffen_b


    Das mit dem extra Radio Parameter war ebenfalls so am schnellsten zu lösen ;)

    Server:

    Pentium D * 3 TB HDD * Ubuntu 6.06* VDR 1.4.7,2xSkystar2 in XEN DomU

    Clients:

    Compaq Deskpro EN umgebautes easyvdr via pxe boot

    2 SMT 7020s umgebautes Zenslack

    Einmal editiert, zuletzt von tuxinger ()

  • steffen_b:

    Zitat

    Radio soll nicht übergeben werden in der URL, aber sollte an externremux übergeben werden.


    Klar - :doof


    Zitat

    Heisst das was du da grade machst die Zuverlässigkeit des Streamings erhöht ?


    Nicht wirklich - ich überarbeite nur die HTML-Oberfläche. Die Streams als solche bleiben unverändert. Ich nehme mal an, Dein Log gibt bei Problemen nichts verwertbares her?


    tuxinger:

    Zitat

    Wenn ich dir irrgendwie helfen kann lass es mich wissen, bin zwar nächste Woche 4 Tage im Urlaub aber sonst gerne.


    Danke für das Angebot. Ich kann Dir ja mal vorab den Patch zukommen lassen sobald alles soweit an seinem Platz ist. Wird aber wie gesagt noch dauern - ich habe nicht viel Zeit um am VDR zu basteln.

  • Super :)


    schmirl: Ja - nur das sich ein client connected hat und dann hängt er und nichts passiert - Clients dürfen pausieren und pausieren steht auf immer oder so. Gibt es nen DEBUG Parameter den ich mit reinnehmen kann, so das ich beim nächsten testen mehr Infos liefern kann ?
    Ansonsten sollte man evtl. 409 zurückliefern wenn der Kanal nicht verfügbar ist :) Sollte den Leuten helfen zu erkennen, ob das pausieren richtig eingestellt ist. Ja ich weiss das ich nur klugscheissen aber nicht programmieren kann ;)


    tuxinger: Danke ! werde mir am WE mal das Plugin mit deinem Patch drauf tun und ausprobieren :)

    VDR User: 87 - LaScala LC14B - LG/Phillipps 6,4" VGA Display | Asrock H61/U3S3 | G630T | 1x 16GB Mobi Mtron 3035 1x WD 750GB 2,5" |1x L4m DVB-S2 Version 5.4

  • Zitat

    Original von steffen_b
    Gibt es nen DEBUG Parameter den ich mit reinnehmen kann, so das ich beim nächsten testen mehr Infos liefern kann ?


    Unbedingt das Log des Programms prüfen, das Du zum remuxen verwendest. Ansonsten im streamdev-Verzeichnis:

    Code
    make clean; DEBUG=1 make all


    Danach das neue streamdev-server.so an seinen Platz kopieren und VDR neu starten. Da die Debug-Ausgaben über stderr kommen, ist es sinnvoll, stderr in eine Datei umzulenken.

    Zitat

    Ansonsten sollte man evtl. 409 zurückliefern wenn der Kanal nicht verfügbar ist :) Sollte den Leuten helfen zu erkennen, ob das pausieren richtig eingestellt ist.


    In dem Fall wird doch 409 zurückgegeben ?(. Hat vielleicht das Client-Programm ein Problem die 409-Meldung dem Benutzer anzuzeigen? Habe da keinerlei Erfahrung, da ich den HTTP-Streaming-Teil praktisch nicht nutze (höchstens mal zum Testen).

  • schmirl: Danke - werde ich mal im Auge behalten - momentan funktionierts :)


    tuxinger: Hab mir die aktuelle CVS mit deinem Patch installiert - Mit RADIO muss zwingend die Quali angegeben werden, ansonsten wird der Sender ans Script übergeben :)


    Momentan kämpfe ich grade mit der externremux.sh - ich will das für Radio ein mp3 stream zurückgegeben wird und für Video je nach Quali - ein vernünftiges mpeg ( ovc copy , oac copy -of mpeg in mencoder) oder runtergerechnetes divx :) ) Video ist kein Problem mehr - nur Radio zickt rum - mencoder kann mit PES ohne Video nicht umgehen - also muss ich ffmpeg verwenden - das bleibt aber hängen - /usr/bin/ffmpeg -i - -vn -f mp3 $OUT.avi &>$OUT.log müsste doch eigentlich gehen ... . Hintergrund ist das ich mit mediatomb zu meinem TG100 streamen will :)

    VDR User: 87 - LaScala LC14B - LG/Phillipps 6,4" VGA Display | Asrock H61/U3S3 | G630T | 1x 16GB Mobi Mtron 3035 1x WD 750GB 2,5" |1x L4m DVB-S2 Version 5.4

  • steffen_b
    Stimmt ist ein Bug (ist mir nicht aufgefallen da ich eine Qualität Radio definiert hatte). Werds bis zum nächsten fixen.


    Lg


    Willi

    Server:

    Pentium D * 3 TB HDD * Ubuntu 6.06* VDR 1.4.7,2xSkystar2 in XEN DomU

    Clients:

    Compaq Deskpro EN umgebautes easyvdr via pxe boot

    2 SMT 7020s umgebautes Zenslack

  • Ich hab jetzt mal DEBUG=1 im Plugin Makefile aktiviert und das Plugin nochmal installiert. Die Debugmeldungen kommen auf der Konsole raus (nicht so optimal - aber es geht) - ich kann auch das hängenbleiben reproduzieren - allerdings findet sich auch im Debuglog nichts besonderes. Ich denke aber ich habe eine Ahnung woran es liegt:


    Reproduzieren lässt es sich dadurch das ich den Stream stoppe und wieder starte und wieder stoppe und wieder starte etc pp. - meine Ahnung hat sich dann dahingehend bestätigt als ich mit ps geschaut habe was da noch läuft.


    Code
    ernie:~# ps -ef | grep mencoder | wc -l
    25
    ernie:~# ps -ef | grep cat | wc -l
    5


    Sprich die Prozesse sterben nicht mit dem schliessen des Streams. Max EDIT:Clients = 5 was genau der Anzahl der cat Prozesse entspricht. Danach steht er dann einfach ohne das was passiert - es kommt auch kein 409



    Die Frage die daraus resultiert ist: Ist mein Script verkehrt das die Prozesse hängen oder liegt das am plugin ? Die Vermutung liegt zumindest nahe das hier das Problem liegt. Wenn dem so ist frage ich mich warum er die Connection noch als offen erkennt wenn er eigentlich durch den Deconstructor schon wieder durch ist und das Parentskript nicht mehr läuft. (Jaja ich weiss gefährliches Programmierhalbwissen ;) )



    Das wäre das Skript was ich benutze. Ob ich das trap drinne habe oder nicht interessiert mencoder nicht die Bohne. Der Prozess sitzt dann im interuptible sleep und ein Kill auf den Prozess nützt nichts nur kill -9 hilft.


    Hoffe ich konnte hiermit wertvollve Hinweise auf den Täter liefern ;) Davon abgesehen liefert streamdev nicht den richtigen mime-type sondern immer nur video/mpeg was einige Programme dureinanderbringen dürfte - aber das ist nur ne Randbemerkung.


    EDIT: Ich habe jetzt mal PES und TS ausprobiert - die beiden konnte ich nicht dazu bringen hängen zu bleiben - TS mag nun sogar mein TG100 (über mediatomb) :D - mal weiter schauen.

    VDR User: 87 - LaScala LC14B - LG/Phillipps 6,4" VGA Display | Asrock H61/U3S3 | G630T | 1x 16GB Mobi Mtron 3035 1x WD 750GB 2,5" |1x L4m DVB-S2 Version 5.4

    2 Mal editiert, zuletzt von steffen_b ()

  • Hi,


    hört sich ja vielversprechend an, allerdings funktioniert das bei mir leider nicht. Das Patchen und Kompilieren der aktuellen cvs-Version lief ohne Probleme, aber sobald ich über Extern gehe bekomme ich zB von kaffeine nur das:


    Code
    16:50:21: xine: Kann keinen Demultiplexer für >http://localhost:50930/Extern/DSL6000/107< finden
    16:50:21: input_http: Lesefehler 115
    16:49:50: xine: Inputplugin gefunden: http Plugin


    Ein mencoder-Prozess scheint nicht zu existieren, es dauert aber einige Sekunden mit regelmäßigem Festplatten-Rattern bis diese Fehlermeldung erscheint. Eine /tmp/out.log kann ich auch nicht finden.


    Wenn ich das Extern weglasse also nur http://localhost:50930/107 dann läuft es problemlos.


    Ich verwende vdr-1.4.7, xineliboutput und opensuse 10.2. Außerdem dein Beispielscript von oben.


    Ich hoffe du kannst mir helfen.


    Mfg,
    balta


    Edit:
    Hat sich erledigt, der externremux.sh fehlte die Berechtigung... :lol2

    VDR: AMD A4-3400, 4096 MB RAM, Technisat SkyStar HD2, Technisat Skystar USB HD
    openSUSE 13.1, VDR 2.0.4, vdr-xineliboutput

    2 Mal editiert, zuletzt von balta ()

  • Ich habe leider die Probleme noch nicht lösen können - von Zeit zu Zeit bleiben die Prozesse cat und mencoder bestehen - bin mir sicher das es am script liegt - verstehe nur nicht warum. ffmpeg für radio läuft leider auch nicht.


    Die funktionalität ist aber genial - und in zusammenhang mit dem Playlistfeature ist es absolut genial ! Die neueste Mediatomb Version kann Playlisten importieren und beherscht inotify update - also hab ich mir nen cron gebastelt was die playlist zieht und mediatomb aktualisiert sie dann - mit nem Streamingclient(ich han nen TG100) kann ich nun den Sender auswählen und schauen :) Funktioniert auch af der Xbox besser als xstreamdev :) :) :)


    schmirl: Das m3u Playlistfeature unbedingt übernehmen - ist wesentlich funktionaler als die Webpage - was noch fehlt wäre ein xml frontend das andere Applicationen das darstellen einfacher übernehmen können.

    VDR User: 87 - LaScala LC14B - LG/Phillipps 6,4" VGA Display | Asrock H61/U3S3 | G630T | 1x 16GB Mobi Mtron 3035 1x WD 750GB 2,5" |1x L4m DVB-S2 Version 5.4

  • Hallo,
    also das Phänomen mit den hängenden cat Prozessen hab ich leider auch aber eben auch nur hin und wieder, sobald ich aus dem Urlaub zurück bin werd ich mich mal auf die Suche nach dem Schuldigen machen.


    balta


    bau mal ein

    Code
    logger "externremux called with parameters :$*"


    oben in dein externremux script ein und poste bitte das log bzw wenn DSL6000 übergeben wird passt vom plugin her alles. Übrigens es werden alle Parameter in upper case übergeben um die Groß- Kleinschreibung der url als Fehler auszuschließen.


    Lg aus dem Urlaub


    Willi

    Server:

    Pentium D * 3 TB HDD * Ubuntu 6.06* VDR 1.4.7,2xSkystar2 in XEN DomU

    Clients:

    Compaq Deskpro EN umgebautes easyvdr via pxe boot

    2 SMT 7020s umgebautes Zenslack

Jetzt mitmachen!

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