Sinn und Unsinn von "emergency exit"

  • Moin moin,


    das Thema ist eines meiner letzten großen Ärgernisse, die noch ungelöst sind im VDR.


    Zwischen den Jahren gab es bei mir eine leichte Häufung von Timern, sodass ich öfters den Effekt hatte, dass eine Aufnahme nur aus Fragmenten bestand, oder ganz fehl schlug. Leider funktioniert die Timer-Konflikt-Erkennung nicht, da entweder das Thema 2mal kodiert wurde, anstatt Code gemeinsam zu verwenden, oder aber die Konstellation in der Prognose nicht alle Faktoren berücksichtigt.


    Vor kurzem aber war ich völlig fassungslos, als bei einer Aufnahme nur Schrott rauskam, als nur ein Timer aktiv war, also der VDR alle Freiheiten der Welt gehabt hätte, eine saubere Aufnahme zu produzieren.


    Das Logfile gibt zu wenig her, als dass ich es irgendwie festklopfen könnte, deshalb schreibe ich einfach mal, was ich mir zusammenfantasiert habe:
    Wie jeder meiner Sig entnehmen kann, habe ich 2 Budgetkarten am Start, d.h. parallele Aufnahmen von Ard und 2df sind eigentlich™ kein Problem.
    Das Problem äußert sich immer so, dass folgende Tupels im Log Amok laufen:

    Code
    ... vdr: [10250] ERROR: TS packet not accepted in Transfer Mode
    ... vdr: [10251] ERROR: driver buffer overflow on device 2


    Wenn dies bei einer Aufnahme passiert, gelangt vielleicht ein Bild pro Minute auf Platte.
    Nach einer Weile löst der VDR dann den Neustart (emergency exit) aus.
    Im Log sieht man dann den Neustart, aber danach geht das gleiche Dilemma wieder von vorne los.
    Ich vermute mal, das es eine Konstellation gibt, in der der VDR z.B. von 2df aufgenommen hat und sich diesen Kanal als letzten aktiven merkt.
    Bei einem Neustart wird dann der Kanal eingeschaltet und das Drama fängt von vorne an.


    Wäre es nicht sinnvoller, an dieser Stelle zu versuchen, zu einem SD-Kanal aus dem gleichen Bouquet umzuschalten?
    Ist wahrscheinlich nur ein Problem der Kabelkunden mit SD-FF und nur solange bis HD bei allen Sendern im Kabel ankommt (falls es je dazu kommen sollte).
    Jedenfalls ist es bei mir so, wenn ein SD-Kanal (z.B. ein Sender der 3.Programme) aktiv ist, dann funktioniert die Aufnahme in HD ohne Probleme.
    Vielleicht gibt es ja auch noch eine elegantere Lösung?
    Vielleicht könnte man das Frontend als optional mit der geringsten Prio konfigurieren?


    Jedenfalls ist der "emergency exit" in seiner jetzigen Form völlig wertlos.


    Derzeit ist es wohl so, dass die Aufnahme als "Abfallprodukt" der Anzeige gesehen wird.
    Vielleicht wäre es an der Zeit, das umzustellen und festzulegen, dass die Aufnahme das vorrangige Ziel eines VDR ist. Eine mögliche Anzeige wäre dann ein Addon, welches auch in die Hose gehen kann "kein Kanal verfügbar" oder so.
    Vielleicht könnte man auch konfigurativ festlegen, wo die Prio liegen soll: Live-TV oder Aufnahmen.
    Seit ich einen lauffähgigen VDR habe, gibt es für mich kein Live-TV mehr.
    Am Erfolg des zeitversetzten Live-Signals konnte ich aber erkennen, dass ich mit meiner Einstellung wohl zu einer Minderheit gehöre.


    Gruß Gero

    Ich bin verantwortlich für das, was ich schreibe, nicht für das, was Du verstehst!

  • deshalb hat Klaus den emergency exit ja auch abschaltbar gemacht.


    Die Ursache für "TS packet not accepted in Transfer Mode" ist für mich ein wenig mysteriös. Solche Meldungen erhalte ich auch hin und wieder. Dann ruckelt das Bild, obwohl femon einwandfreie Empfangsqualität anzeigt. In der Situation hilft dann meist auch kein vdr-restart (mit Neuladen der DVB-Treiber), sondern ich muss den Rechner neu booten (was den Nvidia-Treiber neu lädt und den x-server neu startet). Wenn das Problem auf der Ausgabeseite (aber nicht beim entsprechenden Plugin) zu suchen ist, dann ist ein emergency exit also ohnehin keine Lösung (außer vielleicht für FF-Karten)

    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

  • deshalb hat Klaus den emergency exit ja auch abschaltbar gemacht.


    Die Ursache für "TS packet not accepted in Transfer Mode" ist für mich ein wenig mysteriös. Solche Meldungen erhalte ich auch hin und wieder. Dann ruckelt das Bild, obwohl femon einwandfreie Empfangsqualität anzeigt. In der Situation hilft dann meist auch kein vdr-restart (mit Neuladen der DVB-Treiber), sondern ich muss den Rechner neu booten (was den Nvidia-Treiber neu lädt und den x-server neu startet). Wenn das Problem auf der Ausgabeseite (aber nicht beim entsprechenden Plugin) zu suchen ist, dann ist ein emergency exit also ohnehin keine Lösung (außer vielleicht für FF-Karten)


    Das Problem liegt wohl mit Sicherheit auf der Ausgabeseite.
    VDR wird das Paket nicht los und versucht es ein paarmal. Da vom gleichen Device auch Pakete in eine Aufnahme wandern sollen, hält das den ganzen Betrieb auf. Normalerweise wird ja davon ausgegangen, daß das Ausgabedevice jedes angebotene Paket sofort akzeptieren kann.


    Versuch doch mal in transfer.c in der Funktion


    den Wert 100 runterzusetzen (im Extremfall auf 1).
    Irgendwann kann es dann allerdings dazu kommen, daß das Live-Bild stottert, denn kurzzeitig kann der Puffer des Ausgabedevices auch mal voll sein.
    Wenn das Ausgabedevice dauerhaft blockiert, dann ist das in jedem Fall ein Fehler in der Ausgabe und sollte dort gefixt werden.


    Klaus

  • Moin!


    Zum Thema auf anderen Kanal umschalten: Es gibt im vdr die Option "letzter Kanal" oder "bestimmter Kanal". Da solltest du einen SD-Kanal einstellen, damit der vdr immer mit einem darstellbaren Kanal startet.


    Geht es um deinen Backend- oder HD-vdr?
    Wenn es der Backend-vdr ist:
    Da hast du eine SD-FF für die Ausgabe, die nur mit MPEG2-Material umgehen kann. Die HD-Sender sind in h.264.


    Wie soll eigentlich ein Output-Device reagieren, wenn es mit dem übergebenen Video nichts anfangen kann? Ich hab eine PVR350 in meinem vdr für die Ausgabe, die kann ja auch nur mit MPEG2 was anfangen. Das von dir beschriebene Problem konnte ich aber noch nie beobachten (ich nehme häufiger HD-Sendungen auf), jedenfalls kann ich mich nicht daran erinnern, wann ich eine zerstörte Aufnahme hatte. Wenn mal eine fehlte, hatte sich einfach der ganze Rechner aufgehangen (das darf er aber einmal im Jahr auch gerne tun). Ich vermute, pvr350 lässt einfach das Paket unter den Tisch fallen (bzw. der Treiber) und meldet Vollzug an den vdr. Denn den vdr interessiert es ja (noch) nicht, ob das Ausgabedevice was darstellt oder nicht.
    Wie sieht es denn mit dvbsddevice bzw. dem Treiber aus? Was macht der, wenn er HD-Video bekommt?


    Ob es evtl. nötig ist, die API zu erweitern, so dass der vdr das Ausgabedevice fragen kann, ob es das momentane Format überhaupt wiedergeben kann?
    Das wäre aber nur dann nötig, wenn es den vdr interessieren sollte. Ansonsten müsste das Ausgabedevice bei nicht unterstütztem Video einfach dem vdr sagen "alles ok, Daten verarbeitet" und dem Benutzer auf der anderen Seite evtl. eine Meldung anzeigen "nicht unterstütztes Videoformat" (optional, nicht nötig).


    Lars.

  • Wie sieht es denn mit dvbsddevice bzw. dem Treiber aus? Was macht der, wenn er HD-Video bekommt?


    meiner Meinung nach so, wie man es sich wünscht. Kein Bild, jedoch Ton, wenn zum Device kompatibel. So jedenfalls konnte ich das mit der 1.5 FF und bsw Einsfestival-HD oder anderen HD Sendern sehen, die nicht DVB-S2 benutzen. Also ohne Auffälligkeiten


  • Wie soll eigentlich ein Output-Device reagieren, wenn es mit dem übergebenen Video nichts anfangen kann?


    Ein Ausgabedevice darf den Aufrufer im Live-Modus niemals unnötig blockieren.
    Es darf höchstens mal ganz kurz die Annahme verweigern, wenn sein Puffer gerade voll ist. Da die Daten in Echtzeit reinkommen und auch in Echtzeit wieder rausgehen (also dargestellt werden), kann der Puffer des Ausgabedevices nie dauerhaft volllaufen. Tut er es doch, dann hat das Ausgabedevice einen Fehler. Kann das Ausgabedevice die Daten nicht darstellen, dann soll es die Pakete, mit denen es nichts anfangen kann, verwerfen.


    Klaus

  • Moin!


    Ich hab manchmal das Phänomen, dass streamdev-server vollläuft, weil Windows-VLC nicht "schnell genug" anzeigt (Uhren mit leicht unterschiedlichem Tempo?), das macht sich dann in stotternder Wiedergabe nach 20 Minuten oder so bemerkbar. Einmal kurz Wiedergabe anhalten und wieder starten hilft natürlich.
    Meiner Meinung nach kann es keinen zu keinen kleinen Puffer im Ausgabedevice geben, dann muss der eben größer eingestellt werden. Wenn das Ausgabedevice mit der Ausgabe nicht ernsthaft hinterher kommt, MUSS er Pakete verwerfen. Hilft ja nichts, es werden ja nicht weniger Daten, es kommt ja immer was nach. :)


    Aber wir sind uns einig, dass die Ausgabe nicht ernsthaft blockieren darf. Vielleicht sollte der vdr wirklich nicht so ernsthaft darauf beharren, seine Pakete loszuwerden. Aber das prüft geronimo ja hoffentlich mit der Schleife.


    Lars.

  • Zitat

    Zum Thema auf anderen Kanal umschalten: Es gibt im vdr die Option "letzter Kanal" oder "bestimmter Kanal". Da solltest du einen SD-Kanal einstellen, damit der vdr immer mit einem darstellbaren Kanal startet.


    Lach - auf die Möglichkeit bin ich auch gekommen.
    Das beseitigt das Problem zwar nicht, aber es verringert die Wahrscheinlichkeit.
    Also ok :)


    Zitat

    Geht es um deinen Backend- oder HD-vdr?
    Wenn es der Backend-vdr ist:


    Lach - ich hab's mehr mit Highlander: es kann nur einen geben ;)


    Will sagen - ich habe nur einen VDR.
    Der Rest sind Clients (xineliboutput), die sich mit dem Backend verbinden.


    Zitat

    Da hast du eine SD-FF für die Ausgabe, die nur mit MPEG2-Material umgehen kann. Die HD-Sender sind in h.264.


    Schon klar!
    Ich habe die Karte ja schon als Empfänger gesperrt, sie wird nur noch als SD-Ausgabe verwendet.
    Die Röhre ist ja schließlich auch SD - sollte also schon passen.


    Trotzdem ist das Problem bislang nicht gelöst, dass bei einer solchen Mischbestückung Aufnahmen getätigt werden sollen, die nicht angezeigt werden können.
    Ich bin der Ansicht, dass die Grundthese falsch ist.
    Wenn der VDR davon ausgeht, dass es immer live-TV gibt und Aufnahmen davon abgezweigt werden, dann muss es eine Lösung für den Fall geben, dass eben Sender aufgezeichnet werden sollen, die nicht angezeigt werden können (warum auch immer).


    Zitat

    Ein Ausgabedevice darf den Aufrufer im Live-Modus niemals unnötig blockieren.
    Es darf höchstens mal ganz kurz die Annahme verweigern, wenn sein Puffer gerade voll ist. Da die Daten in Echtzeit reinkommen und auch in Echtzeit wieder rausgehen (also dargestellt werden), kann der Puffer des Ausgabedevices nie dauerhaft volllaufen. Tut er es doch, dann hat das Ausgabedevice einen Fehler. Kann das Ausgabedevice die Daten nicht darstellen, dann soll es die Pakete, mit denen es nichts anfangen kann, verwerfen.


    Das deckt sich mit meiner Erwartungshaltung.
    Wobei ich "unnötig" streichen würde und die Verweigerung von Paketen finde ich unter keinen Umständen akzeptabel.


    Fakt ist nämlich bei der SD-FF, wenn die HD-Material vorgesetzt bekommt, dann landen die Frames nimmer in der Aufnahme.
    Wie ich eingangs schon schrieb, schafft es vielleicht ein Frame pro Minute auf Festplatte.
    Der VDR wird völlig blockiert von dem Puffer-Überlauf.


    Wobei ...
    ... die SD-FF zickt nicht nur bei HD-Aufnahmen rum.
    Bei manchen Sendungen von 3sat ist die Bitrate derart hoch, dass es die FF nimmer verkraftet.
    Dann geht sie in Zeitlupen-Anzeige über mit völlig abstrusen Nebeneffekten (Zeitlupenton, Bildaussetzer, etc).
    Klar, auch in so einem Falle sind die Aufnahmen dann Schrott.
    Ich habe aber keine Ahnung, ob das nur bei einer DVB-C SD-FF auftritt, oder ob das unter DVB-S ähnlich ist.


    Vielleicht müsste man die Prozess-Kette auch mal genauer unter die Lupe nehmen und gezielt fehlerhafte Situationen provozieren.


    Zitat

    Wie sieht es denn mit dvbsddevice bzw. dem Treiber aus? Was macht der, wenn er HD-Video bekommt?


    Ob es evtl. nötig ist, die API zu erweitern, so dass der vdr das Ausgabedevice fragen kann, ob es das momentane Format überhaupt wiedergeben kann?


    Hm, das Thema hatten wir schon mal im Zusammenhang mit der Kanalliste angeschnitten.
    Prinzipiell sind dort einige Konflikte vorstellbar.
    Ich denke, das wird nach 2.0 auch ne größere Baustelle ... ;)


    Zitat

    Aber das prüft geronimo ja hoffentlich mit der Schleife.


    Sorry, aber da muss ich Euch enttäuschen.
    Ich habe keinen selbstgebackenen VDR am Start.


    Als ich mich mit Streaming beschäftigt habe, habe ich die Quellen vom VDR auseinander genommen und versucht gelegentlich was zu verstehen.
    Ich habe ja auch mit einem Streaming-Server in C++ angefangen, aber nach kurzer Zeit habe ich für mich einfach festgelegt, dass mir C++ für meine Themen zu aufwändig ist und habe dann auch den Streamingserver in Java geschrieben. Seither habe ich auch keine Quellen mehr vom VDR angeschaut.
    Bin also nur noch Anwender.
    Das heißt nicht, dass ich nicht willig wäre, bei Bedarf mitzuhelfen, aber freiwillig tue ich mir C++ nimmer an.


    Gruß Gero

    Ich bin verantwortlich für das, was ich schreibe, nicht für das, was Du verstehst!


  • Wobei ...
    ... die SD-FF zickt nicht nur bei HD-Aufnahmen rum.
    Bei manchen Sendungen von 3sat ist die Bitrate derart hoch, dass es die FF nimmer verkraftet.
    Dann geht sie in Zeitlupen-Anzeige über mit völlig abstrusen Nebeneffekten (Zeitlupenton, Bildaussetzer, etc).
    Klar, auch in so einem Falle sind die Aufnahmen dann Schrott.


    In der Konstellation ist die FF auch bei mittleren Bitraten überfordert. Da gehen zwei Streams zum PC und einer zurück zur Karte. Dafür ist das Interface zum TMX320AV7111 zu schmalbandig.


    Gruß
    e9hack

  • Zitat

    Du brauchst ja auch nur eine Konstante (100) zu verändern.
    Stell dir halt einfach vor, es wäre Java, wenn dir das hilft die "Blockade" zu überwinden ;)


    Lach - ganz so blockiert bin ich nich ;)


    Die Blockade ist die, dass ich es (noch?) nicht geschafft habe, eine Entwicklungsumgebung aufzubauen (mit der ich zufrieden wäre), bzw. die gewesenen längst schon wieder entsorgt habe.
    Als ich den VDR verstehen wollte, habe ich mir alle Quellen in netbeans geladen und darin bearbeitet.
    Das Setup hat etwas gedauert, aber dann war's ok.
    Mein Fokus war die Handhabbarkeit der Quellen und Behebung von Übersetzungsfehlern. Laufenlassen des übersetzten vdrs war nicht vorgesehen.
    Ich hatte ja auch mal versucht, debian-konforme Pakete zu bauen - aber das ist enorm zeitaufwändig.


    Inzwischen ist viel Wasser den Rhein runter geflossen und derzeit habe ich nicht die Zeit, mir das nomml anzutun (die ruhigen Tage sind vorbei).


    Gruß Gero

    Ich bin verantwortlich für das, was ich schreibe, nicht für das, was Du verstehst!

  • Moin!


    Da du Debian benutzt, ist das "ganz kompliziert":

    Code
    sudo apt-get update
    sudo apt-get build-dep vdr
    apt-get source vdr
    cd vdr-<Version>


    Ich hoffe mal, das Paket benutzt quilt als Patch-Management (siehst du in debian/source/format):

    Code
    quilt push -a
    quilt new <DenkDirEinenPatchNamenAus>.diff
    quilt add transfer.c
    <editiere wie oben angegeben die Schleife in transfer.c>
    quilt refresh
    dpkg-buildpackage -tc -uc -us
    sudo dpkg -i ../vdr_1.7.<usw>.deb


    Lars.

  • Ich vermute, pvr350 lässt einfach das Paket unter den Tisch fallen (bzw. der Treiber) und meldet Vollzug an den vdr.


    so ist es. In PlayVideo wird geprüft, ob die Pakete mit dem PES Packet Start Code (0x00 0x00 0x01) beginnen. Das dürfte nur bei mpeg2 der Fall sein.
    Ist dies nicht der Fall, gibt die Funktion "return Length" an den vdr zurück, was aus Sicht von vdr für eine erfolgreiche Ablieferung steht. Die Daten werden insofern verworfen.


    Zitat von kls

    Wenn das Ausgabedevice dauerhaft blockiert, dann ist das in jedem Fall ein Fehler in der Ausgabe und sollte dort gefixt werden.


    sowas kommt aber in der Praxis nun leider mal vor, weil ein Treiber oder das frontend (xine/ vdr-sxfe) hängt oder die Hardware bockt. Das gab es bei der SD-FF-Karte, das gibt es bei VDPAU und wahrscheinlich auch mal bei der HD-FF.
    Wie war das jetzt? Schlägt der watchdog mit emergency exit nur dann zu, wenn eine Aufnahme läuft?
    Sinn und Zweck des emergency exits war ja, dass durch den Neustart (und Neuladen der DVB-Treiber) die Aufnahmen nicht komplett kaputt sind. (Man hat dann zwar vielleicht eine Lücke von 30s, aber besser als nichts.)
    Wenn nun "TS packet not accepted in Transfer Mode" mit Sicherheit auf der Ausgabeseite zu suchen ist (Aufnahmen dadurch also nicht kaputt gehen), dann sollte vdr m.E. in solchen Fällen keinen emergency exit durchführen. Zumindest dann nicht, wenn beim Start erkannt wurde, dass der vdr-Rechner durch einen Timer geweckt wurde. In diesem Fall sitzt ja in der Regel niemand vor dem TV, der davon profitieren könnte, dass das output-device wieder funktioniert. Mal abgesehen davon, dass ein stockendes output-device nicht unbedingt durch einen emergency-exit mit Neuladen der DVB-Treiber geheilt wird. Nach meiner Erfahrung ist manchmal ein reboot erforderlich. Wenn der Nvidia-Treiber oder der x-server hängt, ist das die schnellste Methode, die flüssige Wiedergabe wieder herzustellen.

    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

  • Moin!


    Um den vdr nicht vom Blockieren des Treibers abhängig zu machen, müsste PlayVideo wohl einfach nur die Daten in einen eigenen RingBuffer schreiben (blöd: schon wieder kopieren) und dann von einem anderen Thread aus das Ausgabedevice füttern. Wenn dann was hakt, muss PlayVideo (hat dann ja keinen Platz mehr im RingBuffer) das Datenpaket einfach unter den Tisch fallen lassen. Außerdem könnte es einen internen Vermerk machen, dass der Ausgabethread hängt und ein weiterer Thread (Plugin-eigener Watchdog quasi) könnte dann dafür sorgen, dass der irgendwie gekillt und neu gestartet wird (sofern möglich). Im Zweifelsfall und wenn keine Aufnahmen laufen, kann das Plugin dann auch einen Restart des vdr oder sogar ein Reboot des Rechners auslösen.


    Ansonsten kann der vdr am cReceiver-Objekt, das gerade "hakt", nicht direkt erkennen, ob der für ein Ausgabedevice ist oder für eine Aufnahme. Insofern kann der emergency exit auch nicht unterscheiden.


    Lars.


  • Um den vdr nicht vom Blockieren des Treibers abhängig zu machen, müsste PlayVideo wohl einfach nur die Daten in einen eigenen RingBuffer schreiben (blöd: schon wieder kopieren) und dann von einem anderen Thread aus das Ausgabedevice füttern.


    Also in cTransfer wird sowas garantiert nicht passieren! ;)
    Das hatten wir früher mal, und ich bin froh, daß ich das los bin.


    Vielleicht kann ja doch mal jemand, der das Probem hat (oder es zumindest provozieren kann) in cTransfer::Receive() einige Versuche dazu anstellen.
    Als erstes könnte man mal statt 100 einfach 1 nehmen. Dann wird jedes nicht angnommene Paket sofort verworfen. Dann könnte man mal testen, wie hoch der Zähler (i) im Normalfall läuft (wenn überhaupt). Nehmen wir mal an, er läuft normalerweise höchstens auf 5 (das wären 50ms, was bei 25fps mehr Zeit ist, als für die Anzeige eines Frames gebraucht wird) und im Fehlerfall wahrscheinlich bis auf 100. Dann könnte man hergehen und in cTransfer ein Flag einbauen, das das wiederholte Aufrufen von PlayTs() unterbindet, sobald der Zähler einmal über 5 gelaufen ist, und erst wieder zurückgesetzt wird, wenn ein Paket sofort angenommen wird.


    Klaus

  • Moin!


    Also in cTransfer wird sowas garantiert nicht passieren! ;)
    Das hatten wir früher mal, und ich bin froh, daß ich das los bin.


    Da hat das ja auch nichts verloren... :) Das muss ja das Ausgabe-Plugin entscheiden, ob es das braucht.


    Vielleicht kann ja doch mal jemand, der das Probem hat (oder es zumindest provozieren kann) in cTransfer::Receive() einige Versuche dazu anstellen.
    Als erstes könnte man mal statt 100 einfach 1 nehmen. Dann wird jedes nicht angnommene Paket sofort verworfen. Dann könnte man mal testen, wie hoch der Zähler (i) im Normalfall läuft (wenn überhaupt). Nehmen wir mal an, er läuft normalerweise höchstens auf 5 (das wären 50ms, was bei 25fps mehr Zeit ist, als für die Anzeige eines Frames gebraucht wird) und im Fehlerfall wahrscheinlich bis auf 100. Dann könnte man hergehen und in cTransfer ein Flag einbauen, das das wiederholte Aufrufen von PlayTs() unterbindet, sobald der Zähler einmal über 5 gelaufen ist, und erst wieder zurückgesetzt wird, wenn ein Paket sofort angenommen wird.


    Das hört sich gut an. "Leider" hab ich keine Probleme, aber vielleicht Lust, das zu schreiben. Hm, mal sehen. :)


    Lars.

  • Also meine Erfahrung mit SoftHdDevice ist.


    Das PlayVideoTs die Daten vom VDR ungepuffert bekommt.
    PlayVideo die Daten vom VDR gepuffert bekommt.


    Ich speicher die Daten in PlayVideo trotzdem in einen eigenen Ringpuffer.
    Nach cSoftHdDevice::Freeze nimmt mein Device keine Daten mehr an,
    sonst klappte die Pause nicht gescheit.


    Wenn die Daten irgendwie suspekt sind, werden sie weggeworfen.


    Johns

    Sag mir, wo die Developer sind. Wo sind sie geblieben? . . . . . . . . . . . . . . . . . . . . SoftHdDevice - A software and GPU emulated HD output device plugin.
    Sag mir, wo die Developer sind. Was ist geschehn?


    Client0: Crown CW02 MSI_C847MS-E33 Zotac_GT640_passiv Cine-S2 iMon-MCE / streamdev softhddevice
    Client1: Lian_Li_PC-Q09FB ASRock_H67M-ITX/HT I3-2100 ASUS_ENGT520_passiv / streamdev softhddevice
    Test: Lian_Li_PC-Q09R Asus C60M1-I / streamdev
    Server0: Dockstar TT-S2-3600-USB / streamdev
    Server2: Lian_Li_PC-Q07R Intel_DH61DL G620 WD20EARX 90W PicoPSU Cine-S2+DuoFlex-S2+DuoFlex-CT / streamdev / 22 Watt Verbrauch

  • Moin moin,


    Zitat

    Da du Debian benutzt, ist das "ganz kompliziert":


    Wenn das so ist, dann bin ich dabei!
    Kann aber erst am WE.


    Ich habe den Fred nicht gestartet, um eine schnelle Lösung zu erhalten, sondern um die Diskussion um die Ursachen und deren mögliche Behebung in Gang zu bringen.


    Zitat

    Da hat das ja auch nichts verloren... :) Das muss ja das Ausgabe-Plugin entscheiden, ob es das braucht.


    Das sehe ich genauso.
    Wenn der Vdr den Prozess der Verarbeitung schon auf mehrere Schultern verteilt, sollte auch die Quelle des Ärgernisses den schwarzen Peter bekommen ;)


    Zitat

    Das hört sich gut an. "Leider" hab ich keine Probleme, aber vielleicht Lust, das zu schreiben. Hm, mal sehen


    Wenn Du magst, können wir uns am WE kurzschließen.
    Dann können wir - zumindest in der timerfreien Zeit - alles durchspielen, was Euch so einfällt ;)


    Gruß Gero

    Ich bin verantwortlich für das, was ich schreibe, nicht für das, was Du verstehst!

  • habe mir gerade die 35er Quellen gezogen und den Ablauf überflogen.
    Ganz provokativ gesagt kann es, so wie es derzeit ist, nicht funktionieren ;)
    Jeder Receiver hat die Macht, den Vdr-Core völlig lahm zu legen.


    Falls ich die Quältexte richtig verstanden habe, ist nicht die Schleife in transfer.c das Problem, sondern die Schleife in device.c verbunden mit dem Umstand, dass alle Empfänger gleichberechtigt sind mit dem Vdr-Core


    Zeile 16 ist die Übergabe der Kontrolle an den Empfänger, ggf. eben an ein externes Plugin.
    Dadurch dass die Schleife für jeden Empfänger gesperrt wird, werden alle Ausgabeprobleme zu neuralgischen Problemen, die den ganzen VDR lahm legen.
    Der Umstand, dass Plugins sich als Empfänger anmelden können, vergrößert die Problematik noch - der VDR ist an dieser Stelle hochgradig verwundbar.


    Mein Gegenvorschlag sieht so aus, dass der VDR die Pakete nicht aktiv an die Empfänger verteilt, sondern die Pakete in einen Ringpuffer einträgt und den Empfängern nur mitteilt, dass es ein neues Paket gibt. Jeder Empfänger sollte in einem eigenen Fred laufen, sodass der VDR unabhängig davon ist, wie lange ein Empfänger braucht, um ein Paket abzuholen.
    Die Empfänger erhalten nur Lesezugriff auf den Ringpuffer und haben keine Möglichkeit, einen Lock zu erstellen.
    Den Ringpuffer könnte man so anlegen, dass jeder Empfänger seine eigenen Indizes verwaltet - so können langsame und schnelle Empfänger unabhängig voneinander agieren.
    Der VDR hält seine Indizes, die keiner einsehen oder verändern kann.
    Über Puffergröße und ggf. einer kleinen Pause könnte die Hauptschleife des VDR austariert werden.
    Bei einem "Überlauf" wird einfach ein altes Paket gegen ein neues ausgetauscht.
    Jeder Empfänger, der bis zu diesem Zeitpunkt das alte Paket nicht abgeholt hat, hat dann einfach Pech gehabt.
    Auf diese Weise wäre der VDR erstmal wieder autark und hätte die zeitliche Hoheit.


    Wenn in einem solchen System ein Empfänger rumzickt und Amok läuft, würde zwar die Systemlast als solche steigen, die Funktionalität des VDR wäre aber nicht beeinträchtigt.
    Auch in einem solchen System könnte der Quertreiber ohne Kollateralschäden abgeschossen werden.


    Gruß Gero

    Ich bin verantwortlich für das, was ich schreibe, nicht für das, was Du verstehst!

    Einmal editiert, zuletzt von geronimo ()

Jetzt mitmachen!

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