[announce] pvrinput-2010-04-03-rc1 (jetzt streamdev-tauglich!)

  • Im November hatte ich die Version pvrinput-1.7.0-rc2 announced. Eigentlich glaubte ich damals, nach kurzer Zeit eine finale Version bereitstellen zu können. Es kam dann leider anders: Zum einen gab es nur eine Handvoll Rückmeldungen. Zum anderen haben mich bugreports eines easyvdr-users fast verzweifeln lassen, denn die aufgetretenen Probleme in einem Mehrkartensystem (sporadisch wurde von falschen Kanälen aufgenommen) ließen sich trotz gründlicher Tests bei mir nie nachvollziehen. Ich habe dann noch bis zur internen rc6 im Januar 2010 diverse Verbesserungen eingebaut, ohne aber diese Einzelfall-Probleme wirklich erklären zu können.


    Mitte Januar 2010 habe ich mini73 (einen langjährigen pvrinput-user) auf dem HaVUT endlich auch persönlich kennengelernt. Es stellte sich heraus, dass er beruflich programmiert. Ich konnte ihn dafür gewinnen, sich einige der lange ungelösten Probleme mal vorzunehmen. mini73 hat sich dann in Rekordzeit in den Aufbau digitaler Streams eingearbeitet und nicht nur die Generierung von PCR-Timestamps implementiert, sondern auch die Erzeugung von PAT/PMT-Paketen, so dass pvrinput nun endlich auch mit streamdev richtig zusammenarbeitet (TS-Streams möglich!). Nebenbei wurde von mini73 auch noch beta-Unterstützung für die Hauppauge HD PVR realisiert.


    Es ist jetzt auch möglich, beim Kanalwechsel ein externes Script ausführen zu lassen, dass z.B. einen angeschlossenen Digitalreceiver umschaltet. (Für die HD PVR, die keinen eigenen Tuner hat, war das notwendig). Der Inhalt des Scripts bzw. was es wie machen soll, bleibt Euch überlassen.


    In den vergangen Wochen hat mini73 das Plugin an so vielen Stellen verbessert und umgebaut, dass eine neue Versions-Nr. erforderlich wird. Da sicher noch weitere Änderungen kommen, sind wir erstmal wieder auf Tagesdaten als Versions-Nr. zurückgegangen.


    mini73 hat unter http://projects.vdr-developer.org/projects/show/plg-pvrinput ein git repository eingerichtet. Wir meinen, dass der gegenwärtige Stand es Wert ist, jetzt mal einer breiteren Öffentlichkeit vorgestellt zu werden.


    Hier gibt es die aktuellen development-Pakete, zur Zeit ist vdr-pvrinput-2010-04-03-rc1.tgz das neueste.


    Hier zwei direkte Links:
    HISTORY
    README


    Das Plugin funktioniert mit vdr 1.4, 1.6 und vdr 1.7
    Für vdr 1.4, 1.6. sowie vdr bis 1.7.12 wird der pluginparam-Patch am vdr benötigt. Wenn vdr bereits für das iptv-Plugin gepatcht ist, wird also auch pvrinput funktionieren. Ab vdr 1.7.13 wurde die neue Klasse cSourceParam eingeführt, die den pluginparam-Patch obsolet macht. Leider ändert sich die Syntax für die channels.conf dadurch nochmal etwas. Im README ist das genau erklärt. Da derzeit weder wirbelscan noch w_pvrscan die neue Kanalsyntax unterstützen, gibt es in den Pluginsourcen ein Konvertierungsscript, um eine alte channels.conf (mit Kanalsyntax gemäß pluginparam-Patch) in die neue syntax zu übersetzen. Ebenso enthalten ist weiterhin das Script, um eine ganz alte Syntax (mit CA-ID A0) in die Syntax gemäß pluginparam-Patch zu konvertieren. Es gibt auch Muster-channels.conf für beide Syntax-Arten.


    Auf ein paar Punkte möchte ich noch gesondert hinweisen (weil ich schon ahne, dass die schöne README viel zu oft ungelesen bleibt :) ) :


    • wer eine PVRUSB2 Model 29xxx hat, sollte unbedingt neue v4l-dvb-Treiber installieren. Es wird sonst sporadisch zu einem schwarzen Bild nach dem Umschalten kommen. Der Treiberbug ist von mir identifiziert worden und wird in Kernel 2.6.34 enthalten sein (siehe README).


    • das genaue Zusammenspiel zwischen read buffer und TS buffer bzw. deren optimale Größen bedarf noch weiterer Erforschung. Offenbar gibt es für die verschiedenen output-devices bzw. output-Plugins unterschiedliche Optimalwerte. Die Größe für den read-buffer wurde in dieser Version von 256 KB auf 64 KB reduziert. Beim pvr350-Plugin als Ausgabedevice führt dies zu einem schnelleren und stotterfreiem Umschaltvorgang. Bei xine/xineliboutput könnte es notwendig sein, den Wert höher zu setzen. Sowohl die Größe des read buffers, als auch die des TS buffer ist nun in der setup.conf (bei gestopptem vdr !!) einstellbar. Es gibt auch die Möglichkeit, ein pre-buffering einzurichten:

      Code
      pvrinput.ReadBufferSizeKB = 64                   // size of buffer for reader in KB (default: 64 KB)
      pvrinput.TsBufferSizeMB = 3                      // ring buffer size in MB (default: 3 MB)
      pvrinput.TsBufferPrefillRatio = 0                // wait with delivering packets to vdr till buffer is filled

      Wenn es beim Umschalten stottert, sollte man pvrinput.ReadBufferSizeKB auf z.B. 128 oder 256 setzen. Der Eintrag "pvrinput.TsBufferPrefillRatio = 20" würde bewirken, dass der TS buffer erstmal bis 20% aufgefüllt wird, ehe die ersten Daten an vdr weitergereicht werden.


      Wenn es im laufenden Betrieb stottert, könnte man auch mal eine Vergrößerung des ts buffers versuchen, also z.B. "pvrinput.TsBufferSizeMB = 6".


    mini73 und ich wünschen Euch frohe Ostern!



    PS: "Wanted": Besitzer einer HVR 1600 (gibt es nur auf dem US-Markt). Da der cx18-Treiber direkt TS liefern kann, wird für diese Karte jetzt nicht mehr die PesToTS-Wandlung benutzt. Müsste funktionieren, ist aber bisher ungetestet.

    VDR1: ACT-620, Asus P8B75-M LX, Intel Core i3-3240, 4 GB DDR3 RAM 1600 MHz, passive Geforce GT1030 von MSI, Sandisk 2TB SSD, 2xWinTV DualHD, Atric-IR-Einschalter. SW: Xubuntu 20.04 auf 64GB Sandisk SSD.

    VDR2: Odroid N2+ mit CoreELEC und Ubuntu in chroot, WinTV DualHD

    VDR3: Tanix TX3 mit CoreELEC und Ubuntu in chroot, WinTV DualHD

    Einmal editiert, zuletzt von Dr. Seltsam ()

  • @README:

    Zitat


    For now wirbelscan and w_pvrscan can only output the "old" format for the plugin-param-patch.


    wirbelscan bereits enthalten seit 0.0.5pre11e, w_pvrscan seit heute:

    Code
    -bash-3.00# ./w_pvrscan > channels.conf


  • Hallo, und frohe Ostern,


    erstmal DANKE für die super Arbeit an beiden PVR-Plugins. Ich habe mir heute die neueste Version des pvrinput-Plugins aus dem git-repository besorgt.
    Leider kompiliert es bei mir nicht. Es kommt folgende Fehlermeldung:


    ....
    g++ -g -O2 -Wall -Woverloaded-virtual -Wno-parentheses -fPIC -c -DUSE_CMDRECCMDI18N -DUSE_CMDSUBMENU -DUSE_CUTTIME -DUSE_DDEPGENTRY -DUSE_DELTIMESHIFTREC -DUSE_DOLBYINREC -DUSE_DVBSETUP -DUSE_DVDARCHIVE -DUSE_DVLRECSCRIPTADDON -DUSE_DVLVIDPREFER -DUSE_DVLFRIENDLYFNAMES -DUSE_GOTOX -DUSE_HARDLINKCUTTER -DUSE_JUMPPLAY -DUSE_LIEMIEXT -DUSE_SETUP -DUSE_NOEPG -DUSE_OSDMAXITEMS -DUSE_PLUGINMISSING -DUSE_PLUGINPARAM -DUSE_SETTIME -DUSE_SOFTOSD -DUSE_SORTRECORDS -DUSE_SYNCEARLY -DUSE_TIMERCMD -DUSE_TIMERINFO -DUSE_VALIDINPUT -DUSE_WAREAGLEICON -D_GNU_SOURCE -DPLUGIN_NAME_I18N='"pvrinput"' -I../../../../DVB/include -I../../../include -I../../../../DVB/include reader.c
    ../../../include/libsi/util.h: In member function ‘virtual void cPvrReadThread::Action()’:
    ../../../include/libsi/util.h:153: error: ‘static u_int32_t SI::CRC32::crc32(const char*, int, u_int32_t)’ is protected
    reader.c:509: error: within this context
    ../../../include/libsi/util.h:153: error: ‘static u_int32_t SI::CRC32::crc32(const char*, int, u_int32_t)’ is protected
    reader.c:530: error: within this context
    make: *** [reader.o] Fehler 1
    ......


    Da mein Programmierkentnisse recht bescheiden sind, komme ich nicht weiter.
    Ich benutze vdr-1.6.0-2, mit div. Exension-Patch-72 Erweiterungen auf einem 64-Bit Debian testing, heute upgedatet.
    Was kann ich tun?

    VDR: vdr-1.6.0-2 / Kernel 2.6.30 / ivtv / PVR350 & 500 & TT Cinergy 1200 DVB-C & EasyWatch DVB-C MK3 / Gigabyte GA-M720-US3 / Plugins: pvrinput, pvr350, text2skin, femon, recstatus, noepgmenu, dvd, burn, epgsearch, tvm2vdr, live, systeminfo, streamdev-server, vompserver/ Addons: noad / alles selbst kompiliert auf einem 64Bit Debian squeeze/sid für AMD64

  • das ist wohl ein Problem mit 64bit. Das müsste sich mini73 mal näher anschauen...


    Schuss ins Blaue:


    was ist, wenn Du in reader.c Zeile 509

    Code
    int crc = SI::CRC32::crc32((const char*)(pat_buffer + 5), 12, 0xFFFFFFFF);


    abänderst in

    Code
    unsigned int crc = SI::CRC32::crc32((const char*)(pat_buffer + 5), 12, 0xFFFFFFFF);

    VDR1: ACT-620, Asus P8B75-M LX, Intel Core i3-3240, 4 GB DDR3 RAM 1600 MHz, passive Geforce GT1030 von MSI, Sandisk 2TB SSD, 2xWinTV DualHD, Atric-IR-Einschalter. SW: Xubuntu 20.04 auf 64GB Sandisk SSD.

    VDR2: Odroid N2+ mit CoreELEC und Ubuntu in chroot, WinTV DualHD

    VDR3: Tanix TX3 mit CoreELEC und Ubuntu in chroot, WinTV DualHD

  • Wird nicht helfen. Das problem besteht darin, wie der Compiler schon sagt, dass die Funktion 'crc32' der Klasse CRC32 protected und nicht public ist.



    Helfen wird nur die Verwendung einer andren Klasse (nää....) oder Patchen von vdr-1.6.0.2/include/libsi/util.h(viel eher) und Neukompilieren von VDR(!) und Plugin.


    original


    ändern in..

  • aber wieso flutscht das bei gcc 4.4.1 und 32-bit ohne Probleme durch?

    VDR1: ACT-620, Asus P8B75-M LX, Intel Core i3-3240, 4 GB DDR3 RAM 1600 MHz, passive Geforce GT1030 von MSI, Sandisk 2TB SSD, 2xWinTV DualHD, Atric-IR-Einschalter. SW: Xubuntu 20.04 auf 64GB Sandisk SSD.

    VDR2: Odroid N2+ mit CoreELEC und Ubuntu in chroot, WinTV DualHD

    VDR3: Tanix TX3 mit CoreELEC und Ubuntu in chroot, WinTV DualHD

  • Tut es nicht.


    Code
    g++ -fPIC -g -O2 -Wall -Woverloaded-virtual -Wno-parentheses -c -D_GNU_SOURCE -DPLUGIN_NAME_I18N='"pvrinput"' -I../../../include -I../../../../DVB/include pvrinput.c
    g++ -fPIC -g -O2 -Wall -Woverloaded-virtual -Wno-parentheses -c -D_GNU_SOURCE -DPLUGIN_NAME_I18N='"pvrinput"' -I../../../include -I../../../../DVB/include common.c
    g++ -fPIC -g -O2 -Wall -Woverloaded-virtual -Wno-parentheses -c -D_GNU_SOURCE -DPLUGIN_NAME_I18N='"pvrinput"' -I../../../include -I../../../../DVB/include device.c
    g++ -fPIC -g -O2 -Wall -Woverloaded-virtual -Wno-parentheses -c -D_GNU_SOURCE -DPLUGIN_NAME_I18N='"pvrinput"' -I../../../include -I../../../../DVB/include reader.c
    ../../../include/libsi/util.h: In member function »virtual void cPvrReadThread::Action()«:
    ../../../include/libsi/util.h:153: Fehler: »static u_int32_t SI::CRC32::crc32(const char*, int, u_int32_t)« ist geschützt
    reader.c:509: Fehler: in diesem Zusammenhang
    ../../../include/libsi/util.h:153: Fehler: »static u_int32_t SI::CRC32::crc32(const char*, int, u_int32_t)« ist geschützt
    reader.c:530: Fehler: in diesem Zusammenhang
    make: *** [reader.o] Fehler 1
  • unter Ubuntu 9.10 mit gcc version 4.4.1 (Ubuntu 4.4.1-4ubuntu9) kompiliert es ohne jede Warnung durch.

    VDR1: ACT-620, Asus P8B75-M LX, Intel Core i3-3240, 4 GB DDR3 RAM 1600 MHz, passive Geforce GT1030 von MSI, Sandisk 2TB SSD, 2xWinTV DualHD, Atric-IR-Einschalter. SW: Xubuntu 20.04 auf 64GB Sandisk SSD.

    VDR2: Odroid N2+ mit CoreELEC und Ubuntu in chroot, WinTV DualHD

    VDR3: Tanix TX3 mit CoreELEC und Ubuntu in chroot, WinTV DualHD

  • Dann ist dort die Datei util.h von VDR nicht original.

  • es ist die originale aus vdr-1.7.14

    VDR1: ACT-620, Asus P8B75-M LX, Intel Core i3-3240, 4 GB DDR3 RAM 1600 MHz, passive Geforce GT1030 von MSI, Sandisk 2TB SSD, 2xWinTV DualHD, Atric-IR-Einschalter. SW: Xubuntu 20.04 auf 64GB Sandisk SSD.

    VDR2: Odroid N2+ mit CoreELEC und Ubuntu in chroot, WinTV DualHD

    VDR3: Tanix TX3 mit CoreELEC und Ubuntu in chroot, WinTV DualHD

  • ah ja, dann gab es da wohl die von Dir vorgeschlagene Änderung

    VDR1: ACT-620, Asus P8B75-M LX, Intel Core i3-3240, 4 GB DDR3 RAM 1600 MHz, passive Geforce GT1030 von MSI, Sandisk 2TB SSD, 2xWinTV DualHD, Atric-IR-Einschalter. SW: Xubuntu 20.04 auf 64GB Sandisk SSD.

    VDR2: Odroid N2+ mit CoreELEC und Ubuntu in chroot, WinTV DualHD

    VDR3: Tanix TX3 mit CoreELEC und Ubuntu in chroot, WinTV DualHD

  • so, gefunden: in vdr-1.7.1 wurde die Funktion in public verschoben


    mal sehen, vielleicht findet mini73 ja eine Lösung, wie man das Plugin auch ohne Patchen für kleinere vdr-Versionen bauen kann.

    VDR1: ACT-620, Asus P8B75-M LX, Intel Core i3-3240, 4 GB DDR3 RAM 1600 MHz, passive Geforce GT1030 von MSI, Sandisk 2TB SSD, 2xWinTV DualHD, Atric-IR-Einschalter. SW: Xubuntu 20.04 auf 64GB Sandisk SSD.

    VDR2: Odroid N2+ mit CoreELEC und Ubuntu in chroot, WinTV DualHD

    VDR3: Tanix TX3 mit CoreELEC und Ubuntu in chroot, WinTV DualHD

  • Zitat

    Original von Dr. Seltsam
    so, gefunden: in vdr-1.7.1 wurde die Funktion in public verschoben


    mal sehen, vielleicht findet mini73 ja eine Lösung, wie man das Plugin auch ohne Patchen für kleinere vdr-Versionen bauen kann.


    Denke wäre z.B. eine Helferklasse, welche die Funktion crc32 public macht


    in etwa in der der Form :

  • Moin!


    Zitat

    Original von Hulk
    Denkbar wäre z.B. eine Helferklasse, welche die Funktion crc32 public macht


    Ja, das ist eine Idee. Sobald mein Osterbesuch wieder weg ist, werde ich es einbauen.


    mini.

  • Moin!


    Das sind Hybrid-Karten, richtig? Kann man die Tuner getrennt voneinander benutzen oder nur exklusiv? Wenn nur exklusiv, dann muss es ein Plugin geben, das beide Devices verwaltet, also ein kombiniertes DVB/V4L-Plugin.
    Kann man das normale DvbDevice im vdr eigentlich deaktivieren?


    mini.

  • Zitat

    Original von 9000H
    wie schaut es eigentlich mit dem Support fuer die HVR-3000/HVR-4000 aus?


    das sind beides Karten ohne Hardware-Encoder, also nicht die Zielgruppe des Plugins

    VDR1: ACT-620, Asus P8B75-M LX, Intel Core i3-3240, 4 GB DDR3 RAM 1600 MHz, passive Geforce GT1030 von MSI, Sandisk 2TB SSD, 2xWinTV DualHD, Atric-IR-Einschalter. SW: Xubuntu 20.04 auf 64GB Sandisk SSD.

    VDR2: Odroid N2+ mit CoreELEC und Ubuntu in chroot, WinTV DualHD

    VDR3: Tanix TX3 mit CoreELEC und Ubuntu in chroot, WinTV DualHD

  • Zitat

    Original von Dr. Seltsam
    das sind beides Karten ohne Hardware-Encoder, also nicht die Zielgruppe des Plugins


    Das ist dann wohl eher Gebiet des alten analogtv-Plugins mit on-the-fly-Encoding, das leider nicht mehr weiterentwickelt wird... Vielleicht ja irgendwann als neues Plugin, aber da gibt's keine Versprechungen.
    Und erst mal ist dafür auch keine Zeit...


    mini.

  • Zitat

    Original von mini73
    Das sind Hybrid-Karten, richtig? Kann man die Tuner getrennt voneinander benutzen oder nur exklusiv? Wenn nur exklusiv, dann muss es ein Plugin geben, das beide Devices verwaltet, also ein kombiniertes DVB/V4L-Plugin.
    Kann man das normale DvbDevice im vdr eigentlich deaktivieren?


    Mit der HVR 1900 (USB mit Analog/Hardwareencoder und DVB-T) habe ich da schon Erfahrungen gesammelt. Mit vdr geht nur entweder/oder.
    vdr findet normalerweise immer zuerst das dvb device und hält es während der Laufzeit von vdr geöffnet (u.a. wegen EPG-Scan). Wenn danach pvrinput lädt und auf das analoge device zugreifen will, ist dieses bereits blockiert.


    Lösung: Beim Laden des Treibermoduls pvrusb2 muss mit der Moduloption adapter_nr eine device Nummer vorgegeben werden, die eine Nummer über dem letzten vorhandenen DVB-Gerät liegt.


    Beispiel: vdr soll nur die FF-Karte (/dev/dvb/adapter0) verwenden. Man lädt pvrusb2 nun wie folgt: "modprobe pvrusb2 adapter_nr=2". vdr findet beim Start adapter0 und bricht die Suche ab, nachdem auf adapter1 kein Gerät gefunden wurde. Somit wird adapter3 von vdr nicht geöffnet, und pvrinput kann das analoge device öffnen.


    Eine weitere Möglichkeit ist, unter Verwendung des vdr-Parameters -D gezielt nur diejenigen DVB devices festzulegen, die vdr benutzen darf.


    Für pvrusb2-basierte Geräte gibt es noch eine dritte Möglichkeit: man kann den Treiber ohne DVB-Unterstützung kompilieren.

    VDR1: ACT-620, Asus P8B75-M LX, Intel Core i3-3240, 4 GB DDR3 RAM 1600 MHz, passive Geforce GT1030 von MSI, Sandisk 2TB SSD, 2xWinTV DualHD, Atric-IR-Einschalter. SW: Xubuntu 20.04 auf 64GB Sandisk SSD.

    VDR2: Odroid N2+ mit CoreELEC und Ubuntu in chroot, WinTV DualHD

    VDR3: Tanix TX3 mit CoreELEC und Ubuntu in chroot, WinTV DualHD

Jetzt mitmachen!

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