Sinn und Unsinn von "emergency exit"

  • Zitat

    Auch wenn es vielleicht vergebliche Liebesmüh' ist ...


    Danke für die Blumen :O


    Zitat

    der Transfer-Mode "hängt" nicht 10 Sekunden in der Schleife


    Ok, ich habe übersehen, dass Du den sleep gegen einen Timer ausgetauscht hast.
    Damit dürfte es jetzt in der Tat etwas besser laufen.


    Ich verstehe trotzdem nicht, warum die Frontends nicht wie ein Recorder aufgebaut sind?
    Der Recorder ist ein Thread mit eigener Queue und Receive übermittelt nur ein Paket. Also schnell und genau so, wie man es erwarten würde.
    Warum muss der VDR-core sich mit Transfer-Problemen rumschlagen?
    Ich sehe darin weder eine Vereinfachung noch eine Verbesserung.
    Wenn ich johns richtig verstanden habe, arbeitet sein Frontend eher wie ein Recorder - also richtig nach meiner Einschätzung.


    Zitat

    Und wenn du VDR nicht mehr verwenden magst ...


    Das kam nur durch Deine Äußerung, dass Du die Abhängigkeiten nicht ändern willst.


    Es ist jetzt über ein Jahr her, dass ich mir ne zweite Budget-Karte zugelegt habe.
    Damals wollte ich die Timer-Konflikte entspannen. Statt dessen haben die Probleme zugenommen.
    Ich habe auf Probleme hingwiesen, logs übermittelt - aber in dem Jahr ist (bezogen auf meine Probleme) nix passiert.
    Sowohl Aufnahmen mit Länge 0, Timer-Konflikte, die ich nicht nachvollziehen kann und defekte Aufnahmen.
    Dass die unterschiedlichen Eigenschaften von Sender und Karte nicht richtig berücksichtigt werden, war mir schon immer ein Dorn im Auge.
    ... aber Ok, das betrifft ja nur die Minderheit mit unterschiedlichen Karten ;)


    Ich mag Dich und auch den VDR und ich bringe mich auch gerne ein.
    ... aber ich mag nicht, dass Du Dich allen Errungenschaften moderner SW-Entwicklung verweigerst und dass Du divenhaft alle Standards ignorierst.
    Ich unterstütze selbstverständlich Deine Freiheit, zu tun und zu denken, was Du willst -
    nur denke ich, dass der vdr schon lange kein Spielzeug eines Einzelkämpfers mehr ist, sondern ein ausgewachsenes Produkt mit einer großen Anwenderschar.
    Produktpflege gehört nach meinem Verständnis anders eingetacktet, als Du es handhabst. Das gilt für gerade anstehende Arbeiten genauso, wie für geplante Änderungen.
    Ich zähle nicht zu den Leuten, die unter Teamarbeit verstehen: toll ein anderer machst.
    Insofern liegt es an Dir, wenn ich den vdr nimmer verwende.


    Gero

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

  • Moin!


    Dass die unterschiedlichen Eigenschaften von Sender und Karte nicht richtig berücksichtigt werden, war mir schon immer ein Dorn im Auge.
    ... aber Ok, das betrifft ja nur die Minderheit mit unterschiedlichen Karten ;)


    Das ließe sich über ein Plugin und die DeviceHooks realisieren, denke ich.
    Das Schöne daran ist, dass der Code dann nur bei den Leuten zum Tragen kommt, die es brauchen.


    Lars.


  • Und so sollten alle Ausgabedevices arbeiten! Sie sollten die angebotenen TS-Pakete sofort entgegennehmen und aus PlayTs() zurückkehren. Wenn ein Ausgabedevice das nicht tut, dann sollte es entsprechend geändert werden. Und wenn es sich an für es nicht verständlichen Paketen "verschluckt", dann sollte es die angebotenen Pakete halt ignorieren.
    Ein Ausgabedevice muß ja sowieso erstmal die TS-Pakete aufsammeln und die entsprechenden Payloads puffern, bis es dann mal einen kompletten Frame zusammen hat, den es darstellen kann.


    Klaus

  • Moin moin,


    Zitat

    Das ließe sich über ein Plugin und die DeviceHooks realisieren, denke ich.


    Das waage ich mal zu bezweifeln.
    Schließlich muss die Information ja auch irgendwo gehalten/abgelegt werden und das gibt die bisherige Channels-Struktur nicht her (. Es gab ja schon mehrfach den Wunsch, die Channelsstruktur aufzubohren).
    Aber ich lasse mich gerne vom Gegenteil überzeugen :)


    Zitat

    Und so sollten alle Ausgabedevices arbeiten!


    Hm, vielleicht verstehe ich ja wieder mal was nicht, aber meiner Ansicht nach arbeitet das SdFfDevice nicht so - und das ist ja vom VDR-Core, also von Dir.
    Die cTransfer-Klasse soll doch eine Abstraktion zwischen Sender und Anzeiger sein.
    Meiner Ansicht nach wäre das der richtige Platz, um einen Ringpuffer zu verwalten (so wie es im Recorder passiert).
    Es gibt doch für jeden Wiedergabe-Weg eine cTransfer-Instanz, somit wären auch die entsprechenden Puffer redundant.
    Eigentlich™ gibt es keinen Grund, warum jeder Player einen Ringpuffer anlegen müsste.
    Selbst wenn die Puffer unterschiedlich groß sein sollten, könnte das in der cTransfer-Klasse gekapselt werden.
    Die Recorder sind ja schon Threads, dann fehlt nur noch die Aufteilung von cTransfer in eine Thread/Puffer-Klasse, bei der Receive() den Puffer füllt und PlayTS in einem eigenständigen Thread läuft, welcher aus dem Puffer liest und die Player-Wiedergabe-Methode aufruft.


    Naja - wie auch immer.
    Beim SD-FF-Device erfolgt die Wiedergabe synchron in der device-Schleife des Empängers, denn das PlayTS ruft beim SD-FF-Device die Methode WriteAllOrNothing auf, welche höchtswahrscheinlich die Probleme verursacht. Habe jetzt nicht verfolgt, für was der erste Parameter beim SD-FF-Device steht, aber ein Puffer würde wahrscheinlich nicht per Dateioperationen gefüllt werden. Oder?
    Hier fehlt also die Entkoppelung zwischen Empfänger und Wiedergabe.


    Gero

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


  • Hm, vielleicht verstehe ich ja wieder mal was nicht, aber meiner Ansicht nach arbeitet das SdFfDevice nicht so - und das ist ja vom VDR-Core, also von Dir.


    Moment, die eigentliche Verarbeitung der Daten findet ja im Treiber (bzw. der Firmware) für die SD-FF-Karte statt. Dort müssen die TS-Pakete im Live-Modus quasi in "Echtzeit" angenommen werden.


    Zitat


    Die cTransfer-Klasse soll doch eine Abstraktion zwischen Sender und Anzeiger sein.
    Meiner Ansicht nach wäre das der richtige Platz, um einen Ringpuffer zu verwalten (so wie es im Recorder passiert).


    Du wirst lachen, so war es früher mal. Aber auch dieser Puffer ist ab und zu übergelaufen, wenn die Karte "gesponnen" hat.
    Nicht jedes Problem läßt sich dadurch beheben, daß man einfach nur Speicher "draufschmeisst".


    Zitat


    Es gibt doch für jeden Wiedergabe-Weg eine cTransfer-Instanz, somit wären auch die entsprechenden Puffer redundant.
    Eigentlich™ gibt es keinen Grund, warum jeder Player einen Ringpuffer anlegen müsste.


    Überleg doch mal: die Daten kommen in einzelnen, kleinen TS-Paketen beim Ausgabedevice an. Dieses muß die Payload der TS-Pakete erstmal auspacken und zwischenspeichern, bis es ein vollständiges Video- bzw. Audio-Paket beisammen hat. Erst dann kann es das Paket abspielen. Im Ausgabedevice (sei es im Plugin oder in der Hard- bzw. Firmware) muß also bereits gepuffert werden. Und das Device muß die Daten im Mittel in der Geschwindigkeit annehmen, wie sie vom Sender kommen. Wäre es zu langsam, würde irgendwann jeder Puffer überlaufen, und sei er noch so groß.



    Das Problem liegt im Treiber bzw. der Firmware der SD-FF-Karte. Anscheinend verschluckt sich diese an Daten, mit denen sie nichts anfangen kann und blockiert dann zu lange, anstatt die Daten einfach zu verwerfen. Das müsste sich vielleicht mal jemand im Treiber bzw. der Firmware anschauen, aber ich vermute stark, daß das heutzutage niemanden mehr interessiert...


    Hast du die Version 1.7.36 schon mal ausprobiert, oder ist diese ganze Diskussion nur noch theoretischer Natur?


    Klaus

  • Moin!



    Das waage ich mal zu bezweifeln.
    Schließlich muss die Information ja auch irgendwo gehalten/abgelegt werden und das gibt die bisherige Channels-Struktur nicht her (. Es gab ja schon mehrfach den Wunsch, die Channelsstruktur aufzubohren).
    Aber ich lasse mich gerne vom Gegenteil überzeugen :)


    Naja, das Plugin muss sich natürlich schon merken, welche Kanäle es für welches Device sperren/zulassen soll, ich hab nicht gesagt, dass es automatisch und nur mit der channels.conf geht... :)
    In anderen Programmen muss es ja auch erst mal konfiguriert werden.


    Lars.

  • Ich hatte letztens auch Probleme mit der SD-FF. Ob hier Tuner oder Ausgabe die Ursache waren kann ich aber nicht sagen. Ergebnis war aber, dass auf dem Schirm nur ein buntes Muster zu sehen war. Aufnahme im Hintergrund natürlich unbrauchbar.


    Was spricht denn dagegen in so einem Fall wirklich einen Buffer vorzuhalten und wenn der volläuft, dann halt anfangen den Rest einfach wegzuwerfen? Muss ja nicht generell im VDR so gehandhabt werden, aber vielleicht im dvbsddevice-Plugin? Wenn der VDR automatisch startet um eine Aufnahme zu machen, dann ist mir total egal was auf dem Bildschirm zu sehen ist. Nach der Aufnahme fährt der VDR dann ja wieder runter und beim nächsten Boot kann die Welt schon wieder ganz anders aussehen. Im besten Fall wird nie jemandem auffallen, dass die Ausgabe ein Problem hatte.

  • Moin!



    Naja, das Plugin muss sich natürlich schon merken, welche Kanäle es für welches Device sperren/zulassen soll, ich hab nicht gesagt, dass es automatisch und nur mit der channels.conf geht... :)
    In anderen Programmen muss es ja auch erst mal konfiguriert werden.


    Das, was du da meinst, gilt nur für die Empfangsseite.


    Klaus

  • Ich hatte letztens auch Probleme mit der SD-FF. Ob hier Tuner oder Ausgabe die Ursache waren kann ich aber nicht sagen. Ergebnis war aber, dass auf dem Schirm nur ein buntes Muster zu sehen war. Aufnahme im Hintergrund natürlich unbrauchbar.


    War das eine Aufnahme, die vom Tuner der SD-FF kam, oder von einer anderen (Budget-) Karte?
    Falls ersteres der Fall war, dann hätte auch ein zusätzlicher Puffer wohl nichts gebracht, denn wenn der ARM abgestürzt ist, ist alles zu spät.


    Zitat


    Was spricht denn dagegen in so einem Fall wirklich einen Buffer vorzuhalten...


    Probiert doch einfach mal aus, ob der Ansatz in der Version 1.7.36 eine Verbesserung bringt. Bevor nicht jemand nachweist, daß das nichts bringt, werde ich mich an dieser Diskussion nicht mehr beteiligen - reine Zeitverschwendung!


    Klaus

  • Moin!


    Das, was du da meinst, gilt nur für die Empfangsseite.


    Ja. Post 29 hatte ich so verstanden, dass man bestimmte Kanäle bei bestimmten Karten verbietet, weil die "das nicht zuverlässig aufnehmen können".
    Das ändert nichts an dem SD-FF-Ausgabe-Problem, es wurden hier parallel zwei verschiedene Dinge besprochen. :)


    Lars.


  • War das eine Aufnahme, die vom Tuner der SD-FF kam, oder von einer anderen (Budget-) Karte?
    Falls ersteres der Fall war, dann hätte auch ein zusätzlicher Puffer wohl nichts gebracht, denn wenn der ARM abgestürzt ist, ist alles zu spät.


    Aufnahme wurde mit dem Tuner der FF-Karte gemacht. Ob der ARM abgestürzt war weiß ich nicht. Ich konnte den VDR "retten" durch Öffnen des OSD und Wiedergeben einer Aufnahme. Die Ausgabe hat sich dabei wieder "gefangen".


    Ich werde aber mal auf 1.7.36 upgraden und weiter beobachten.

  • Zitat

    Moment, die eigentliche Verarbeitung der Daten findet ja im Treiber (bzw. der Firmware) für die SD-FF-Karte statt.


    Na klasse!
    Hauptsache Du must nix tun :O


    Du weißt aber schon, dass Dateioperationen ein vielfaches der Zeit einer Speicheroperation brauchen?


    Zitat

    Du wirst lachen, so war es früher mal. Aber auch dieser Puffer ist ab und zu übergelaufen, wenn die Karte "gesponnen" hat.
    Nicht jedes Problem läßt sich dadurch beheben, daß man einfach nur Speicher "draufschmeisst".


    Hey Klaus - auch wenn Du mich für einen geistigen Tiefflieger hälst, ganz so einfach bin ich dann doch nicht gestrickt ;)
    ... und ich habe bestimmt nicht verlangt, dass Du die Stelle verschlimmbessern sollst.


    Ein Ringpuffer - so wie ich ihn verstehe - kann immer beschrieben werden und blockiert die schreibende Seite nie!
    Wenn der lesende Prozess nicht hinterher kommt, na gut - Pech gehabt. Dann gibt es eben Paketverlust - aber nur für den, der nicht in die Pötte kommt.
    In ffplay - für mich die Vorlage schlechthin - wird es auch so gemacht.
    Lesen und Dekodieren sind voneinander unabhängige Threads und erst direkt vor der Anzeige wird entschieden, ob ein Frame nach draußen oder nach /dev/null geschickt wird.


    Ich würde den Treiber auf jeden Fall als "blackbox" einstufen, den ich nicht beeinflussen kann.
    Wenn ich also weiß, dass der Treiber manchmal stocken kann, muss ich in der Anwendung dafür Sorge tragen, dass dies Stocken niemand beeinträchtigt.


    Zitat

    Das müsste sich vielleicht mal jemand im Treiber bzw. der Firmware anschauen, aber ich vermute stark, daß das heutzutage niemanden mehr interessiert...


    und wenn schon.
    Im Gegensatz zu Dir gehe ich davon aus, dass externe Störungen "normal" sind.
    Jetzt ist es die SD-FF und demnächst ist es irgend jemand anderes. Spielt es eine Rolle? - Ich denke eher nicht.
    Wenn ich z.B. ein Ausgabe-Device per WLan anbinde, könnte das gleiche Problem wieder auftauchen.


    Wenn der VDR davon ausgeht, dass es bei der Übertragungskette zu Problemen kommen kann und Sender und Empfänger der Pakete entkoppelt, dann werden es immer lokale Probleme bleiben, die keine Kollateralschäden verursachen.
    Was mich stört ist einfach die Tatsache, dass ein Problem bei der Wiedergabe zu defekten Aufnahmen führen kann. Das kann und darf nicht sein.
    Wenn Dir das zu theoretisch ist, dann lass es eben.


    Zitat

    Naja, das Plugin muss sich natürlich schon merken, welche Kanäle es für welches Device sperren/zulassen soll, ich hab nicht gesagt, dass es automatisch und nur mit der channels.conf geht...


    Ja, so könnte es schon gehen.
    Nur halte ich das für die schlechteste aller Möglichkeiten.
    Die Eigenschaften der Kanäle sollten an einer Stelle gepflegt werden.
    Vielleicht ist dort ja nach 2.0 was möglich. Mann soll die Hoffnung nie aufgeben.


    Zitat

    werde ich mich an dieser Diskussion nicht mehr beteiligen - reine Zeitverschwendung!


    Wenn der VDR mit dem Klaus nimmer gepflegt werden kann, sollte man vielleicht über einen Fork nachdenken.
    Es macht keinen Spaß mehr, sich für Produktqualität einzusetzen.


    Gero

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

  • johns:
    Damit die neue Schleife in transfer.c auch mit softhddevice funktioniert, sollte dort in PlayTsAudio und PlayVideo3 immer dann wenn ein TS-Puffer nicht angenommen werden kann, nur dann 0 zurückgegeben werden, wenn wirklich ein Retry gewünscht. Ich denke zumindest beim Erreichen von Soft- oder Hardlimits wolltest Du lieber die Pakete wegwerfen? Dann braucht der vdr aber ein return size.

    vdr-2.6.7

    softhddevice, dbus2vdr, dvd, epgsearch, femon, graphtftng, web, menuorg,
    osdteletext, radio, recsearch, satip, tvguide, vnsiserver

    ubuntu focal, yavdr-ansible, linux-5.15 ,AsRock J4105, CIne CT-V7 DVB-C


  • Wenn der VDR mit dem Klaus nimmer gepflegt werden kann, sollte man vielleicht über einen Fork nachdenken.
    Es macht keinen Spaß mehr, sich für Produktqualität einzusetzen.Gero


    Du bist ja noch schlimmer als unsere Politiker. Die zitieren auch nur genau das, was sich marktschreierisch vermarkten laesst, und lassen den Teil, welcher zum richtigen Verstendnis fuehrt, einfach weg.
    Klaus hat gesagt was gemacht werden muss, damit die Diskussion weiter Sinn macht.
    Aber Du scheinst ja nicht in der Lage dazu zu sein, eine aktuelle Version zu installieren :)


  • Damit die neue Schleife in transfer.c auch mit softhddevice funktioniert, sollte dort in PlayTsAudio und PlayVideo3 immer dann wenn ein TS-Puffer nicht angenommen werden kann, nur dann 0 zurückgegeben werden, wenn wirklich ein Retry gewünscht. Ich denke zumindest beim Erreichen von Soft- oder Hardlimits wolltest Du lieber die Pakete wegwerfen? Dann braucht der vdr aber ein return size.


    PlayTsAudio muß ich mir noch mal ansehen.


    PlayAudio + PlayVideo(3) stimmen, da die über den PES Parser von VDR aufgerufen werden
    und der hat seinen eignen Puffer bzw. Ringpuffer.


    bzw. PlayVideo(3) wird auch über einen cReceiver aufgerufen, der schmeißt dann ein ganzes
    PES Packet weg, wenn mein Video PES Ringpuffer voll ist.


    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

    Einmal editiert, zuletzt von johns ()

  • So ich habe leider noch 1.7.35; ist aber nicht so wichtig.


    Wenn ich jetzt in cDevice::PlayVideo bzw. cDevice::PlayAudio bzw. cDevice::PlayTsAudio
    (ich meine meine abgeleitetete Klasse) die Pakete wegwerfe, wenn mein interner Puffer
    voll ist, dann habe ich Artefakte bei der Wiedergabe von Aufnahmen.


    Die Ursache ist, daß cDevice::Poll nicht richtig ausgewertet wird.


    In dvbplayer.c wird DevicePoll(Poller, 10); mit 10ms aufgerufen, der Return Wert aber
    nicht ausgewertet.


    Mein Ausgabedevice schläft nur 10ms und damit werden meine Internen Puffer
    natürlich sehr schnell bis zum erbrechen voll.


    Entweder darf ich in cDevice::Poll länger schlafen oder der VDR sollte den Rückgabewert
    auswerten.


    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

  • Zitat

    Und wir wissen immer noch nicht, ob dieses Problem in Version 1.7.36 noch auftritt oder nicht...


    Wenn alle SW-Systeme mit dieser Einstellung eingeführt würden, würde es Deutschland schon lange nimmer geben, weil alle Akw's "aus Versehen" explodiert wären.


    Ich "programmier" beruflich zwar nur mit Word und Excel, habe aber im Zuge von QS auch Code-Reviews durchzuführen.
    Wenn ich entdecke, dass was theoretisch falsch ist, dann lasse ich es ganz bestimmt nicht auf den Test drauf ankommen, ob der Fall in der Praxis provoziert werden kann.
    Keiner meiner Kunden hätte für ein solches Vorgehen Verständnis.
    Ich bin weder Politiker noch Marktschreier, habe nur eine andere Sichtweise auf Qualität - und somit bin ich überzeugt, dass das, was theoretisch falsch ist, praktisch niemals richtig sein kann.


    Gero

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

  • Ich bin weder Politiker noch Marktschreier, habe nur eine andere Sichtweise auf Qualität - und somit bin ich überzeugt, dass das, was theoretisch falsch ist, praktisch niemals richtig sein kann.


    Theoretiker: Nichts geht aber alle wissen warum
    Praktiker: Alles geht und keiner weiss warum.
    Auf welcher Seite Du stehst wissen wir nun ja :)
    SCNR ...

Jetzt mitmachen!

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