Hallo,
da ich mich in den letzten Tagen mal wieder mit dem Netceiver beschäftigt habe und generell auch das Thema netzbasierte Tuner (SAT>IP, Octopus-Net, ...) sehr interessant ist, wollte ich hier mal ein gemeinsames Vorgehen vorschlagen.
Das Problem mit Kernel-Treibern ist ja (alle langjährigen Netceiver Nutzer werden mir beipflichten), dass es massive Probleme gibt die Treiber den aktuellen DVB-APIs anzupassen und ggf. einen "out-of-tree" Kerneltreiber vorzuhalten der potentiell gegen mehrere Kernelversionen kompiliert. Ich weiß nicht, ob schonmal jemand einen Anlauf genommen hatte dvbloop in den Mainline Kernel aufnehmen zu lassen, aber beim Googeln habe ich den Versuch der vtuner Jungs gefunden, mit folgender Antwort von Mauro:
https://lkml.org/lkml/2011/12/1/133
Der interessante Teil ist:
ZitatAlles anzeigenThe driver, as proposed, is not really a driver, as it doesn't support any
hardware. The kernel driver would be used to just copy data from one userspace
application to the other. The same result could be obtained in userspace,
by implementing a library. Such library could even use LD_PRELOAD to support
binary only applications, like what libv4l does. In terms of performance,
such library would probably perform better than a kernel driver, as there's
no need to do context switching for each call, and no need to talk with a
device (where kernel outperforms userspace). Also, depending on how such library
is implemented, double buffering might be avoided.
So, from architectural POV, this code should be written as an userspace library.
Insofern stehen die Chancen, dass so ein virtueller DVB Adapter jemals/bald in den Kernel aufgenommen wird relativ gering. Das mit dem LD_PRELOAD hört sich erstmal aufwändig an, aber wenn man sich mal libv4l (speziell v4l2convert.c) anguckt, sieht man dass das ziemlich trivial ist. Damit würde man das lästige Syncen zum aktuellen Kernel vermeiden und müßte nur bei API-Änderungen (ggf.) leichte Anpassungen machen und auch nur dann, wenn man (oder die benutzte Applikation) das wirklich braucht.
Da das grundsätzliche Vorgehen für diese Tuner-Typen ja ähnlich ist, würde ich Vorschlagen hier mit einem gemeinsamen Projekt zu starten welches per Library die Zugriffe auf die DVB-Devices abfängt und das dann in entsprechende Funktionsaufrufe für die unterschiedlichen Netzwerkbackends umsetzt. Für den Netceiver sollte dies dank libmcli (hervorrange Beispielimplementation netcv2dvbip) ziemlich trivial sein, was ich bis jetzt über SAT>IP gelesen habe ist es ähnlich.
Der Grund warum ich in diesem Zusammenhang eher von vdr-Plugins absehen würde ist Portabilität (mythtv, tvheadend, dvb-apps, ...) und damit eine größere Zielgruppe sowohl von Nutzern als auch (Mit-)Entwicklern. (Vielleicht könnte man das für den vdr auch so lösen, dass es ein Wrapper-Plugin gibt, dass nichts anderes macht als die Library zu laden, so umgeht man das unschöne LD_PRELOAD.)
Also Kommentare? Vorschläge? Mitstreiter?