XINE VDPAU + Mediaplayer?

  • Ich werde mir wohl jetzt erstmal eine Übergangslösung bauen, die darin besteht das xine-Plugin und xineliboutput zusammen zu benutzen.


    Ich hab es gerade schonmal angetestet und es sieht schonmal brauchbar aus.


    Folgendes hab ich vor:
    - VDR wird mit xine und xineliboutput-Plugin gestartet
    - xine wird gestartet mit MRL vom xine-Plugin
    - vdr-sxfe wird gestartet
    - Primäres Device ist xine
    - xineliboutput bekommt kein Signal, da es nicht primäres Device ist
    - Wiedergabe wird gestartet, nun wird das Primäre Device auf xineliboutput umgestellt
    - Nach der Wiedergabe wird das primäre Device wieder auf das xine-Plugin gesetzt


    Erster Testlauf sah gerade schon recht gut aus, ein paar Kleinigkeiten müssen jetzt noch erledigt werden.
    Zur Zeit habe ich auf dem normalen Fernsehbild das "No Signal" vom xineliboutput. Das Primäre Device wird noch nicht automatisch geschaltet, deswegen wird das OSD noch über xine ausgegeben und das Video-Bild der Wiedergabe überlagert noch das OSD. Das "Kein Signal" Bild von xine scheint im Hintergrund durch die schwarzen Flächen des Films.


    Das Umschalten des Device sollte man ja im xineliboutput-Plugin eingebaut bekommen.
    Die "Keine Signal"-Bilder beider Plugins müssen entfernt werden. Bei xine gibt es ja dort die Möglichkeit in dem man das mitgelieferte Schwarz-Bild nutzt, bei xineliboutput müsste ich noch gucken wie es dort geht.

  • Es funktioniert schonmal sehr gut. Auch das automatische Umschalten des Device funktioniert.


    Ich schaffe es nur irgendwie nicht das "No Signal" von xineliboutput wegzubekommen, kann mir da jemand einen Tip geben?


    Edit: Habs gefunden unter /etc/vdr/plugins/xineliboutput/ muss man eine nosignal.mpg ablegen, dafür nimmt man dann die black_720x576.mpg aus dem Plugin-Verzeichnis. Wenn keine Datei abgelegt ist, wird ein fest ins Plugin kompiliertes mpg genommen.

  • Ich bin derzeit auch auf der Suche nach einer Alternative zu mplayer. Ich hatte da auch die Tage einen Thread aufgemacht. Xine bietet eine rudimentäre Steuerung via Netzwerk, aber an interessante Daten wie z.B. den DVD-Titel fürs OSD kommt man nicht ran.


    Eine Impelmentierung des MPlayer Slave modes wäre da eine schöne Lösung, da man das mplayer plugin weiterhin als DVD/CD Player nutzen könnte.


    Ich habe mal etwas im Code von xine plugin rumgewühlt und xineExternal.c einen play Befehl gefunden. Mittels

    Code
    echo "play dvd://" > /tmp/vdr-xine/external.control


    fängt dann auch mein DVD-Laufwerk an zu laufen, und die Ausgaben xine deuten darauf hin, das die DVD gelesen wird. Nur als Ausgabe habe ich immer noch den zuvor eingestellten Sender.


    Vom Gefühl her würde ich sagen, das wäre auch die richtige Stelle um den Code zum Parsen der Slave-Befehle einzubauen. Einen Parser könnte ich auch basteln, nur mit den Internas von xine-lib kenne ich micht nicht aus.

    VDR 2.6.5 Kodi 18.6-Leia
    Debian GNU/Linux 12, Thermaltake DH102, ASUS PRIME N100I-D, CineS2 V6.5.
    Plugins:
    radio v1.1.0-6-g468280f , trayopenng 1.0.2, fritzbox 1.5.3, cdplayer 1.2.4, femon v2.4.0-GIT-d366856, menuorg 0.5.2, extrecmenung v2.0.4, streamdev-server v0.6.3, cecremote 1.5.0, osd2web 0.3.2, softhddevice v2.0.6-GIT97e825d

  • Das man durch das Schwarz "durchgucken" kann, ist irgendeine Einstellung in der xorg.conf. Hab da nämlich gerade mal probiert ein bischen zu optimieren um die Framedrops im LiveTV loszuwerden (was anscheinend auch noch nicht 100% geklappt hat).
    Jetzt habe ich, wenn ich vdr-sxfe nach xine starte, nur noch schwarzes Bild- Ton funktioniert natürlich noch.

  • Das "durchgucken" hängt mit der Farbtiefe zusammen. Bei 16 funktioniert es, bei 24 nicht. Allerdings habe ich bei 16 nun gemerkt, das die Farbverläufe bei großen Farbflächen komisch aussehen. Dies tritt aber anscheinend nur bei xineliboutput auf.


    Gab es nicht die Möglichkeit auf vdr-sxfe zu verzichten und stattdessen xine mit einer bestimmten MRL zu starten um das Bild von xineloboutput zu erhalten? Wenn ja wie würde das funktionieren?
    Dann könnte ich zusätzlich zu der Device-Umschaltung noch zwischen den MRLs der beiden Ausgabe-Plugins wechseln. Womit der Workaround dann perfekt wäre.

  • So, habs hinbekommen. Nun bin ich 100% zufrieden mit dem Workaround. Die Farbtiefe in der xorg.conf darf nun auch 24 betragen.


    Falls es jemand nachbauen möchte ein kleines Howto.


    Ich nutze nun zur normalen Wiedergabe das Xine-Plugin, als Media-Player nutze ich das xineliboutput-Plugin.
    Dazu wird beim Start einer Datei im Media-Player das Ausgabe-Device auf xineliboutput gesetzt und xine wird per xine-remote auf die MRL vom xineliboutput gesetzt.
    Beim Beenden der Wiedergabe wird das Device wieder auf xine-Plugin gesetzt, 2 Sekunden gewartet (sonst kann xine den Fifo nicht öffnen) und zum Schluss wird wieder die MRL auf die vom xine-Plugin gesetzt.


    Die Datei media_player.c aus dem xineliboutput-Plugin muss ein kleines bischen verändert werden. Dabei bitte auf die Pfade und die Device Nummern achten.
    Device 4 ist bei mir xineliboutput und Device 3 ist das xine-Plugin.


    Es muss oben bei den include dies eingefügt werden:

    Code
    #include <stdlib.h>


    Die beiden Funktionen finden sich bei mir ab Zeile 527 und sehen nun wie folgt aus:



    VDR wird nun mit xine und xineliboutput-Plugin gestartet.
    Beispiel:

    Code
    vdr -Pxine -P'xineliboutput -l none -r 37890'


    Jetzt starte ich xine, dabei ist es wichtig das der Parameter --network übergeben wird, sonst funktioniert die Umschaltung über xine-remote nicht.


    Beispiel:

    Code
    /usr/bin/xine -f -V vdpau -A alsa -D --post vdr --post vdr_video --post vdr_dio --verbose=2 --no-logo --no-splash --no-gui --network vdr:/tmp/vdr-xine/stream#demux:mpeg_pes &


    Viel Spass beim nachmachen und Filme schauen ;)

  • Hi,


    Vielen dank für deine posting.


    Ich hab's auch mal versucht..., leider geht es noch nicht ganz.
    Zuerst musste ich, laut man xine, ein passwd file im ~/.xine erstellen.
    Ohne dieser file könnte xine-remote sich nicht mit dem xine server verbinden.


    Nun kan ich ebenfalls das xine mediaplayer menu öffenen aber beim start vom player schaltet er nach etwa 1 sec. wieder zurück nach xine, Etwas geht da falsh.


    Wann ich ein foto schaue, wird das OSD angezeigt und der player stopt NICHT. Allerdings gibt es kein bild.


    xine-remote gibt keine logging infos, hab ich im code zu einem logfile umgeleitet:
    "& >/var/log/vdr/xine-remote.log"
    Auch xine gibt mir nichts brauchbares.


    Welche versionen von xine-lib, xine-ui und xineliboutput hast du verwendet ?


    Carel

  • Wenn er direkt zurückschaltet wird wahrscheinlich der Film angestartet bevor das Device von xineliboutput bereit ist.


    Probier mal hinter cDevice::SetPrimaryDevice(4); noch ein sleep(2); einzufügen.


    Ich nutze xine-lib 1.2 und xine-ui aus dem hg und xineliboutput aus dem cvs.

  • Hallo !


    Jetzt started es !


    Aber leider beim beenden ein segfault:


    Code
    Jan  8 06:28:27 woonkamer vdr: [30790] cVideoRepacker: operating in MPEG1/2 mode
    Jan  8 06:29:09 woonkamer vdr: [30700] setting primary device to 6
    Jan  8 06:29:11 woonkamer vdr: [30737] [xine..put] Client 0 connected: 127.0.0.1:57150
    Jan  8 06:29:11 woonkamer vdr: [30700] saved setup to /etc/vdr/setup.conf
    Jan  8 06:29:12 woonkamer vdr: [30700] [xine..put] Preferred SPU language: (none)
    Jan  8 06:29:22 woonkamer vdr: [30700] setting primary device to 5
    Jan  8 06:29:22 woonkamer vdr: [30700] [xine..put] cXinelibOsdProvider: shutting down !
    Jan  8 06:29:23 woonkamer kernel: [463279.685585] vdr[30747]: segfault at 5a6cc968 ip b4b001ed sp aa68d462 error 6


    Auch einmal im lcdproc module... Veilleicht geht etwas anderes schief.

  • nabend maniac,


    erstmal großes lob für deine arbeit, hatte selbst schon einige versuche unternommen den mediaplayer von xineliboutput unter xine zu nutzen leider immer ohne erfolg. hätte da ein paar fragen und vorschläge.


    vorweg ( getestet mit vdr 1.7.12, xine-lib-1.2, vdr-xine 0.9.3, xineliboutput cvs), bei mir will die xineliboutput ausgabe nicht starten. primarydevice wird gewechselt (zumindest laut log, auf dem bildschirm bleibt vdr-xine), mediafile gestartet aber es kommt nichts auf dem bildschirm. im log steht :


    Code
    Feb  2 22:00:11 bex-main vdr: [14745] setting primary device to 1
    Feb  2 22:00:11 bex-main vdr: [14745] [xine..put] cPlaylist: using up-to-date ID3 cache
    Feb  2 22:00:11 bex-main vdr: [14745] saved setup to /usr/src/VDR/etc/setup.conf
    Feb  2 22:00:11 bex-main vdr: [14783] Text2Skin: menu display update thread ended (pid=14745, tid=14783)
    Feb  2 22:00:11 bex-main vdr: [14745] [xine..put] cPlaylist::EscapeMrl('/usr/src/VDR/video/Brainstew.mp3')
    Feb  2 22:00:11 bex-main vdr: [14745] [xine..put]     --> '/usr/src/VDR/video/Brainstew.mp3'
    Feb  2 22:00:11 bex-main vdr: [14745] [xine..put] cXinelibPlayer playing /usr/src/VDR/video/Brainstew.mp3 (FAIL)
    Feb  2 22:00:12 bex-main vdr: [14745] [xine..put] cXinelibPlayerControl: EndOfStreamReached
    Feb  2 22:00:12 bex-main vdr: [14745] setting primary device to 2


    weiß einfach nicht was falsch läuft, auch ein "sleep(2)" bei openplayer hat nicht geholfen.
    Hast du da eine idee wo der fehler liegen könnte ?


    hätte trotzdem noch 2 "verbesserungsvorschläge", die device zuordnung könnte man automatisieren.


    zb. bei openplayer:


    Code
    cDevice::SetPrimaryDevice(cDevice::NumDevices());


    xineliboutput sollte ja, da zuletzt gestartet das letzte device sein, also die ersten devices sind die dvb karten dann kommt vdr-xine und als letztes xineliboutput. ( ist bei mir zumindest so)


    falls das immer zutrifft sollte xine immer das vorletzte device sein also bei closeplayer:


    Zitat

    cDevice::SetPrimaryDevice(cDevice::NumDevices() -1);


    um am anfang kein "#include <stdlib.h>" setzen zu müssen könnte man vdrs kommando "SystemExec" benutzen, also die systembefehle mit "SystemExec" starten statt mit "system"

  • Danke, die Verbesserungen hören sich gut an.


    Es sieht so aus, als ob bei dir das umschalten der MRL in xine nicht klappt. Teste bitte mal ob du, bei laufendem VDR und xine, auf der Console mit dem Aufruf von

    Code
    /usr/bin/xine-remote


    eine Verbindung zum xine Netzwerk-Interface herstellen kannst.


    Wenn es klappt sollte etwas in der Art erscheinen:


    Code
    ? for help.
    hjslfs-1.2.8 xine-ui 0.99.6cvs remote server. Nice to meet you.
    
    
    
    
    
    
    [localhost:6789]xine-remote >
  • Nabend Maniac,


    danke für die antwort, dein hinweis hatte ich schon getestet, das funktioniert, auch ein per console abgesetztes:


    Code
    /usr/bin/xine-remote --command mrl play xvdr://localhost:37890


    geht ohne fehlermeldung, jedoch passiert am bildschirm nichts.


    so nebenbei, das "/usr/bin" sollte eigendlich auch überflüssig sein. Wenn etas unter /usr/bin liegt weiß das system das eigentlich, so dass ein direktes "xine-remote" reichen sollte.


    bin wirklich ratlos, alles scheint anstandslos zu laufen, jedoch wird trotzdem nicht auf xineliboutput gewechselt. Werd es am wochenende nochmal genauer testen.


    MfG


    bex

  • Ich wollte diesen Thread mal wiederbeleben. Mir fehlen diese Funktionen doch schon sehr, spulen, pause etc. wäre schon wichtig für einen
    HTPC.


    Ohne die gezeigte Lösung hier schlecht zu reden, würde mir eine integrierte Lösung von rnissl besser gefallen.


    Reinhard: Wie können wir Dich ermuntern ??

  • neumann2k


    An den Wunsch schließe ich mich doch mal an. Das xine-plugin mit Ausgabe über xine-ui funktioniert einfach gut, wie auch der xineplayer@mplayer-plugin.


    Beim xineplayer würde mir ja nicht viel fehlen zu meinem Glück:

    • Pause
    • Eine Art beschleunigten Vor-/Rücklauf, gerne auch 1min Sprünge Vor- und Rückwärts
    • Und zu einem Fortschrittsbalken höre ich mich auch nicht nein sagen ;D

    Reinhard, xine-plugin mit xineplayer ist ein tolles Stück Software und es fehlt wirklich "nicht viel". Kann man Dich unterstützen?


    Gruß
    Frank

    HowTo: APT pinning

  • Zitat

    Original von rnissl
    Die Analyse ist soweit richtig. Um neue Befehle implementieren zu können, muss aber auch die Schnittstelle zu xine aufgebort werden, denn schließlich muss dort ja gesprungen bzw. die aktuelle Position abgefragt und zurückgeliefert werden.


    Sehe ich das richtig, dass z.B. für "seek +60" in input_vdr.c eine Funktion für

    Code
    _x_demux_seek(this->stream_external, 0, 0, 0);


    implementiert werden muss.

    Powered by Point of View ION330 und Mystique SaTiX-S2 Dual
    Geguckt wird auf einem 52PFL5605H/12 per HDMI mit Atmolight Quattro
    Audio optisch per Yamaha RX-V459 auf einem Teufel Concept P
    Non-TV content über XBMC und boblight
    Remote Harmony 525 durch Atric-IR
    Remote und Streaming mit Motorola XOOM und AndroVDR sowie Daroon Player
    Streaming auf ZBOX ID-81 und Desktop per streamdev
    All based on selfbuild OpenenELEC master


    Nebenbei noch ein par andere VDRs

  • Hab mal ein wenig geforscht.
    Mit folgenden Patchen






    komme ich zwar in xine-lib an, der Aufruf zu _x_demux_seek hat aber nicht die gewünschte Wirkung.

    Code
    start pos is 86939463146, start time is 60
    video_pts = 228618000
    video_out: vpts/clock error, next_vpts=5033874 cur_vpts=4402185
    video_out: vpts/clock error, next_vpts=5033874 cur_vpts=4404002
    video_out: vpts/clock error, next_vpts=5033874 cur_vpts=4405817


    Ich steige durch die API von xine-lib noch nicht so recht durch.
    Bin ich hier auf dem Holzweg ?

    Powered by Point of View ION330 und Mystique SaTiX-S2 Dual
    Geguckt wird auf einem 52PFL5605H/12 per HDMI mit Atmolight Quattro
    Audio optisch per Yamaha RX-V459 auf einem Teufel Concept P
    Non-TV content über XBMC und boblight
    Remote Harmony 525 durch Atric-IR
    Remote und Streaming mit Motorola XOOM und AndroVDR sowie Daroon Player
    Streaming auf ZBOX ID-81 und Desktop per streamdev
    All based on selfbuild OpenenELEC master


    Nebenbei noch ein par andere VDRs

Jetzt mitmachen!

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