[VDR 2.8.3] Schneller umschalten

  • Hallo kls ,

    beim Messen der Umschaltzeiten bin ich auf zwei Stellen in device.c gestoßen, die unnötig Zeit kosten. Der Patch dazu hängt an und ist klein.

    1. Der Transfer-Player wird zu spät angehängt. SetChannel() startet ihn, einhängen tut ihn aber erst die Hauptschleife im ncäshten Durchgang. Bis dahin wirft cTransfer::Receive() alles weg. Je nachdem, was die Hauptschleife gerade treibt, sind das 300–900 ms, zum Beispiel beim Zeichnen der Kanalanzeige oder bei SVDRP beim Schlafen in cRemote::Get().

    Bei SVDRP CHAN gibt's obendrauf ein doppeltes Umschalten: HasProgramme() sieht den gestarteten, aber noch nicht eingehängten Player und denkt, es läuft nichts. Also schaltet die Hauptschleife gleich noch mal auf denselben Kanal.

    Die Lösung ist ein cControl::Attach() direkt nach dem Launch(). Deine Reihenfolge aus 2.8.3 bleibt dabei, wie sie ist, und für einen schon eingehängten Player tut Attach() einfach nichts.

    2. Der TS-Puffer wacht zu selten auf. cTSBuffer weckt den Leser erst ab 10 % Füllstand. Das erreicht Live-TV so gut wie nie, also greift jedes Mal der 100-ms-Timeout. Mit 10 ms geht's flotter, und mehr CPU-Last war nicht messbar.

    Messwerte: Beim Umschalten per SVDRP, Web-Oberfläche oder epgsearch sind die ersten Videodaten im Schnitt rund 0,6 s früher beim Ausgabegerät, auf demselben Transponder nach 155 statt 816 ms. Beim Umschalten per Fernbedienung sind es rund 85 ms, weil dort meist Tuner oder CAM das Tempo bestimmen.

    vaapivideo macht Punkt 1 schon seit 1.9.0 per cStatus::ChannelSwitch()-Hook, und softhddevice-drm-gles ( rell) zieht gerade nach. Im Core wäre das für alle Ausgabe-Plugins erledigt, und wir könnten unsere Workarounds wieder rauswerfen.

    Was meinst du?

    Files

    System 1: Hardware : MSI PRO B760M-B, Intel Core i3-13100, DVBSky S952 V3, 1x 2TB NVMe, Gehäuse Antec Remote Fusion Black, 16 GB DDR4 RAM.
    Software : Fedora 44, vdr 2.8.3, vaapivideo 1.9.0, Kernel 7.2.8
    System 2: Hardware : Intel NUC10i5FNK, Intel Core i5-10210U (Comet Lake), DVB TechnoTrend TT-connect S2-4600 USB, 1x 1TB NVMe, 32 GB DDR4 RAM.
    Software : Fedora 44, vdr 2.8.3, vaapivideo 1.9.0, Kernel 7.2.8

  • Ich habe mit softhddevice-drm-gles zwar noch keine Messungen durchgeführt, aber zork 's Erklärung klingt plausibel. In jedem Fall würde ich die Zuständigkeit für ein zeitnahes Attach() beim VDR Core sehen und nicht in einer Funktion im Ausgabedevice, das auf einen Event reagiert.

  • Bei softhdodroid profitiert der FastSwitch-Modus sehr deutlich von dem Patch. Überlässt man das Syncen dem amlogic-Kernel (FastSwitch aus), ist der Geschwindigkeitsvorteil kaum spürbar.

    VDR1: Odroid N2+ mit CoreELEC 21.3-ng und Ubuntu in chroot, 2x WinTV DualHD, Sandisk 2TB SSD

    VDR2: Tanix TX3 mit VDR*ELEC 21.3-ng, WinTV DualHD, 500GB SSD

    VDR3: Odroid N2+ mit VDR*ELEC CE22-no, WinTV DualHD

  • Hallo zork ,

    der Teil 1 des Patches hat leider eine unerwünschte Nebenwirkung beim iptv-Plugin.

    Schaue ich mir an, das Plugin kann ich hier auch testen.

    System 1: Hardware : MSI PRO B760M-B, Intel Core i3-13100, DVBSky S952 V3, 1x 2TB NVMe, Gehäuse Antec Remote Fusion Black, 16 GB DDR4 RAM.
    Software : Fedora 44, vdr 2.8.3, vaapivideo 1.9.0, Kernel 7.2.8
    System 2: Hardware : Intel NUC10i5FNK, Intel Core i5-10210U (Comet Lake), DVB TechnoTrend TT-connect S2-4600 USB, 1x 1TB NVMe, 32 GB DDR4 RAM.
    Software : Fedora 44, vdr 2.8.3, vaapivideo 1.9.0, Kernel 7.2.8

  • Hallo zork ,

    der Teil 1 des Patches hat leider eine unerwünschte Nebenwirkung beim iptv-Plugin.

    Die Nebenwirkungen kommen aber von iptv, schau mal in den Thread.

    System 1: Hardware : MSI PRO B760M-B, Intel Core i3-13100, DVBSky S952 V3, 1x 2TB NVMe, Gehäuse Antec Remote Fusion Black, 16 GB DDR4 RAM.
    Software : Fedora 44, vdr 2.8.3, vaapivideo 1.9.0, Kernel 7.2.8
    System 2: Hardware : Intel NUC10i5FNK, Intel Core i5-10210U (Comet Lake), DVB TechnoTrend TT-connect S2-4600 USB, 1x 1TB NVMe, 32 GB DDR4 RAM.
    Software : Fedora 44, vdr 2.8.3, vaapivideo 1.9.0, Kernel 7.2.8

  • Auf meinem Raspberry Pi 5 mit softhddevice-drm-gles v1.6.8-unknown und satip v2.4.1 merke ich damit keine spürbare Beschleunigung des Umschaltens, was aber auch an SatIp liegen könnte. Auf dem Wohnzimmer-VDR mit softhddevice v1.0.14 und direktem Sat-Empfang mittels DigitalDevices-Tunern ging das Umschalten auch vorher schon schnell, gefühlt geht es mit diesem Patch vielleicht noch einen Tick schneller.

  • Auf meinem Raspberry Pi 5 mit softhddevice-drm-gles v1.6.8-unknown und satip v2.4.1 merke ich damit keine spürbare Beschleunigung des Umschaltens, was aber auch an SatIp liegen könnte. Auf dem Wohnzimmer-VDR mit softhddevice v1.0.14 und direktem Sat-Empfang mittels DigitalDevices-Tunern ging das Umschalten auch vorher schon schnell, gefühlt geht es mit diesem Patch vielleicht noch einen Tick schneller.

    Dass du fast nichts merkst, liegt daran, wie umgeschaltet wird.

    Gemessen mit vaapivideo-Tracing (-t), Durchschnitt über eine Serie von Umschaltungen per svdrpsend. Gleicher Transponder, 2.8.2 → 2.8.3 mit Patch: receiver thread ended 87 → 31 ms, erstes Video-PES 207 → 114 ms. Keyframe und CRTC lasse ich weg, die schwanken je nach GOP-Phase um hunderte ms.

    Die 0,6 s gibt es, wenn die Umschaltung von außen kommt (SVDRP, live, Timer) — dann hängt der Transfer-Player bis zum nächsten Durchlauf der Hauptschleife, und solange wirft cTransfer::Receive() alles weg. Mit der Fernbedienung ist das anders, da bleiben ~85 ms aus dem TS-Buffer-Timeout, das merkt man wahrscheinlich nicht.

    Bei einem Transponderwechsel dominiert sowieso das Tunen (erstes PES 865 → 840 ms), bei dir auf dem Raspberry kommt noch der RTSP-Aufbau dazu. Am besten merkt man es auf lokalen DVB-Karten.

    Zusammengefasst: kleine Änderung, kostet zur Laufzeit nichts, bringt richtig was, wenn von außen geschaltet wird (ein Durchlauf der Hauptschleife weniger). Würde mich freuen, wenn du die Änderungen übernimmst.

    System 1: Hardware : MSI PRO B760M-B, Intel Core i3-13100, DVBSky S952 V3, 1x 2TB NVMe, Gehäuse Antec Remote Fusion Black, 16 GB DDR4 RAM.
    Software : Fedora 44, vdr 2.8.3, vaapivideo 1.9.0, Kernel 7.2.8
    System 2: Hardware : Intel NUC10i5FNK, Intel Core i5-10210U (Comet Lake), DVB TechnoTrend TT-connect S2-4600 USB, 1x 1TB NVMe, 32 GB DDR4 RAM.
    Software : Fedora 44, vdr 2.8.3, vaapivideo 1.9.0, Kernel 7.2.8

  • Mit der Fernbedienung ist das anders, da bleiben ~85 ms aus dem TS-Buffer-Timeout, das merkt man wahrscheinlich nicht.

    Ich habe lokale USB DVB Tuner und schalte zu 99,9% mit der Fernbedienung um - d.h. da merke ich schnelleres umschalten kaum?

    Klick für meine VDR Hard- u. Software

    vdr1: NUC12WSKi5 16GB | VDR*ELEC LE13 (vdr-2.8.2) 32GB M.2 2242 | Video: 4TB M.2 Rec (XFS) | 2x WinTV dualHD (DVB-T2/DVB-C) | RP2350 IRMP Pico | One4all URC 1635 FB
    vdr2: HP Pro Mini 400 G9 i5 32GB | Ubuntu 24.04.3 LTS yavdr ansible (vdr-2.8.2) 256GB M.2 2230 | Video: 4TB M.2 Rec (XFS) + 8TB SATA Archiv (exFAT) | 2x WinTV dualHD (DVB-T2/DVB-C) | RP2350 IRMP Pico | One4all URC 1635 FB
    vdr3: Raspberry CM5 auf CM5-IO-BASE-A | Seeed PCIe 3.0 dual M.2 HAT | VDR*ELEC LE13 (vdr-2.8.2) | 1TB M.2 Rec (XFS) | 2x WinTV dualHD (DVB-T2/DVB-C) | RP2350 IRMP Pico | One4all URC 1635 FB
    TV: Philips 55OLED805

Participate now!

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