[vtuner-ng] Aktualisierter vtuner für kernel >= 4.16

  • Meines Wissens nach hält vdr das frontend device geöffnet, solange das Programm läuft. Im Unterschied dazu wird das dazugehörige dvr device nur geöffnet (OpenDvr) wenn Daten empfangen werden sollen- also bei LiveTV, Aufnahme und wohl auch beim EPG Scan. Sobald das dvr device nicht mehr benötigt wird (z.B. wenn nach einem Kanalwechsel ein anderes device aufgrund höherer Priority ‚gewinnt‘), wird es geschlossen (CloseDvr).

    Es ist eine Besonderheit der DVB-Karten, dass sie zum Tunen ein anderes Device als zum Streamen verwenden. Deshalb bezweifle ich, dass diese Logik bei anderen Transportwegen 1:1 funktioniert. Bei pvrinput (analoge Karten mit Hardwareencoder, die nur ein einziges device für beides hatten) war das anfangs ein Riesenproblem. Vdr wollte tunen, hatte aber über CloseDvr vorher schon das device geschlossen. Da musste ich einiges tricksen. Ich bezweifle, dass das satip-Plugin den Aufwand betreibt.

    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

  • Macht das satip-Plugin das genauso?

    Ich bezweifle, dass das satip-Plugin den Aufwand betreibt.

    Mit einem svdrpsend SCAN bei Benutzung des satip-Plugins, werden bei mir alle 8 Tuner meiner Octopus Net belegt.

    Nach dem Ende des EPG-Scans, werden alle nicht benötigten Tuner der Octopus Net wieder frei gegeben.

    Gentoo Linux ~ VDR 2.6.9 ~ DD Octopus NET V2 S2 Max - SAT>IP ~ LENOVO ThinkServer TS200V ~ Intel(R) Core(TM) i5 CPU680@3.60GHz ~ 16GB RAM ~ NVIDIA T400

  • Ich habe mich mal an einem Paket versucht - ungetestet (außer einer erfolgreich durchgelaufenen Installation der Pakete in einer VM): https://launchpad.net/~seahawk…+archive/ubuntu/vtuner-ng


    Wenn man das Paket vtuner-ng-satip installiert, sollte er damit sowohl das satip binary als auch das dkms-Paket vtuner-ng-dkms als Abhängigkeit installieren.


    Oh, erst jetzt gesehen - Danke. Läuft!


    Beim Installieren gab's eine Meldung:

    Code
    Error! Module version 2.0 for vtunerc.ko
    is not newer than what is already found in kernel 5.15.0-92-generic (2.0).

    :S


    .. das Modul war schon neu aus dem Git übersetzt als mal ein Kernelupdate (ubuntu) kam ..


    Rebootet hab ich noch nicht - also es läuft nun immer noch mit @Joe_D 's Einträgen in "vdr.service"


    Ist echt eine Alternative (hier) - so "zackig" ist's auf einmal :] :tup


    Grusz!

  • Hab' wieder etwas aktualisiert.


    Bei mir sind häufig folgende Meldungen wegen der Sections erschienen (vor allem EIT), die wollte ich unbedingt "entfernen"

    Code
    Feb  2 03:39:20 server kernel: [28754.343166] dvb_demux: dvb_dmx_swfilter_section_new: section ts padding loss: 367/367
    Feb  2 03:39:20 server kernel: [28754.343170] dvb_demux: dvb_dmx_swfilter_section_new: pad data: 50 f7 45 00 30 ef e8 f8 00 05 00 85 e8 50 2f 61 eb b8 15 50 00 00 47 00 02 20 4d 8f 44 45 55 45 05 56 6f 6d 20 53 63 68 77 65 69 6e 20 7a 75 6d 20 53 63 68 6e 69 74 7a 65 6c 20 2d 20 48 69 6e


    Das hat seinen Grund darin das manche (vor allem EIT) Section-Feeds schon vor dem Tune-Befehl gestartet werden.

    Ich mach' das jetzt im Debug-Log kenntlich indem ich schon laufende Feeds mit "r" markiere:

    Nun "steht" der Kanal aber noch auf der "alten Frequenz" und in die schon gestarteten Section-Feeds laufen dann Daten vom "alten Kanal". Mit der Änderung werden alle schon laufenden Section-Feeds kurz nach Erhalt des Tune-Befehls gestoppt und zurückgesetzt (Zeile 9) und beim Empfang des ersten PUSI-Markers gestartet (Zeile 11)...

    Zusätzlich ist mir aufgefallen das das "ausleiten" der TS-Daten per cat /dev/vtunerc0 > /tmp/data.ts unvollständig war. Hier habe ich jetzt einen DVB Ringbuffer eingebaut, somit geht nichts mehr verloren...

  • Und wieder was aktualisiert, diesmal in Verbindung mit meinem Patch von hier. Damit kann der EPGScan zeitlich begrenzt werden, somit hat vtuner nun die Chance diesen wieder freizugeben. Nach 60 Sekunden Inaktivität wird der tuner freigegeben. Das funktioniert ebenso beim Abspielen von Aufzeichnungen. Da wird der Tuner sofort freigegeben. Wenn die Aufzeichnung gestoppt wird nimmt der Tuner wieder seine Arbeit auf...

  • Uiuiui, jetzt habe ich einen kapitalen Fehler eingebaut. Bei Sectionfeeds wurden nur noch Filler-Pakete empfangen.

    Zudem bekam ich die Rückmeldung das angeschnittene PES-Streams "pesdemux: bad pes packet" ergeben.


    Wer also EPG möchte bitte aktualisieren :whistling:

  • Ich hole das Thema noch einmal hervor und kann bestätigen, dass der vtuner auch mit der FRITZ!Box 6490 Cable als Server funktioniert.

    Die öffentlichen in HD funktionieren einwandfrei. Schalte ich allerdings auf einen privaten in SD, bleibt das Bild schwarz. Das EPG wird sofort aktualisiert und die Programminformation angezeigt. ;)


    satip ist mit -m 2 -l 4 gestartet und das log angehängt. Woran könnte es liegen?

  • Hab das heute mal extra eingerichtet mit zwei Tunern - wobei die Fritte ohne SAT>IP-Zertifizierung natürlich gleich mal den Frontend-Parameter genüßlich ignoriert (-f)

    Code
    /usr/sbin/modprobe vtunerc devices=2 
    /usr/local/bin/satip -s fritz.box -d /dev/vtunerc0 -D DVBC -m 2 -l 4 -f 4 -r 45000 2> /tmp/satip0.log &
    /usr/local/bin/satip -s fritz.box -d /dev/vtunerc1 -D DVBC -m 2 -l 4 -f 3 -r 45002 2> /tmp/satip1.log &

    Umschalten auf ZDF ohne HD ergibt (mit framebuffer-xineliboutput) ein Bild:

    Code
    Apr 11 16:04:35 vdr2 vdr: [3185] switching to channel 200 C-1-1079-28006 (ZDF)
    Apr 11 16:04:35 vdr2 vdr: [3249] device 2 receiver thread started (pid=3161, tid=3249, prio=high)
    Apr 11 16:04:35 vdr2 vdr: [3250] device 2 TS buffer thread started (pid=3161, tid=3250, prio=high)
    Apr 11 16:04:35 vdr2 vdr: [3161] [xine..put] cXinelibOsd::CanHandleAreas(): Device does not support ARGB
    Apr 11 16:04:35 vdr2 vdr: [3249] [xine..put] Detected video size 720x576

    Dabei wird das in vtunerc1 ausgegeben:


    Gleichzeitig habe ich auf dem anderen Tuner eine Aufnahme auf SR-Fernsehen SD gestartet.


    Das sieht dann so in der Fritzbox aus:

  • Vielen Dank, dass du es mit deiner Fritte nachgestellt hast. ZDF als Beispiel hat mich auf die richtige Fährte gebracht. ZDF in SD war nämlich nicht mehr in der channels.conf und ich habe es ergänzt. Damit hat es mit vtumer auf Anhieb funktioniert.


    Dann habe ich eine Aktualisierung der channels.conf angestoßen und siehe da, auch die Privaten funktionierten. :wand


    Ich habe mehrere Privatsender getestet und bei keinem hat es funktioniert. Wie soll ich dann darauf kommen, dass auf meinem Testrechner die Aktualisierung nicht mehr aktiviert ist. :whistling:

  • So ganz blicke ich da auch noch nicht durch. Das Signal vom SatIP Server, welcher das Sat Signal über einen IP Stream leitet wird von einem Client ( satip-plugin oder "vtuner-sat-ip-receiver" ) entgegengenommen. Das sollte bei satip und vtuner identisch sein. Ich frage mich jetzt nur welchen Sinn vtuner-ng hat ( Umschaltzeiten von 3 auf unter 1 Sekunde ? )


    Wenn ich das richtig verstanden habe "mapped" vtuner das Sat-IP Signal vom SatIP Server auf eine lokale Gerätedatei /dev/dvb/... .


    Bei headless Systemen macht vtuner ( bis auf Umschaltzeiten ) mit VDR mit VNSI Plugin zum Streamen an die Clients doch keine Sinn ? Der VDR verarbeitet alle 8 Tuner vom Kathrein 418 intern über das SatIP- Plugin und gibt die Streams ( bei mir ) über VNSI aus.


    Möchte man einen SatIP Stream mit einem Programm nutzen, das nur auf Gerätedateien zugreifen kann ist vtuner-ng sinnvoll da es im Gegensatz zum SatIP Plugin die Streams vom SatIP Server über Gerätedateien in /dev/dvb/... abbildet. Das SatIP Plugin dagegen ist nur "VDR intern" nutzbar.


    Habe ich das so richtig verstanden ?

  • So ganz blicke ich da auch noch nicht durch.

    Ist im Endeffekt ziemlich einfach: vtuner-ng emuliert bis zu 8 DVB-Karten auf einem Linuxrechner.

    Das was am vtuner-ng-Adapter rauskommen soll muss über die Control-Devices /dev/vtunercX "reingeschoben" werden.

    Als Anwendung für vtuner-ng gibt es das satip-Programm. Das nimmt hierzu Kontakt mit einem satip-Server auf und schiebt den TS-Stream in das vtunercX-Device.


    Es ist aber auch möglich andere Quellen zu verwenden. In ein paar Tagen bekomme ich eine IP-Cam, da werde ich dann mal versuchen den Livestream als "Programm" über vtuner-ng an den vdr zu schicken...


    Möchte man einen SatIP Stream mit einem Programm nutzen, das nur auf Gerätedateien zugreifen kann ist vtuner-ng sinnvoll da es im Gegensatz zum SatIP Plugin die Streams vom SatIP Server über Gerätedateien in /dev/dvb/... abbildet. Das SatIP Plugin dagegen ist nur "VDR intern" nutzbar.


    Habe ich das so richtig verstanden ?

    Richtig, vtuner-ng kann von jedem Programm verwendet werden das /dev/dvb-Adapter ansprechen kann - also auch z.B. tvheadend...

  • Es ist aber auch möglich andere Quellen zu verwenden. In ein paar Tagen bekomme ich eine IP-Cam, da werde ich dann mal versuchen den Livestream als "Programm" über vtuner-ng an den vdr zu schicken...

    Also wenn man dem virtuellen DVB Device eine IPTV Playlist (M3u oder so) als Quelle mitgeben könnte und man dann über die Channels.conf diese umschalten kann... wäre das vielleicht eine gute Alternative zum IPTV Plugin...

    https://gist.github.com/Axel-E…152e1c2f13259590a135e05f4

    Wohnzimmer: NUC10I3 - Logitech z-5500 - Panasonic 55" TV - Hauppauge Dual DVB-C Stick - Ubuntu 22.04 LTS - yavdr ansible
    Schlafzimmer: NUC10I3 - LG 42" TV - Hauppauge Dual DVB-C Stick - Ubuntu 22.04 LTS - yavdr ansible

    Streamingserver: -im Aufbau-
    diverse Test Clients: -Raspberry Pi + openelec, i3 mit Geforce1030

  • Nachfolgend meine systemd scripts für den vtuner-ng die ich auf meinen Server zusammen mit den vdr/vtuner-ng Packeten aus dem seahawk repositorys verwende.


    Unit /etc/systemd/system/vtunerc.service verwaltet das Kernel module.

    Es verwendet die Variable DEVICES aus der Konfigurationsdatei /etc/satip-vtuner/base.conf



    Template unit /etc/systemd/system/satip@.service verwaltet die satip daemon(s).

    Es verwendet die Variablen SERVER, BOPTS, OPTS aus der Konfigurationsdatei /etc/satip-vtuner/base.conf sowie optional aus

    /etc/satip-vtuner/vtunercX.conf


    und als Bindeglied der beiden Services die udev rules Datei /etc/udev/rules.d/50-vtunerc.rules

    Code
    # assign group video to vtunerc device and trigger systemd satip daemon service instance
    ACTION=="add", SUBSYSTEM=="vtuner", KERNEL=="vtunerc[0-7]", GROUP="video", MODE="0660", TAG+="systemd", ENV{SYSTEMD_WANTS}="satip@$name.service"

    Die Konfiguration in der Datei /etc/satip-vtuner/base.conf

    Gesteuert werden kann das ganze mit:

    Code
    systemctl start|stop|enable|disable vtunerc


    Have fun!

  • Ich würde die Dateien etwas umbenennen, damit die besser ins Debian-Paketschema passen:

    Das führt dann zu so diesen Dateinamen im Paket:

    Ist das so in Ordnung?

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Also wenn man dem virtuellen DVB Device eine IPTV Playlist (M3u oder so) als Quelle mitgeben könnte und man dann über die Channels.conf diese umschalten kann... wäre das vielleicht eine gute Alternative zum IPTV Plugin...

    Gibt es eine C-Library für M3U die das Format liest und eventuell einen Stream liefert?
    Das Parsen von dem M3U "Format" ist ja Körperverletzung ...


    Hab' gerade selber was gefunden: https://github.com/selsta/hlsdl

  • Ich würde die Dateien etwas umbenennen, damit die besser ins Debian-Paketschema passen:

    Ist das so in Ordnung?

    Die Umbenennung ist ja letztendlich geschmacksache. Falls mal jemand einen anderen Daemon für das vtunerc device entwickelt würde mein Namensschema für die Units dann vieleicht besser passen.


    Die device spezifische Konfigurationsdatei in deiner Version bekommt den Namen /etc/default/vtuner-ng-satip_vtuner0 da %i den ganzen devicce-Namen ersetzt!

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!