streamdev: Verbindung stirbt, wenn anderer Client zappt

  • Hi,


    folgendes Setup:


    - Server ist vdr 1.7.15 + streamdev 0.5.0 mit insgesamt 4 gleichberechtigen DVB-S-Karten


    - Verschiedene Clients, im konkreten Beispiel ist der erste Client ein Desktop-PC, der mittels VDRZapper+VLC über http TS-Streams abspielt und der zweite ein vdr 1.7.15 mit streamdev 0.5.0-pre und xlinelibout 1.0.90-cvs für Wiedergabe


    Grundsätzlich funktioniert dieses Setup sehr gut. Gelegentlich gibt es aber das Problem, das beim Zappen auf dem Client 1 (vlc) Client 2 stehen bleibt und erst nach eigenem Umschalten weiterläuft.


    Auf dem Client 2 sieht man zu diesem Zeitpunkt folgende Logmeldungen:



    In zeitlicher Nähe auf dem Server gibt es nur


    Code
    Nov  6 21:23:19 tvserver vdr: [1001] connect from 192.168.0.7, port 42748 - accepted
    Nov  6 21:23:19 tvserver vdr: [1001] closing SVDRP connection
    Nov  6 21:24:19 tvserver vdr: [1001] connect from 192.168.0.7, port 42749 - accepted
    Nov  6 21:24:19 tvserver vdr: [1001] closing SVDRP connection


    "Primary Limit" sind auf Server und Client auf 0.


    Das Problem ist leider nicht immer reproduzierbar, ich würde sagen, es passiert bei 1 von 10 Umschaltvorgängen.


    Viele Grüße,
    Olli

  • Ich habe das Problem auch schon gesehen (5 DVB-Karten im Server, 3x S2, 2 mal S). Bislang war mein Verdacht, dass es aufgrund von "hängenden" Verbindungen zu einer Tuner-Knappheit im VDR kommt. Leider (oder zum Glück) tritt es bei mir sehr selten auf und ich habe noch keinen Weg gefunden, es zu reproduzieren.


    SIehe auch http://vdr-portal.de/board/thread.php?threadid=100837&hilightuser=6337


    Grüße,
    Holger

    VDR 1-3: Zotac ZBox HD-ID42, yavdr-0.5
    VDR 4: AMD5900/Asus M3N-78, yavdr-0.5
    DVB-Empfang: Netceiver
    Storage: via NFS von separatem Fileserver

    [size=10]

  • Ich kann das Problem jetzt einigermassen einfach reproduzieren -- wenn ich bei einem Client z.B. durch explizit hervorgerufene Netzwerkstörung ein Hängen produziere, so dass auf dem vdr Buffer-Overflows in streamdev auftreten, stirbt die andere Verbindung ebenfalls, obwohl dort keine Störungen auftreten sollten:


  • Hatte gerade das selbe Problem.
    Bei mir war die Ursache das ich mich mit meinem Browser vorher ein paar mal zum streamdev server verbunden haben.


    Dabei wird
    /var/lib/vdr/plugins/streamdev-server/externremux.sh
    wohl nicht richtig beendet und blockt irgend was.
    Bei mir war es auf jeden Fall min 10 mal gestartet obwohl ich schon ein paar Stunden nicht mehr mit dem Browser verbunden war.


    Habe nun alle externremux Processe gekilled und vdr neu gestartet.
    Nun läuft es.

  • Ich habe das Problem hier seit langem nicht mehr gesehen - ziemlich genau seit dem ich den TCP Connection timeout reduziert habe. Das ist zwar kein Beweis für einen Zusammenhang, aber doch ein recht deutlicher Hinweis darauf...


    Grüße,
    Holger

    VDR 1-3: Zotac ZBox HD-ID42, yavdr-0.5
    VDR 4: AMD5900/Asus M3N-78, yavdr-0.5
    DVB-Empfang: Netceiver
    Storage: via NFS von separatem Fileserver

    [size=10]

  • Das will ich erst mal nicht machen, da auf dem Server noch diverse andere Sachen laufen. Habe keine Lust mir da andere Probleme mit ein zu handeln.

  • Bei mir ist das Problem kurz nach dem letzten Post wiederauferstanden, als ich bei mir einige Experimente mit einem Netceiver als DVB-Device gestartet habe. Und zwar dieses mal wunderschön reproduzierbar beim Umschalten auf VOX und auf RTL2 (beide haben bei mir ein sehr schwaches Signal).


    Daher bin ich gestern abend der Sache mal auf den Grund gegangen und habe auch die Ursache gefunden: Diese beiden Sender brauchen bei mir sehr lange zum Tunen. Der Client wartet aber mit einem TImeout von 1500 ms auf eine Antwort auf sein "PROV xxx" Kommando. Bekommt er in der Zeit keine, macht er seine lokale Verbindung dicht und versucht einen neuen Connect. Das geht wiederum schief, jetzt hängt der umschaltende Client mit einem schwarzen Bild und gibt auf.


    Aus bislang ungeklärten Gründen führt aber der unsaubere Disconnect des einen Clients auch zum totalen Reset des Streamdev-Servers, sodass auch auf allen anderen verbunden Clients der Stream zusammenbricht. Hier bleibt dann das Bild einfach stehen.


    Quickfix: in client/socket.h in den Methoden Command und Expect den Timeout-Default von 1500 auf 15000 erhöhen. Danach dauert das Schalten auf die kritischen Sender zwar drei, vier Sekunden, aber es knallt zumindest nicht mehr.


    Die wahre Ursache für den Verbindungszusammenbruch auf den unbeteiligten Clients wird heute abend näher untersucht...


    schmirl: gibt es im Moment eine aktuellere Version als die cvs20100915? Wenn ja, wo kann man die bekommen?


    Grüße,
    Holger

    VDR 1-3: Zotac ZBox HD-ID42, yavdr-0.5
    VDR 4: AMD5900/Asus M3N-78, yavdr-0.5
    DVB-Empfang: Netceiver
    Storage: via NFS von separatem Fileserver

    [size=10]

    Einmal editiert, zuletzt von hsteinhaus ()

  • Nach dem Verlust des CVS auf vdr-developer.org ist streamdev nun ins git auf http://projects.vdr-developer.…ojects/show/plg-streamdev umgezogen. Wenn die Timeout-Geschichten gelöst sind, werde ich das zusammen mit einer neuen Version offiziell machen.


    Bin wegen eines anderen Problems am Wochenende auf den selben problematischen Timeout gestoßen. Betrifft im aktuellsten streamdev nur noch das TUNE-Kommando, weshalb dort folgender Patch ausreichend sein sollte (in Deiner Version sind TUNE und PROV betroffen):


    Brechen die Verbindungen zu den anderen Clients auch mit dem höheren Timeout noch ab? Falls ja: passiert das auch, wenn der auf dem "unbeteiligten" Clients das Filter-Streaming deaktiviert ist?

  • Mit dem höheren Timeout konnte ich keinen Verbindungsabbruch mehr provozieren (Timeout global in der Socketklasse auf 15 Sekunden erhöht). Leider habe ich immer noch ein etwas ungutes gefühl, denn der andere Timeout behebt ja nicht das ursprüngliche Problem (es werden nicht betroffene Verbindungen "abgeräumt").


    Filter Streaming hat noch meinen Erfahrungen weder positive noch negative Auswirkungen auf die Abbrüche gehabt. Für meine Tests hatte ich es letztendlich zur Reduzierung von Debug-Meldungen auf beiden Clients deaktiviert.


    Leider kann ich die neue Streamdev-Version erst übernächstes Wochenende testen.


    Grüße,
    Holger

    VDR 1-3: Zotac ZBox HD-ID42, yavdr-0.5
    VDR 4: AMD5900/Asus M3N-78, yavdr-0.5
    DVB-Empfang: Netceiver
    Storage: via NFS von separatem Fileserver

    [size=10]

    3 Mal editiert, zuletzt von hsteinhaus ()

  • Leider nicht so ohne weiteres. Habe ich nicht aufgehoben und ich komme so schnell leider nicht in die Nähe meines VDRs. Allerdings kannst du das Verhalten sehr einfach reproduzieren, wenn Du den Timeout in den Bereich von 900-1000 ms verkürzt - dann ist zumindest auf meinem System jedes zweite Umschalten fehlgeschlagen. Anschließend war auch der Stream des zweiten Clients tot.


    Grüße,
    Holger

    VDR 1-3: Zotac ZBox HD-ID42, yavdr-0.5
    VDR 4: AMD5900/Asus M3N-78, yavdr-0.5
    DVB-Empfang: Netceiver
    Storage: via NFS von separatem Fileserver

    [size=10]

  • Kleiner Statusbericht:


    Das ursprüngliche Problem besteht bei mir mit vdr 1.7.17 und aktuellem GIT-Stand (87de8aeff6a3d600e7c1d9ed910bc40b98ab969e) immer noch unverändert weiter.


    Viele Grüße,
    Olli

  • Ich habe nochmal versucht das Problem nachzustellen, indem ich einen Client per iptables abwürge. Das Server-Log sieht exakt so aus, wie Du es in Deinem zweiten Beitrag oben gepostet hast. Den anderen Client hat's nicht interessiert. Konnte weiterschauen und auch zappen.


    Hat die neue streamdev-client Version etwas am Log des "unbeteiligten" Clients geändert?

  • Hm.


    Mein Standard-Use-Case ist ungefähr so:


    -- ein Client ist ein vdr mit streamdev-client
    -- der andere ein VLC, welches mit http auf den streamdev-server zugreift


    Vielleicht ist diese besondere Kombination relevant.


    Ich muss gestehen, dass der vdr-client noch mit 0.5.0 läuft. Ich werde den ebenfalls Updaten und rückmelden.


    Vielen Dank!


    Viele Grüße,
    Olli

  • Über http wird immer TS genutzt.


    Der Effekt scheint so zu sein:


    a) VDR-Client zappt -> Störungen beim http-Client (aber i.d.R. kein totaler Verbindungsabbruch)


    b) Zappen (bzw. Beenden) von VLC -> VDR-Client Bild friert ein


    Das passiert nicht immer -- ich würde sagen, alle 5-10 Umschaltungen.


    Der TV-Server hier hat eine echte Dual-Core-CPU (Athlon 4850e), was ja wegen Multi-Threading-Problemen relevant sein könnte.


    Viele Grüße,
    Olli

  • Durch bloßes zappen schon Störungen??? Da läuft dann aber irgendetwas anderes tierisch daneben!


    Laut erstem Posting hast Du mit 4 DVB-S-Karten ja ausreichend Resourcen. Ein verschieben der Streams zwischen den Karten sollte daher nicht auftreten. Kannst Du trotzdem mal die "frontend x/y provides ..." Meldungen beim Start des Server posten sowie das Server-Log beim Zappen wenn VDR mit -l 3 (volles Logging) gestartet wird?

  • Hallo schmirl,


    ich kann das Problem von owagner nur bestätigen (siehe auch streamdev server/client verbindung times out)
    Für mich sieht es so aus, daß es dann Probleme gibt, wenn filterstreaming mit involviert ist.
    Ich würde ggf weitere Traces erstellen.


    vG
    WoZ

    Clients
    VDR1: yaVDR 0.5 stable auf ZOTAC ION A 4Gbyte RAM / mit ATRIC - IR - Einschalter softhddevice per streamdev am Server
    VDR2 / VDR3: MLD 5.1 auf Raspberry pi3
    2 x VOMP 0.4 auf mediamvp
    Server
    Cubietruck, Lubuntu Trusty, vdr aus yaVDR - sourcen, 1 x TT S2-3600, 1 x TT S2-3650 CI, 1 x sundtek SkyTV III, 1 x sundtek SkyTV IV

    Einmal editiert, zuletzt von woz ()

  • ... wobei Du im anderen Thread geschrieben hast, dass es seit dem Update des Server läuft. Dem ist also offenbar nicht so? Deine Vermutung war, dass das Problem auftritt, wenn alle Karten belegt sind und Live-TV umgeschaltet werden muss. Für diesen Fall lohnt sich evtl. ein Update des Servers auf den aktuellen git-Stand. Da gab es einen Bugfix.


    Dass owagner ein Problem mit dem Umschalten von Live-TV hat, bezweifle ich aber, da er ja 4 DVB-Karten nutzt. Aber evtl. sind die 4 Karten doch nicht gleichwertig und VDR verschiebt Live-TV. Das werden die "frontend ... provides ..."-Meldungen zeigen.

  • Mar 22 18:55:27 tvserver vdr: [1051] frontend 0/0 provides DVB-S2 with QPSK ("Montage Technology DS3000/TS2020")
    Mar 22 18:55:28 tvserver vdr: [1051] frontend 1/0 provides DVB-S2 with QPSK ("STB0899 Multistandard")
    Mar 22 18:55:28 tvserver vdr: [1051] frontend 2/0 provides DVB-S2 with QPSK ("STB0899 Multistandard")
    Mar 22 18:55:28 tvserver vdr: [1051] frontend 3/0 provides DVB-S2 with QPSK ("STB0899 Multistandard")

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!