[w_scan_cpp] Fix für Panasonic TX-58DX730W Sat>IP DVB-T2 scanner

  • Hallo,


    seit längerem versuche ich schon die Resourcen des Panasonic TV Geräts TX-58DX730W für Streaming zu nutzen.

    Der TV hat einen sehr guten DVBT2 Receiver, und gibt mir insbesondere Zugriff auf ORF1.


    Ein Tuner (von zweien) ist als DVB-T SATIP Server eingerichtet.

    Das Gerät gibt nur dann einen Stream aus wenn im rtsp request (getestet mit VLC) alle Parameter (freq ... pids) in der richtigen Reihenfolge eingegeben werden.


    z.B für ORF1

    rtsp://192.168.2.168/?freq=498&bw=8@@@WCF_LITERAL_AMP@@@tmode=32k@@@WCF_LITERAL_AMP@@@mtype=qpsk@@@WCF_LITERAL_AMP@@@gi=116@@@WCF_LITERAL_AMP@@@fec=12@@@WCF_LITERAL_AMP@@@msys=dvbt2@@@WCF_LITERAL_AMP@@@plp=0@@@WCF_LITERAL_AMP@@@t2id=8232@@@WCF_LITERAL_AMP@@@sm=0@@@WCF_LITERAL_AMP@@@pids=0,16,17,18,407,4070,4071,4075

    (Nicht alle Parameter sind richtig, werden aber vom Server akzeptiert und automatisch korrigiert).


    Selbst zum Tunen/Suchen müssen nahezu alle Parameter (ohne pids) übergeben werden, auch wenn sie noch nicht bekannt sind. Pids werden ja dann dynamisch addiert/gelöscht.

    Und alle Parameter müssen gültige Werte nach satip Standard haben.

    Deshalb sind alle bisherigen Versuche zum Scannen fehlgeschlagen


    Nun habe ich es mit der letzten Version von w_scan_cpp-20220105 versucht, zuerst mit dem gleichen Ergebnis (nichts gefunden).


    Mit tcpdump kam heraus, daß nur "fec=..." gefehlt hat.

    Dies konnte ich in den wirbelscan src files leicht korrigieren, habe caps_fec=12 als "default FEC" gesetzt in scanner.cpp.


    $ diff -u vdr/PLUGINS/src/wirbelscan/scanner.cpp.bak vdr/PLUGINS/src/wirbelscan/scanner.cpp

    --- vdr/PLUGINS/src/wirbelscan/scanner.cpp.bak 2022-10-03 14:17:00.897685712 +0200

    +++ vdr/PLUGINS/src/wirbelscan/scanner.cpp 2022-10-03 14:18:24.411017279 +0200

    @@ -452,7 +452,7 @@

    if (crAuto)

    caps_fec = 999;

    else {

    - caps_fec = 0;

    + caps_fec = 12;

    dlog(5, "C999 not supported, trying C" + IntToStr(caps_fec) + ".");

    }

    if (t2Support)


    Damit lief der Scan durch und hat alle DVB-T2 Streams gefunden.


    Im VLC satip Format Output haben aber wieder 2 Parameter gefehlt: mtype=... und fec=...

    Deshalb auch noch entsprechende Änderungen in OutputFormats.cpp gemacht, und auch dort default Werte eingefügt:


    $ diff -u OutputFormats.cpp.bak OutputFormats.cpp

    --- OutputFormats.cpp.bak 2022-10-03 14:00:59.010976222 +0200

    +++ OutputFormats.cpp 2022-10-03 14:18:34.559179351 +0200

    @@ -1056,6 +1056,7 @@

    else if (c.Modulation == 16) ss << "@@@WCF_LITERAL_AMP@@@mtype=16qam";

    else if (c.Modulation == 64) ss << "@@@WCF_LITERAL_AMP@@@mtype=64qam";

    else if (c.Modulation == 256) ss << "@@@WCF_LITERAL_AMP@@@mtype=256qam";

    + else ss << "@@@WCF_LITERAL_AMP@@@mtype=qpsk";


    if (c.Guard == 4) ss << "@@@WCF_LITERAL_AMP@@@gi=14";

    else if (c.Guard == 4) ss << "@@@WCF_LITERAL_AMP@@@gi=18";

    @@ -1072,6 +1073,7 @@

    else if (c.FEC == 45) ss << "@@@WCF_LITERAL_AMP@@@fec=45";

    else if (c.FEC == 56) ss << "@@@WCF_LITERAL_AMP@@@fec=56";

    else if (c.FEC == 78) ss << "@@@WCF_LITERAL_AMP@@@fec=78";

    + else ss << "@@@WCF_LITERAL_AMP@@@fec=12";


    if (c.DelSys == 0) {

    ss << "@@@WCF_LITERAL_AMP@@@msys=dvbt";


    Dies ist eine "quick and dirty" Lösung, hat aber erst mal den erhofften Erfolg gebracht, gestartet mit
    w_scan_cpp -ft -c DE --satip -V > satip.xspf


    Vielleicht hat wirbel einen besseren und sauberen Lösungsvorschlag, der auch die tatsächlichen Parameter erkennt.

  • Quote

    habe caps_fec=12 als "default FEC" gesetzt


    Hmm, ja..


    FEC=1/2 ist kein gültiger default Wert. Und auch QPSK für die Modulation nicht.

    Leider verlangt SAT>IP die Angabe aller Tuning details vollständig laut der Spec und kennt kein 'AUTO' wie z.B. linux dvb, auch wenn praktisch gesehen die meisten Tuner alles außer Modulation und Bandwidth sowieso ignorieren. Dein Tuner im Panasonic wohl nicht.


    Anstelle von fec="12" könnte es ebensogut fec="34", anstelle von mtype="qpsk" auch mtype="16qam". Oder oder oder...


    Einen Wert als default zu setzen, der kein gültiger default Wert ist, hilft hier eher wenig.

  • Mit "gültiger Wert" meine ich natürlich "gültiger Wert laut Spec".

    Reden wir besser von "Startwerten".

    In der Tat funktioniert für diesen SAT>IP Server jeder Wert (fec=12, 34 ...) als Startwert erfolgreich . Nur ohne Angabe von fec und mtype funktioniert gar nichts.


    Man könnte ja auch die Startwerte vom User definieren lassen, z.B. als commandline parameter, um Tuner zu unterstützen die dies benötigen. Damit wäre die Software konsistent, und erlaubt Spezialfälle wie diese. Natürlich mit einer Anmerkung im README, damit die User Bescheid wissen.


    Für mich selbst habe ich eine ausreichende Lösung gefunden, es geht hier eher um andere User die das gleich Problem haben.

  • Ja, ein Parameter als Startwerte wäre denkbar.

    Aber da bliebe noch die sache, dass man nicht einfach die Ausgabe in OutputFormats.cpp beliebig falsch gestalten sollte.


    So ganz die passende Idee hab ich hier noch nicht.

  • Eine Möglichkeit wäre, die (zum Teil falschen) Parameter vom Server zu nehmen.

    Der SAT>IP Server gibt die Tunerparameter in den RTSP DESCRIBE messages (einmal beim Tunen) und in fortlaufend in den RTCP UDP packets aus.


    Beispiel hier für 3 Sender (sollte in Wirklichkeit 64QAM sein)

    3sat HD
    tuner=1,234,1,15,578.00,8,dvbt2,8k,qpsk,132,23,3,48991,0;pids=0,16,17,18,2100,2110,2120,2130


    Das Erste HD

    tuner=1,239,1,15,554.00,8,dvbt2,8k,qpsk,132,23,3,49087,0;pids=0,16,17,18,4112,4113,4114,4116


    ORF 1

    tuner=1,232,1,15,498.00,8,dvbt2,8k,qpsk,132,23,3,48975,0;pids=0,16,17,18,407,4070,4071,4075


    aus dem Spec:

    ver=1.1;tuner=<feID>,<level>,<lock>,<quality>,<freq>,<bw>,<msys>,<tmode>,<mtype>,<gi>,<fec>,<plp>,<t2id>,<sm>;pids=<pid0>,…,<pidn>


    Dies wäre insofern konsistent, daß die Scan Software das übernimmt was der Server anbietet.

    Wo kommen denn die Parameter bei Standardtunern her?


    Nachteil ist, daß SAT>IP Channel Listen nicht für andere Tuner passen.

  • Das sind genau die Parameter zurückgemeldet, die w_scan_cpp zuvor da reingeschrieben hat.


    Von Standardtunern können (meistens - aber je nach Treiber, Firmware und Hardware) der aktualisierte Parameter zurückgelesen werden, wenn man einige Randbedingungen beachtet. Das führt bei SAT>IP zu nichts.


    Quote

    Nachteil ist, daß SAT>IP Channel Listen nicht für andere Tuner passen.

    Das ist ein No-Go. w_scan_cpp soll Kanäle finden, nicht bestimmte Eigenheiten von Tunern.

  • Quote

    Das sind genau die Parameter zurückgemeldet, die w_scan_cpp zuvor da reingeschrieben hat.

    so nicht ganz richtig:


    w_scan_cpp (modifiziert) sendet:

    SETUP rtsp://192.168.2.168:554/?freq=626&bw=8&tmode=8k&mtype=64qam&gi=18&fec=34&msys=dvbt2&plp=3&t2id=0&sm=0&pids=0,16,17,18,2400,2410,2420,2430


    Server antwortet (RTCP nach erfolgreichem lock):

    tuner=1,255,1,15,626.00,8,dvbt2,2k,qpsk,132,12,3,49023,0;pids=0,16,17,18,2400,2410,2420,2430


    Quote

    Das ist ein No-Go. w_scan_cpp soll Kanäle finden, nicht bestimmte Eigenheiten von Tunern.


    Sollte sagen "Nachteil ist womöglich...", da ich dies nicht getestet habe.


    Dies bezieht sich auch nur auf fec und tmode. Alle anderen Parameter in der Channelliste sind korrekt.

    in der Regel möchte man Channel Listen mit der Hardware erzeugen (mit Hilfe eines scan Programms), die man benutzt.


    Für das Veröffentlichen von Channelllisten eignen sich wahrscheinlich nur eine begrenze Zahl von Tunern.

    Ich hatte ja angefangen mit Public Channellisten, nur haben darin die FEC Werte gefehlt. Und erst ein Abgleich mit der Satip Spec haben mich auf die richtige Spur gebracht.


    Für mich nicht notwendigerweise ein No-Go.


    Deshalb die Frage:

    In der Software werden ja die Tuner Parameter gelesen und falls vorhanden in OutputFormats.cpp ausgegeben.

    Woher kommen diese für den SAT>IP Fall?

  • Ja und nein. Die Tuner Parameter werden nur bei lokalen DVB devices gelesen.


    Es gibt einige vordefinierte bzw. geratene Kanäle (Bouquet oder Transponder) je nach scan Typ mit je mehreren Services, deren Parameter dann sowohl von der NIT als auch vom Device (der Hardware) in verschiedenen Schritten einer state machine aktualisiert werden können. Zusätzlich dann später neu gefundene Kanäle und Services aus den verschiedenen DVB SI tables, die dann ebenso diese Aktualisierungsschritte durchlaufen.


    Für SAT>IP als device Typ nutzt mein tool das VDR satip Plugin, in dem diese Aktualisierung von der Hardware bis jetzt nicht implementiert wurde. Das liegt auch daran, dasss dieses Plugin intern eine 'Virtualisierung' bzw. temporäre Zuordnung von Tuner zu Device macht und damit der Aufwand dafür steigt.

  • Ok, ich sehe das kann ein endloses Thema werden, und eine perfekte (einfache) Lösung gibt es nicht - auch zu viele Sonderfälle seitens der Hersteller zu beachten.


    Zusammengefaßt:

    Für das Scannen wären Optionen mit user provided Startwerten als Ersatz für fehlende Parameter sehr hilfreich, sonst passiert nämlich gar nichts. Ohne Software Update kann man dieses Problem mit Panasonic TVs nicht umgehen.


    Beim Output hat man immer noch die Möglichkeit der Nachbearbeitung in einer Pipe (z.B. sed, und die fehlenden Parameter einfügen).

    Je nach Kenntnis der User wäre aber auch hier eine Option einfacher, die diese Arbeit übernimmt, z.B. die o.g. Startwerte auch in den Output schreibt.


    Wer die Optionen nicht benutzt hat die normale Funktionalität.


    Da ich meine Lösung gefunden habe, ist dieser Thread ausreichend behandelt. Für eventuelle Tests stehe ich aber gerne zur Verfügung.


    Grüße

    kprdvb