wie mplayer.sh (0.8.0) anpassen, um mpg-stream von stdin abzuspielen

  • Hallo zusammen,


    ich habe ein kleines Script geschrieben (stream.sh), das Screenshots vom X-Desktop macht und als mpg-Stream ausgibt (ca 2-3 fps, aber sicher noch zu verbessern :D ).


    Diesen kann ich dann an den mplayer übergeben und über die DVB-Karte abspielen mit:


    /video0/skripte/stream.sh| /usr/bin/mplayer - -vo mpegpes -ao mpegpes -afm 9 -demuxer 1


    Soweit funktioniert das ganze auch. (wenn die dvb-Treiber geladen sind und vdr NICHT läuft - sonst device busy)


    Das ganze soll nun über das mplayer-plugin aufgerufen werden. Also habe ich in mplayer.sh folgendes eingefügt

    Code
    if test "$FILE" == "$DVDFiles/X11"; then
                 CMDLINE="/video0/skripte/stream.sh| $MPLAYER - -vo mpegpes $AOUT  $USERDEF -demuxer 1"
        fi


    Wenn ich jetzt als Quelle X11 (Konfiguration analog zu SVCD und DVD) angebe und den mplayer starte, bekomme ich folgende eigentlich ganz gut aussehende Debug-Meldungen:


    Mar 21 16:28:51 mm logger: *** Starting mplayer.sh Version 0.8.0
    Mar 21 16:28:51 mm logger: *** DEBUG: Variable CFGFIL has value "/video0/plugins/mplayer/mplayer.sh.conf"
    Mar 21 16:28:51 mm logger: *** DEBUG: Variable USEAC3 has value "false"
    Mar 21 16:28:51 mm logger: *** DEBUG: Variable AC3AOUT has value "-ao alsa9 -ac hwac3"
    Mar 21 16:28:51 mm logger: *** DEBUG: Variable PAL has value "true"
    Mar 21 16:28:51 mm logger: *** DEBUG: Variable NTSC has value "true"
    Mar 21 16:28:51 mm logger: *** DEBUG: Variable USE_SPEED has value "false"
    Mar 21 16:28:51 mm logger: *** DEBUG: Variable MPLAYER has value "/usr/bin/mplayer"
    Mar 21 16:28:51 mm logger: *** DEBUG: Variable VOP has value "lavc=9000"
    Mar 21 16:28:51 mm logger: *** DEBUG: Variable CACHE has value "4096"
    Mar 21 16:28:51 mm logger: *** DEBUG: Variable CACHESTR has value "-cache 4096"
    Mar 21 16:28:51 mm logger: *** DEBUG: Variable FRAMEDROP has value "true"
    Mar 21 16:28:51 mm logger: *** DEBUG: Variable FDSTR has value "-framedrop"
    Mar 21 16:28:51 mm logger: *** DEBUG: Variable LIRCRC has value "/video/.lircrc"
    Mar 21 16:28:51 mm logger: *** DEBUG: Variable LIRCSTR has value "-lircconf /video/.lircrc"
    Mar 21 16:28:51 mm logger: *** DEBUG: Variable REMOTE has value "-slave -nolirc"
    Mar 21 16:28:51 mm logger: *** DEBUG: Variable USERDEF has value ""
    Mar 21 16:28:51 mm logger: *** DEBUG: Variable XResPAL has value "352 480 528 688 704 720"
    Mar 21 16:28:51 mm logger: *** DEBUG: Variable XResNTSC has value "352 480 512 640 704 720"
    Mar 21 16:28:51 mm logger: *** DEBUG: Variable SLOW_CPU has value "false"
    Mar 21 16:28:51 mm logger: *** DEBUG: Variable CMDLINE has value "/video0/skripte/stream.sh| /usr/bin/mplayer - -vo mpegpes -ao mpegpes -afm 9 -demuxer 1"
    Mar 21 16:28:54 mm vdr[250]: switching to channel 1



    CMDLINE ist also genau dass, was aus der Komandozeile auch funktioniert. Allerdings beendet sich das Plugin sofort wieder... ;(


    Wie muss der Aufruf aussehen, damit der Stream abgespielt wird? :rolleyes:

  • Hab den Fehler gefunden, es lag an dem Aufruf von CMDLINE (mit exec) :wand
    hab das ganze jetzt so gelöst:


    CMDLINE="/video0/skripte/x11_to_dvb.sh"


    und in x11_to_dvb.sh


    /video0/skripte/stream.sh| /usr/bin/mplayer - -vo mpegpes -vc mpegpes -demuxer 1


    stream.sh sieht so aus:

    Code
    while true; do
            DISPLAY=:0 scrot -q 100 /tmp/tmp.ppm  >/dev/null 2>&1
            convert -quality 100 -sample 702x576\! /tmp/tmp.ppm /tmp/tmp.mpg >/dev/null 2>&1
            cat /tmp/tmp.mpg 
    done


    Das ganze funktioniert also :), ist aber leider noch nicht benutzbar, da
    folgende Punkte noch offen sind: ;(



    1) Das ScreenCapture und anschliessende Konvertieren dauert noch
    zu lange (ich komme nur auf ca 2 Bilder pro sekunde). Gibts da vielleicht noch ein günstigeres Bildformat, das sich schneller nach mpeg konvertieren lässt??


    2) Die Verzögerungszeit ist doch recht hoch. Es dauert ca 1-2 sekunden, bis die aktuellen Screenshots angezeigt werden (hängt wahrscheinlich mit 1) zusammen)


    3) Nach dem Beenden des Plugins ist ein Umschalten nicht mehr möglich, erst nach einem Neustart von VDR samt DVB-Treibern


    Eine Lösung sehe ich nur in einem performanten C-Programm, das 1) u. 2) zusammen erledigt. (Habe auch schon nach Möglichkeiten gesucht, z.B. einen VNC-Stream nach mpeg umzuwandeln, leider ohne Erfolg).


    Weitere Optimierungen sind an der Bildschirmauflösung möglich (mit 702x576 müsste nicht mehr skaliert werden)


    Hat irgendjemand noch weitere Ideen dazu? Ich komme da momentan (auch aus Zeitgründen) nicht weiter. Ausserdem mangelt es mir an C-Kenntnissen :(

  • Hi


    Ich kann dir da mangels Programmier-Kenntnissen leider nicht weiterhelfen, aber die Idee finde ich cool. Was haste denn damit vor? Ich könnte mir denken evtl. für einen grafischen INet-Browser oder so. Aber das ganze zieht bestimmt in der jetzigen Variante ziehmlich CPU-Leistung, kann das sein?


    Martini

  • Hi Martini,


    das mit dem Browser wäre eine Möglichkeit....
    Wenn das ganze sauber funktioniert, sind damit alle Möglichkeiten offen (Mailclient, Spiele, Textverarbeitung, ...) :D


    Bis es allerdings mal soweit ist (falls überhaupt), wird es wohl noch ein bisschen dauern.
    Das Problem ist, wie Du richtig erkannt hast, die Rechenleistung... Momentan mache ich einen kompletten Screenshot, konvertiere diesen und schicke ihn dann über den mplayer an de DVB Karte.
    Das wird auch auf einem 3GHz-Rechner nicht flüssig laufen. ;(


    VNC z.B. benutzt das RFB-Protokoll. Da werden nur Änderungen übertragen, womit der Screenshot vom X-Server wegfallen würde. Leider habe ich bis jetzt keine Möglichkeit gefunden, einen RFB-Stream in einen Mpeg-Stream umzuwandeln (ist auch glaube ich nicht möglich...) ;(


    Aber irgendsowas in dieser Richtung würde wohl die Lösung für das Performance-Problem bringen... Irgendjemand eine Idee???

  • Hallo


    Du kannst dich ja mal mit genka (unser Admin) unterhalten, im Chat oder per Mail oder so. Ich hatte neulich auch mit ihm über solche Möglichkeiten gelabert. Er hat auch an der Geschichte, wie du es vorhast, Interesse. Aber wie er selbst sagt, ist das ganze nicht so einfach und ein Fall für 2/3 Mann. Und diese sollten dann proggen können :D . Genka hat, soviel ich weiß, mit C proggen Errfahrung und ihr könntet euch evtl ergänzen. Ist nur ein Vorschlag und soll kein Drängeln sein, aber vielleicht eine Möglichkeit da weiter zu kommen. Kannst ihn ruhig mal kontaktieren, denke ich mal... ist ein Super Kerl.


    Martini

  • Hallo,


    Danke!
    Ich wollte das nur ein bisschen anderes machen - Internet Browser ins system integrieren :D
    man kann sowas wie "links" nehmen und die ausgabe ändern :D
    danach nicht nur für die ausgabe von internet seiten benutzen, sondern gleich die VDR-Menüführung umstellen.
    Leider mit DVB-Karte wird das alles in OSD nicht laufen, darum mit genügend PC-power das auf MPEG umstellen und die karte dafür nutzen.
    Minus - mit playback-karte wird es nicht mehr möglich aufzeichnung zu starten. also dann kommen wir zum schluss, dass vielleicht besser wäre Grafik Video-Out zu benutzen. Und da gibt es schon einen Projekt "MULIMIDIX" :D


    Gruß,
    genka

Jetzt mitmachen!

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