[ANNOUNCE] vdr-streamdev-0.5.0 / 0.4.0

  • Hallo zusammen,


    unter http://streamdev.vdr-developer.org gibt's endlich neue Versionen des Plugins.


    Streamdev-0.4.0 ist das letzte Release für VDR 1.4.x. Es wird keine Updates mehr für alte VDRs geben. Für aktuelle VDR Versionen bitte streamdev-0.5.0 verwenden.


    WICHTIG: Bitte unbedingt die Hinweise zur Aktualisierung aus dem Plugin README beachten (Kapitel Upgrading). Auch wenn bisher schon die CVS-Version streamdev-0.5.0pre im Einsatz war, sind folgende Schritte erforderlich:


    * Das Konfigurationsverzeichnis für streamdev-server lautet nun $VDRCONFDIR/plugins/streamdev-server/. Darin muss sich die Datei streamdevhosts.conf befinden. Zugleich wird in diesem Verzeichnis auch das externremux.sh-Script erwartet, sofern über Plugin-Parameter kein anderer Pfad angegeben wurden.


    * Es ist nun Aufgabe des externremux-Skripts, alle HTTP-Header auszugeben. Wer sein altes externremux.sh behalten will, muss zumindest den Content-Type Header sowie eine Leerzeile ausgeben. Am besten aber gleich auf das neue externremux.sh wechseln, das den streamdev Quellpaketen beiliegt. Es behebt diverse Probleme mit dem Beenden des Skripts und ermöglicht es über URL-Parameter direkten Einfluss auf den Remux-Vorgang zu nehmen. Der URL-Pfad für externremux wurde von EXTERN nach EXT geändert.


    Eine Liste aller Änderungen enthält die HISTORY. Hier ein kurzer Überblick über die wichtigsten neuen Features von streamdev-0.5.0:
    - HTTP Authentifizierung
    - CGI-ähnliches Interface und URL-Parameter für externremux.sh
    - komplett überarbeitetes externremux.sh
    - Multicast Streaming Server


    Mein Dank gilt allen die einen Beitrag zu streamdev geleistet haben. Die neuen Releases haben lange auf sich warten lassen, dafür möchte ich mich an dieser Stelle entschuldigen. Ich werde versuchen, zukünftig häufiger neue Versionen zu veröffentlichen, nehmt mich aber bitte nicht beim Wort ;)


    Frank

  • Fehler lag wohl am neuen externremux.sh, werd mir das nochmal genauer ansehen. TS-Streaming funktioniert problemlos!


    Danke!

  • Bei der Verwendung der EXT bekomm ich folgenden Fehler:

    Code
    Jul 19 18:31:28 vdr vdr: [3533] caught signal 13
    Jul 19 18:31:28 vdr vdr: [3533] ERROR: write failed: Datenübergabe unterbrochen (broken pipe)


    Alles andere funkt super!
    Jemand eine Idee?

  • Hallo schmirl,


    "Danke" für das Plugin.


    In der "externremux.sh" hat es noch einen Zahlendreher.

    Code
    WLAN45|wlan45)     VBR=2048; ABR=128; WIDTH=;;


    sollte das nicht

    Code
    WLAN54|wlan54)     VBR=2048; ABR=128; WIDTH=;;


    sein?


    Bin auch am testen.


    Gruss
    Wolfgang

    TT S2-6400 - saa716x kompilieren unter 20.04(Focal)

  • Zitat

    Original von ciax
    schmirl: fettes DANKE von meiner seite!


    Dem kann ich mich auch nur anschliessen.


    Ohne ging garnicht mehr. ;)


    Gruß Stefan

    Server VDR: MLD 4.0.1-64 ASRock Q1900M, 4 GB RAM, 2 x 2TB HDD, 1 x CineS2 6.5
    Streaming-Client1: MLD 4.0.1-RPI Raspberry Pi B+
    Streaming-Client2: MLD 4.0.1-RPI Raspberry Pi B+
    Streaming-Client3: MLD 4.0.1-RPI Raspberry Pi 2 B

  • Wo ist der Bedank-O-Mat?


    Danke Schmirl, läuft bisher prima :)

    SAT Hardware: Gibertini SE75 | DuraSat Dur-Line UK-24 | DD OctopusNET V2 Rack (Firmware 1.1.6) mit MaxS8
    Server: Asus M5A78L-M/USB3 | Sempron 145@2Cores | 8GB ECC RAM | PicoPSU | Debian Stretch 64Bit | VDR 2.4.5 mit SAT>IP, epgsearch, live, markad
    Clients: RaspberryPI 2/3 | Yocto Poky Linux (Openembedded) 3.2+git | Linux Kernel 5.4.72 | VDR 2.4.5 mit SAT>IP, RpiHDDevice, SkinDesigner, Remote, Extrecmenu, Femon, Mlist


    R.I.P: Gigaset M740 mit VDR von open7x0.org

  • sehr schön, läuft soweit...aber,
    wo und wie gebe ich denn jetzt die speziellen Parameter für X264, in der externremux.sh, ein?
    Ein kleines Beispiel wäre nett
    z.B:

    Code
    -x264encopts ref=2:subme=4:bitrate=200:threads=2:turbo


    im Syslog erscheinen ausserdem folgende Fehlermeldungen:


    Code
    externremux.sh: get_path("config") problem


    und

    Code
    externremux.sh: Seek failed

    Linux Mint Helena (Ubuntu 9.10),
    Athlon X250 2x3.0 GHZ/4GB RAM
    VDR 1.6.x, Streamdev-Server 0.5, Live 0.2 (Eigenkompilate)

    Einmal editiert, zuletzt von vel_tins ()

  • ich glaube, ich habe noch den ein oder anderen BUG im Script gefunden..;-)


    1. Muß es hier nicht anstelle
    ${VBR:+bitrate=$ABR}
    ${VBR:+bitrate=$VBR}


    und hier statt
    VOPTS=${REMUX_PARAM_VOPTS}
    VOPTS=${REMUX_PARAM_VOPTS:-$VOPTS}
    heissen?

    Linux Mint Helena (Ubuntu 9.10),
    Athlon X250 2x3.0 GHZ/4GB RAM
    VDR 1.6.x, Streamdev-Server 0.5, Live 0.2 (Eigenkompilate)

    Einmal editiert, zuletzt von vel_tins ()

  • @all: Danke für den regen Zuspruch :lovevdr. Das freut das Entwicklerherz :]


    vel_tins:

    Zitat

    1. Muß es hier nicht anstelle
    ${VBR:+bitrate=$ABR}
    ${VBR:+bitrate=$VBR}


    Korrekt - Danke für den Hinweis. Eine Videobitrate in Höhe der Audiobitrate geht vermutlich ein wenig zu Lasten der Bildqualität...


    Zitat

    und hier statt
    VOPTS=${REMUX_PARAM_VOPTS}
    VOPTS=${REMUX_PARAM_VOPTS:-$VOPTS}
    heissen?


    Für die Variable VOPTS gibt es keinen vordefinierten Wert. Die wird ausschließlich über URL-Parameter gefüllt. Also kein Fehler im Skript.


    Zitat

    wo und wie gebe ich denn jetzt die speziellen Parameter für X264, in der externremux.sh, ein?
    Ein kleines Beispiel wäre nett z.B:

    Code
    -x264encopts ref=2:subme=4:bitrate=200:threads=2:turbo


    Maximal notwendiger URL:

    Code
    http://mein_vdr:3000/ext;VC=x264;VOPTS=ref=2:subme=4:threads=2:turbo;VBR=200/kanalnummer


    Entfallen kann:

    • ext - sofern es im Plugin-Setup als Default-Format für HTTP eingestellt ist
    • ;VC=x264 - sofern in externremux.sh MENCODER_VC=x264 gesetzt ist
    • :threads=2 - wenn das von externremux.sh ansonsten gesetzte threads=auto das selbe bewirkt
    • ;VBR=200 - wenn es auch einer der über die Variable QUALITY auswählbaren vordefinierten Bitraten tut


    Daher minimaler URL:

    Code
    http://mein_vdr:3000/;VOPTS=ref=2:subme=4:turbo/kanalnummer


    Da Du Dich im Gegensatz zu mir offenbar mit mencoder auskennst ;): Wäre es sinnvoll, die Parameter ref, subme und turbo mit passenden Default-Werten vorzugeben? Wie das funktioniert, siehst Du in Zeile 103 am Beispiel des threads-Parameters:

    Code
    $(hasOpt "$VOPTS" threads || echo "threads=auto")


    Zu Deutsch: Wenn die Option threads nicht über URL-Parameter VOPTS vorgegeben ist, verwende threads=auto.
    Wenn es keinen für praktisch jeden passenden Default gibt, müsste man zusätzlich entsprechende Defaultparameter am Beginn des Skripts definieren. Am Beispiel threads-Parameter:

    Code
    MENCODER_X264_THREADS=auto
    ...
    $(hasOpt "$VOPTS" threads || echo "threads=$MENCODER_X264_THREADS")


    Verbesserungsvorschläge und Erweiterungen zu den bisherigen externen Remuxer sind herzlich willkommen. Auch wer mit anderen Programmen als mencoder und ffmpeg2theora Erfahrungen hat: ich baue das gerne ein. Vielleicht wird's was mit der eierlegenden Wollmilchremux.


    Zitat

    im Syslog erscheinen ausserdem folgende Fehlermeldungen:

    Code
    externremux.sh: get_path("config") problem
    externremux.sh: Seek failed


    Die kommen beide von mencoder. Seek failed ist unvermeidlich, da im Live-Stream nicht gespult werden kann. Was uns mencoder mit get_path("config") sagen will - keine Ahnung.

  • hi,

    Zitat

    Für die Variable VOPTS gibt es keinen vordefinierten Wert. Die wird ausschließlich über URL-Parameter gefüllt. Also kein Fehler im Skript


    ok, sehe ich ein...
    ich habe allerdings

    Code
    VOPTS=${REMUX_PARAM_VOPTS:-$VOPTS}


    so belassen und unter "GENERAL CONFIG START"
    folgenden Eintrag hinzugefügt:

    Code
    VOPTS=ref=2:subme=4:threads=2:turbo


    was denn auch prima funktioniert.
    weiterhin habe ich noch folgendes leicht geändert, damit die Audio-Bitrate auch wirklich dem eingestellten Wert entspricht:

    Code
    ${ABR:+cbr:br=$ABR}


    ansonsten war die Bitrate immer etwas zu hoch, sprich:
    48 statt eingestellter 32 K/bit, bzw. 96 statt 64 usw.
    und noch eine Änderung:

    Code
    ${WIDTH:+-vf scale=$WIDTH}


    was zusammen mit folgendem Eintrag

    Code
    WIDTH=320:-10;;


    bewirkt; das sowohl Höhe als auch Breite durch 16 teilbar sind und somit x264 nichts zu meckern hat..;-)
    Alles zusammen, ergibt dann folgenden String:

    Code
    mencoder-mt -cache 128000 -ovc x264 -x264encopts ref=2:subme=4:threads=2:turbo:bitrate=200 -oac mp3lame -lameopts mode=3:cbr:br=32 -vf scale=320:-10


    Im VLC rufe ich lediglich folgende Adresse auf:#

    Code
    http://xxxxx.dyndns.info:3000/ext/29


    Zitat

    Da Du Dich im Gegensatz zu mir offenbar mit mencoder auskennst Augenzwinkern : Wäre es sinnvoll, die Parameter ref, subme und turbo mit passenden Default-Werten vorzugeben?


    Ich denke nicht sinnvoll, da die Parameter stark von der CPU Power des VDR abhängen..besser ist es (vielleicht), es über "VOPTS" einzustellen, s.o.


    PS: Ich würde trotzdem gern meine "alte" externremux.sh verwenden, was müßte ich dahingehend ändern?
    Warum? Meine CPU hat leider ein Problem mit dem zweiten Kern und ich habe den Mencoder über das alte Script immer mit "taskset 01 mencoder <optionen>" gestartet, was bewirkt das mencoder nur den ersten CPU-Kern benutzt.
    Leider funktioniert das mit dem neuen Script nicht.

    Linux Mint Helena (Ubuntu 9.10),
    Athlon X250 2x3.0 GHZ/4GB RAM
    VDR 1.6.x, Streamdev-Server 0.5, Live 0.2 (Eigenkompilate)

    5 Mal editiert, zuletzt von vel_tins ()

  • Individuelle Default-Parameter sind offenbar sinnvoll. Habe das Skript erweitert, so dass man diese für alle mencoder Audio- und Videocodecs hinterlegen kann. Jeder einzelne Parameter aus der Defaults-Liste lässt sich aber immer noch über den URL-Parameter VOPTS bzw. AOPTS einzeln überschreiben. Um Dein Beispiel aufzugreifen: Im überarbeiteten Skript definierst Du

    Code
    MENCODER_X264_VOPTS=ref=2:subme=4:threads=2:turbo


    Über den URL-Parameter VOPTS=threads=auto kannst Du threads überschreiben, ref, subme und turbo sind immer noch gesetzt.


    Zitat

    weiterhin habe ich noch folgendes leicht geändert, damit die Audio-Bitrate auch wirklich dem eingestellten Wert entspricht:

    Code
    ${ABR:+cbr:br=$ABR}


    Geht jetzt mit

    Code
    MENCODER_LAME_AOPTS=cbr


    Die Bitrate selbst hätte ich weiter mit preset= angegeben. Falls das nicht mehr oder weniger gleichwertig ist, ändere ich das aber gerne in br= ab.


    Zitat

    WIDTH=320:-10 bewirkt; das sowohl Höhe als auch Breite durch 16 teilbar sind und somit x264 nichts zu meckern hat..;-)


    Habe das -xy WIDTH entfernt und verwende stattdessen scale=WIDTH:-3 bei VC=lame und scale=WIDTH:-11 bei VC=x264 (-3 und -11 erschienen mir passender als -2 und -10, lasse mich da aber gerne eines besseren belehren).


    Zitat

    PS: Ich würde trotzdem gern meine "alte" externremux.sh verwenden, was müßte ich dahingehend ändern?
    Warum? Meine CPU hat leider ein Problem mit dem zweiten Kern und ich habe den Mencoder über das alte Script immer mit "taskset 01 mencoder <optionen>" gestartet, was bewirkt das mencoder nur den ersten CPU-Kern benutzt.
    Leider funktioniert das mit dem neuen Script nicht.


    Lag an den Anführungszeichen rund um den $MENCODER-Aufruf. In der überarbeiteten Fassung sollte es mit folgender Definition funktionieren:

    Code
    MENCODER='taskset 01 mencoder'


    Um Deine alte externremux.sh fit zu machen, musst Du folgende Zeilen vor dem mencoder-Aufruf ausführen:

    Code
    echo -ne 'Content-type: video/mpeg\r\n'
    echo -ne '\r\n'
  • Zitat

    Um Deine alte externremux.sh fit zu machen, musst Du folgende Zeilen vor dem mencoder-Aufruf ausführen: code: 1: 2: echo -ne 'Content-type: video/mpeg\r\n' echo -ne '\r\n'


    Ich habe es vor den mencoder Aufruf kopiert, funktioniert leider nicht.
    Es scheint, als wird die externremux komplett ignoriert.
    Bitte um Hilfe, bzw. eine Beispiel externremux nach altem Schema...danke im voraus.
    Die neue externremux funktioniert eigentlich recht gut, allerdings wirkt sich jedes Setting, z.B. Änderung der Framerate oder der Kodierungsoptionen "global" aus.
    Ich hatte in meiner alten externremux etwa 15 verschiedene Konfigurationen, die ich jeweils über den Parameter in der URL gestartet habe.
    (je nach Tagesform meines Client-Internet Anschlusses) bzw. nach Art des gestreamten Materials.
    d.h.: unerschiedliche Frame und Bitraten, Codecs, Encoderoptionen, usw...
    Ich (nur meine persönliche Empfindung), fand das wesentlich einfacher zu konfigurieren und übersichtlicher.
    Auch das testen gestaltete sich einfacher.

    Linux Mint Helena (Ubuntu 9.10),
    Athlon X250 2x3.0 GHZ/4GB RAM
    VDR 1.6.x, Streamdev-Server 0.5, Live 0.2 (Eigenkompilate)

  • Zitat

    Ich habe es vor den mencoder Aufruf kopiert, funktioniert leider nicht.
    Es scheint, als wird die externremux komplett ignoriert.
    Bitte um Hilfe, bzw. eine Beispiel externremux nach altem Schema...danke im voraus.


    Abgesehen von der Ausgabe der HTTP-Header über die besagten echo-Befehle kann Dein altes Skript bleiben wie es ist. Vielleicht bringt die folgende Zeile am Anfang des Skripts Licht ins Dunkel (schickt Fehlermeldungen ins Log)

    Code
    exec 2> >(logger -t "vdr: [$$] ${0##*/}" 2>&-)


    Zitat

    Die neue externremux funktioniert eigentlich recht gut, allerdings wirkt sich jedes Setting, z.B. Änderung der Framerate oder der Kodierungsoptionen "global" aus.
    Ich hatte in meiner alten externremux etwa 15 verschiedene Konfigurationen, die ich jeweils über den Parameter in der URL gestartet habe.


    Schau Dir mal den QUALITY-Parameter an. Abhängig von dessen Wert wird ABR, VBR und WIDTH gesetzt. Du könntest QUALITY erweitern oder Dir analog dazu einen eigenen Parameter definieren und verschiedene Sätze von z.B. VC, VOPTS, AC und AOPTS bereitstellen. Das ließe sich auch in Abhängigkeit von Client-IP (Internet, LAN oder WLAN) oder User-Agent-Header (normaler Web-Browser oder Handy) automatisieren. Verschiedene Sätze je Kanal oder Kodierungsverfahren (H.264, MPEG2 oder nur Audio) sind ebenfalls möglich.


    Grundsätzlich hast Du natürlich recht: das Skript ist auf den ersten Blick wesentlich komplizierter wie früher. Im großen und ganzen sollte es aber damit getan sein, die Variablen in der CONFIG Sektion anzupassen. Im Gegenzug kann man on-the-fly über die URL alle möglichen Parameter (remote) ändern, ohne das Skript anpassen zu müssen. Und damit meine ich nicht nur die "vordefinierten" Parameter wie die Bitrate sondern über die VOPTS/AOPTS auch jeden mencoder Parameter des jeweiligen Codecs. Aber wie alles Neue muss das Skript erst noch ein wenig reifen. Da bin ich für Dein Feedback sehr dankbar. Natürlich habe ich vollstes Verständnis dafür, wenn Du lieber bei Deinem bisherigen, offenbar gut funktionierenden Skript bleibst.

  • hallo,
    das Log sagt folgendes:

    Code
    streamdev-server: Invalid externremux.sh parameter H264


    Aufgerufen habe ich das ganze mittels VLC mit folgendem String:

    Code
    http://xxxxx.dyndns.info:3000/ext;H264/29

    Linux Mint Helena (Ubuntu 9.10),
    Athlon X250 2x3.0 GHZ/4GB RAM
    VDR 1.6.x, Streamdev-Server 0.5, Live 0.2 (Eigenkompilate)

  • Ah - ok - daran hatte ich nicht gedacht. Parameter müssen immer auch ein '=' beinhalten. Probier's bitte mit

    Code
    http://xxxxx.dyndns.info:3000/ext;H264=/29


    Im Skript bekommen alle URL-Parameter den Präfix REMUX_PARAM_, in Deinem Fall also REMUX_PARAM_H264.

Jetzt mitmachen!

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