externremux.sh in debian

  • hallo vdr-ler,


    trotz langem lesen habe ich bisher nicht die stelle gefunden, wie ich meine /root/externremux.sh beim starten des vdr in debian einbinden kann.


    der streamdev-server läuft fehlerfrei, d.h. die /etc/vdr/plugins/streamdevhost.conf ist richtig konfiguriert.


    wie (und wo) übergebe ich das skript beim starten des plugins ?


    danke für jede Hilfe

  • Kopiers doch mal nach /usr/bin. Wüsste sonst nicht, wo man da was einbinden müsste. Bei mir läufts. Muss sicher in PATH liegen.

    - Client1: Thermaltake DH 102 mit 7" TouchTFT * Debian Stretch/vdr-2.4.0/graphtft/MainMenuHooks-Patch * Zotac H55-ITX WiFi * Core i3 540 * 4GB RAM ** Zotac GT630 * 1 TB System HDD * 4 GB RAM * Harmony 900 * satip-Plugin

    - Client2: Alfawise H96 Pro Plus * KODI
    - Server: Intel Pentium G3220 * DH87RL * 16GB RAM * 4x4TB 3.5" WD RED + 1x500GB 2.5" * satip-Plugin
    - SAT>IP: Inverto iLNB

  • vdr -P'streamdev-server --remux /root/externremux.sh'


    mfg Thomas

    VDR:
    Hardware: Thermaltake DH102, Zotac ION ITX-F-E, 2Gig Ram, TechnoTrend
    dual DVB-S2 6400, TechnoTrend Connect CT-3650,


    Software: EasyVDR 1.0

  • Hallochen und danke für die Tipps,
    nochmal kurz zur Konfiguration unter Debian (vdr 1.6, DVB-T):


    Habe eine Datei "/etc/vdr/plugins/plugin.streamdev-server.conf" angelegt und in diese dann
    "-r=/etc/vdr/plugins/externremux.sh" reingeschrieben und den vdr neu gestartet.


    Dann habe ich ich über "ps -lea |grep vdr" die Prozessnummer vom runvdr ausgelesen und über "cat /proc/<ProzessNr>/cmdline" rausbekommen, dass er diese Datei korrekt als Parameter geladen hat (-P"streamdev-server-r=/etc/vdr/plugins/externremux.sh").


    So weit, so gut. Aber mehr auch leider nicht.
    Wenn ich die mir empfohlene Doku richtig verstehe bedeutet dies ja, dass das streamdev-Plugin den Datenstrom in das Dateisystem schreiben kann.


    Habe dann eine externremux.sh angelegt und dies hineingeschrieben


    rm -f /tmp/out.avi
    /usr/bin/mkfifo /tmp/out.avi
    cat /tmp/out.avi | /usr/bin/mencoder -vf harddup,softskip,scale -zoom -xy 320 -oac mp3lame -lameopts fast:preset=standard -ovc x264 -x264encopts bitrate=400:log=0 -o /tmp/out.avi & >/tmp/out.log


    Den mencoder Befehl habe ich an Hand einer nach /tmp kopierten Datei mal probiert und dieser funzt prima.


    Dann mal ausrobiert mit http://localhost:3000/Extern/T-8468-258-14 den transkodierten Stream zu öffnen. Geht nicht, syslog zeigt nur an:


    Jan 12 12:09:53 vdrpc vdr: [16013] streamdev-writer thread started (pid=15778, tid=16013)
    Jan 12 12:09:53 vdrpc vdr: [16014] streamdev-livestreaming thread started (pid=15778, tid=16014)
    Jan 12 12:09:53 vdrpc vdr: [16014] ERROR: write failed: Datenübergabe unterbrochen (broken pipe)


    Mmh, mal alles auf den mkfifo Befehl auskodiert und vdr neu gestartet, aber Fehler bleibt gleich. Also wird doch die out.avi gar nicht erzeugt. Geht also das streamdev-Plugin nicht ?

  • Versuch doch mal, dass so etwas rauskommt:


    -P"streamdev-server -r /etc/vdr/plugins/externremux.sh"

    D400 + Opera + Ubuntu 8.04 Server = 14W
    MSI G31M2FD v2.1 + E8400 + 2GB + Ubuntu Server 8.04 = 54W
    EEE Box B202 + Opera + Ubuntu 8.10 Server = 18W

  • na, dann wundere ich mich ja, warum es bei mir funktioniert!? Wobei ich die lange Form verwende:
    -P "streamdev-server --remux=/usr/local/bin/externremux.sh"


    externremux.sh muß natürlich ausführbar sein und meine sieht so aus:

    #!/bin/bash
    TMP=/tmp/externremux-${RANDOM:-$$}
    CMD="mencoder -ovc lavc -lavcopts vcodec=mpeg4:vbitrate"
    CPY="mencoder -of mpeg -ovc copy -oac copy -mpegopts format=mpeg"
    SNDm="-oac mp3lame -lameopts preset=15:mode=3" # sound minimal 15kb/s mono
    SNDs="-oac mp3lame -lameopts preset=standard" # sound standard
    RES="-vf scale -zoom -xy"
    OUT="-o $TMP/out.avi"
    LOG="$TMP/out.log"
    VD=600
    RS=640


    if [ "$1" != "" ];then
    STREAMQUALITY=`echo $1 | tr [:lower:] [:upper:]`
    else
    STREAMQUALITY=QVGA
    fi


    echo $STREAMQUALITY | grep -q "^VARI_"


    if [ $? -eq 0 ]; then
    RS=`echo $STREAMQUALITY | cut -d_ -f2`
    VD=`echo $STREAMQUALITY | cut -d_ -f3`
    STREAMQUALITY=VARI


    if [ "$VD" == "" ]; then # video bandwidth
    VD=600
    fi


    if [ "$RS" == "" ]; then # resolution
    RS=640
    fi
    fi



    mkdir -p $TMP
    mkfifo $TMP/out.avi
    (trap "rm -rf $TMP" EXIT HUP INT TERM ABRT; cat $TMP/out.avi) &


    case "$STREAMQUALITY" in
    "DSL1000") exec $CMD=100 $SNDm $RES 160 $OUT -- - &>$LOG ;;
    "DSL2000") exec $CMD=128 $SNDm $RES 160 $OUT -- - &>$LOG ;;
    "DSL3000") exec $CMD=250 $SNDm $RES 320 $OUT -- - &>$LOG ;;
    "DSL3500") exec $CMD=300 $SNDm $RES 320 $OUT -- - &>$LOG ;;
    "DSL6000") exec $CMD=350 $SNDm $RES 320 $OUT -- - &>$LOG ;;
    "DSL16000") exec $CMD=500 $SNDm $RES 480 $OUT -- - &>$LOG ;;
    "VARI") exec $CMD=$VD $SNDm $RES $RS $OUT -- - &>$LOG ;;
    "QVGA") exec $CMD=500 $SNDm $RES 320 $OUT -- - &>$LOG ;;
    "WLAN11") exec $CMD=768 $SNDs $RES 640 $OUT -- - &>$LOG ;;
    "WLAN54") exec $CMD=2048 $SNDs $OUT -- - &>$LOG ;;
    "LAN10") exec $CMD=4096 $SNDs $OUT -- - &>$LOG ;;
    "COPY") exec $CPY $OUT -- - &>$LOG ;;
    *) touch $TMP/out.avi ;;
    esac

    D400 + Opera + Ubuntu 8.04 Server = 14W
    MSI G31M2FD v2.1 + E8400 + 2GB + Ubuntu Server 8.04 = 54W
    EEE Box B202 + Opera + Ubuntu 8.10 Server = 18W

  • Vielen Dank, dass Du versuchst, mir zu helfen.


    Meine Frage war ja, ob es exakt mit der Abfrage aus der Proc-List wie ich sie mache bei Dir die Zeile mit den Leerzeichen rauskommt.


    Und das Skript spiet erstmal keine Rolle, wenn er zumindest einen out.avi erstellt.

  • Per cat /proc/pid/cmdline ist die eigentliche Kommandozeile eher verstümmelt. Versuche es mal bitte mit:
    # ps -ef | grep vdr
    oder
    # ps -ef | grep extern


    Viel Erfolg!

    D400 + Opera + Ubuntu 8.04 Server = 14W
    MSI G31M2FD v2.1 + E8400 + 2GB + Ubuntu Server 8.04 = 54W
    EEE Box B202 + Opera + Ubuntu 8.10 Server = 18W

  • Jo, mit diesem Befehl kommt raus:
    -P "streamdev-server --remux =/etc/vdr/plugins/externremux.sh"
    also das Plugin ist korrekt geladen.


    Da ja im Log auch
    streamdev-server: EOF reading from externremux
    steht, muss er die Datei auch korrekt lesen können.


    Die Rechte sollten auch stimmen, denn mit "su vdr" kann man sich wie folgt anzeigen lassen:
    -rwxr-xr-x 1 root root 438 12. Jan 13:10 /etc/vdr/plugins/externremux.sh


    Dann starte ich das Skript aus der Konsole als Nutzer vdr (der hat zu Testzwecken eine Shell) und bekomme:


    MEncoder dev-SVN-r26940 (C) 2000-2008 MPlayer Team
    CPU: Intel(R) Pentium(R) Dual CPU E2180 @ 2.00GHz (Family: 6, Model: 15, Stepping: 13)
    CPUflags: Type: 6 MMX: 1 MMX2: 1 3DNow: 0 3DNow2: 0 SSE: 1 SSE2: 1
    Compiled with runtime CPU detection.
    Reading from stdin...
    success: format: 0 data: 0x0 - 0x0
    vdr@xxx:xxx01$ ============ Sorry, this file format is not recognized/supported =============
    === If this file is an AVI, ASF or MPEG stream, please contact the author! ===
    Cannot open demuxer.


    Exiting...


    Ist ja auch völlig verständlich, denn es gibt keine out.avi die von mkfifo erstellt worden ist.
    Soweit scheint alles zu stimmen.


    Dann habe ich die Zeile
    echo funktioniert >> /tmp/externremux.sh.log
    in die externremux.sh reingeschrieben und wie nicht anders zu erwarten schreibt er auch zweimal
    das Wort "funktioniert" in die Log-Datei.


    Nun bin isch fast am Ende aber es ist mir noch eines aufgefallen.


    Rufe ich im Browser http://localhost:3000/Extern auf muss ich nochmal auf die Kanalgruppe klicken, weil ich eine Kanalgruppierung habe. Könnte es daran liegen?


    Und wie rufe ich den Kanal auf, mit seinem konfigurierten Namen (Das Erste, Phoenix) oder der URL, die mir der Browser anzeigt (http://localhost:3000/Extern/T-8468-258-14) ?

  • Vielen Dank für die Hilfe, es war eine Mischung aus vielen Kleinigkeiten die dazu führte, dass externremux nicht funktionierte. Hier jetzt meine externremux.sh, die wirklich schnuffich funktioniert:


    #!/bin/bash
    umask 077
    tmpdir=${TMPDIR-/tmp}/externremux-${RANDOM:-$$}
    FIFO=$tmpdir/out.avi
    OUTLOG=$tmpdir/out.log
    mkdir -p $tmpdir || exit 1
    mkfifo $FIFO
    (cat $FIFO; rm -rf $tmpdir) &
    # mencoder <OPTIONEN> -o $FIFO -- - &>$OUTLOG
    mencoder -vf harddup,softskip,scale -zoom -xy 320 -oac mp3lame -lameopts br=32:q=5:mode=3 -ovc x264 -x264encopts bitrate=300:log=0 -o $FIFO -- - &>$OUTLOG


    Mit DVB-T als Quelle und dem revolunet VLC Plugin kann man richtich schön über eine Webseite Internet-fernsehen ... !

Jetzt mitmachen!

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