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.