Posts by johns

    Du hast es aber eine Zeile tiefer verschoben.


    Vorher war es vor der Debugausgabe, nun ist es nach der Debug und der Funktion.
    Auch wenn es RingBufferReadAdvance abfängt, ist es vorher lesbarer.


    Johns

    Ist wie dein Patch, nur anstatt es zu entfernen, habe ich es umgebaut, so daß es nie zum Tragen kommt.


    An beiden Stellen. Anbei der komplette Patch, enthält noch ein ffmpeg 2.8 fix.


    Johns


    EDIT: alter Patch entfernt.

    Der Patch schaut richtig aus.


    Code
    1. if (AudioStartThreshold * 99 < used || (AudioVideoIsReady
    2. && AudioStartThreshold < used)) {
    3. return 0;
    4. }


    Die *4 können wir nicht so einfach entfernen. (Habe 4 -> 99 gemacht, was es auch entfernt).
    Danach gehen keine Radiokanäle mehr. Ansonsten konnte ich keine Probleme feststellen.
    Über streamdev gingen die Öffentlichrechtlichen ohne Probleme.


    Ein paar Sender mit Bildertafeln, haben die Debugausgabe "force start" getriggert.
    Ansonsten gibt es ein paar Meldungen beim Umschalten, aber nicht reproduzierbar, bei z.b. Viva, Anixe HD.


    Johns

    Du wirst den hier suchen:


    Code
    1. #CONFIG += -DUSE_SOFTLIMIT # (tobe removed) limit the buffer fill


    Bevor dies habe ich mit soft limit gearbeitet. Laut Klaus war dies unnötig und falsch.
    Bis dahin sollte das Springen ohne Langsamlauf funktionieren. Danach dann nicht mehr.


    Johns

    Die Zetistempel werden schon so schnell wie möglich durchgereicht.
    Aber dies ist DVB, da legt jeder den Standard, in wie weit es sowas überhaupt gibt, selbst aus.


    Der Ton wird gepuffert und wenn der erste Zeitstempel kommt, kann man die Zeit des gepufferten nachträglich berechnen.


    Video wird erstmal einfach ausgeben, wenn dann der Videozeitstempel bekannt wird, wird der Ton nachgeführt, wenn bereits zuviel gepuffert ist.
    Wenn das Video bereits zu weit in der Zukunft ist, verlangsamt bzw. gestoppt.


    Das Problem mit den Aufnahmen kann ich nachvollziehen. Der VDR liest schnell von der Platte und gibt die Daten an Video und Audio weiter.
    Ton dekodieren ist einfach und schnell. Bild dauert etwas. So kann dann der Tonpuffer voll sein, obwohl noch kein Video bereit ist.


    Hier sollte AUDIO_MIN_BUFFER_FREE zum tragen kommen, wenn kein Platz mehr im Audiopuffer ist, dann wartet der VDR bis Platz ist und wenn es zulange dauert, macht er ein Recover.


    Bei LiveTV sollte der Puffer nie voll werden. Wenn jetzt hier Probleme auftreten, vermute ich einen anderen Fehler.
    Hier kommen Bild und Ton synchron und außer bei irgendwelchen exotischen Sendern, sollte der Puffer nie voll werden.


    Johns

    Dein alter Patch, hat aber beim Video Zeitstempel agiert?


    Das wäre hier eine andere Stelle, und ich meinte hier direkt das zuviel gepufferte wegwerfen.


    Einzige Problem was ich sehe, sind Radiosender oder Standbildsender und daß an dieser Stelle der Puffer nie voll sein sollte.


    Man könnte auch noch AudioRingBufferSize hochsetzen, wenn 2s nicht reichen.


    Johns

    Ich denke immer noch, wenn dies passiert, dann ist noch wo anders ein Fehler.
    Komme aber erst nächste Woche zum testen.


    Ist direkt darüber:

    Code
    1. RingBufferReadAdvance(AudioRing[AudioRingWrite].RingBuffer, skip);


    Da bzw. so wird unbenötigter Ton weggeworfen.


    Genauso kann man da, wenn nicht mehr genug Platz im Puffer ist, etwas vom Ton wegschmeissen.
    Die Frage ist, was macht man mit dem Zeitstempel?


    Johns

    Die Frage mit dem Debuggen bezog sich darauf, wie ich das fehlende Was-auch-immer-es-ist finde.
    Ich bin schon am Suchen, aber komme nicht weiter.


    Ich meinte zur Suche, warum es überhaupt passiert.
    Der Puffer ist ca. 3s groß, das sollte locker und leicht reichen.
    Der Fall, daß der Puffer voll ist, sollte bei LiveTv nicht auftreten.


    Johns


    Um es zu debuggen. Wenn es auf ARD/ZDF passiert, dann sollte irgendwo ein "flush" oder "clear" fehlen.


    Johns

    Sind es irgendwelche exotischen Sender?
    Oder passiert es auch auf ARD/ZDF HD?


    Ich frage deshalb, weil ich hatte das Gefühl manchmal ist das Umschalten auf ARD/ZDF schnell, mal langsam und da könnte noch ein anderer Fehler drinstecken.


    Man kann noch, wenn der Puffer zu voll ist, etwas vom Anfang wegschmeissen.


    Johns

    Der Alte Patch hat ja die Ursache nicht verändert.


    Code
    1. // forced start or enough video + audio buffered
    2. // for some exotic channels * 4 too small
    3. if (AudioStartThreshold * 4 < n || (AudioVideoIsReady
    4. && AudioStartThreshold < n)) {
    5. // restart play-back
    6. // no lock needed, can wakeup next time
    7. AudioRunning = 1;
    8. pthread_cond_signal(&AudioStartCond);
    9. }


    Hier erfolgt einfach ein Zwangstart, wenn das 4x an gewünschten gepuffert ist.
    Wann ist der Zwangsstart notwendig? Nur wenn der Audiopuffer voll ist oder wenn es ein Radiosender ist.


    Wenn ich mich richtig errinnere hängt das *4 mit der Puffergröße zusammen, ist quasi der voll Check.
    Der Audioplayer check mit #AUDIO_MIN_BUFFER_FREE, aber auch ob genug Platz in der Audioqueue ist.


    Also sollte der Zwangsstart nur noch bei Radio relevant sein, da wäre eine nur Tonerkennung besser.


    Man könnte hier auch mal mit Werten von #AUDIO_MIN_BUFFER_FREE testen.


    Der neue Ansatz würde auch beim Umschalten helfen.


    Johns

    Also das Problem ist. Es ist genug Ton gepuffert und der Audioteil meint, man könnte abspielen.
    Dann kommen die ersten Zeitstempel vom Video und man müsste nun etwas vom Ton wegschmeissen, da er aber schon läuft, kann man nichts mehr wegwerfen.


    Habe ich das richtig verstanden?


    Also wäre der richtigere Ansatz, nicht IsReplay abzufragen, sondern AudioVideoIsReady.


    Johns

    Es gibt keinen Grund, warum beim Abspielen von Aufnahmen, der SoftStart aktiv sein los.


    Ich habe schon lange nicht mehr getestet, aber früher waren die Sprünge sofort.
    Vielleicht hängt es vom Sender ab?


    Einfach den Ton zwangsweise loslaufen zulassen, ist der falsche Weg.


    Im Prinzip sollte es so sein, daß alles Audio gepuffert wird.
    Sobald die Zeiten von Audio und Video bekannt sind, wird zuviel gepuffertes Audio weggeschmissen.
    Damit das Ton+Bild sofort synchron loslaufen können.


    Bei Aufnahmen sollte es nicht vorkommen, daß auf den Audiopuffer voll, gewartet werden muß.


    Johns

    Quote


    Sorry. Da weiss ich nicht was du genau meinst?! Ich dachte die asound.conf wird ignoriert wenn die Parameter -a -p in der plugin.softhddevice.conf gesetzt sind?


    Verwechsel ich jetzt. Mit -a hw:x,y wird asound.conf ignoriert.


    Ist doch schonmal ein Fortschritt. Das mit AES hast schon ausprobiert? Kannst auch bei speaker-test machen.
    Vielleicht erkennt er dann bei Stereo + PCM auch ein Signal?


    Du kannst mit asound.conf aber 3 Kanäle erzwingen und damit PCM zum laufen bekommen.


    Johns


    Wenn ich das richtig verstehe schaut das plugin auf die .conf Datei, und wenn da was entsprechendes drin steht, wird asound.conf ignoriert. Demnach macht es dann auch keinen Unterschied was ich im WFE einstelle? Da wäre wichtig, weil dann fällt schon mal eine möglicherweise falsch konfigurierte Quelle aus.


    Genau, es kann nicht an der Konfiguration liegen.


    Lautstärkeeinstellung kann es auch sein.


    Oder der A/V Receiver hängt sich auf. Es werden PCM Daten übertragen, dies erkennen manche Receiver nicht richtig,
    Man kann dies aber mit speaket-test überprüfen, wenn damit etwas kommt, dann muß es an etwas anderem liegen.


    Edit: PCM und AC3 gehen über die gleiche Leitung, wenn also AC3 geht, dann kann es an den Mixereinstellungen nicht liegen.
    Hattest du nicht das plug in asound.conf, weil sonst der A/V Receiver nicht funktionierte?


    speaker-test ist das Tool um das ganze zu testen, dann kannst Kanäle, Samplerate und Format einstellen und testen was und was nicht geht.


    Johns

    Code
    1. audio/alsa: using pass-through device 'hw:NVidia,7'
    2. vdr: audio/alsa: using device 'hw:NVidia,7'


    Sieht richtig aus. Wenn du den Parameter verwendest, dann intressiert der Inhalt von asound.conf nicht.


    Code
    1. audio: can't set channels 2 sample-rate 48000Hz


    Hier kann SoftHdDevice den Ton nicht initialisieren.
    Prüfe mal ob immer wenn kein Ton geht, diese Fehlermeldung kommt.


    Kannst mal neueres alsalib oder alsa (bzw. Linux Kernel) versuchen.
    Irgendwie klingt es nach einem Alsa Fehler in Zusammenhang mit hdmi.


    Testweise mal "-w alsa-no-close-open" und/oder "-w alsa-close-open-delay" verwenden.


    Beim Ändern des Tons wird das Device geschlossen und neu geöffnet und initialisiert.


    Johns

    Das ist inzwischen default.


    Ansonsten müsste man noch

    Code
    1. #if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(54,86,100)
    2. ///
    3. /// ffmpeg version 1.1.1 calls get_format with zero width and height
    4. /// for H264 codecs.
    5. /// since version 1.1.3 get_format is called twice.
    6. /// ffmpeg 1.2 still buggy
    7. ///
    8. #define FFMPEG_BUG1_WORKAROUND ///< get_format bug workaround
    9. #endif


    herausnehmen, der ist bei ffmpeg >=2.8 unnötig und macht meiner Meinung nach da Ärger.


    Johns

    Also wenn die Ausgabe nicht mit 50Hz oder 60Hz erfolgt, dann hat SoftHdDevice ein Problem.
    Man will wirklich nicht TV auf 24Hz ausgeben.


    Ansonsten sollte die Auflösung kein Problem sein, der NVidia Treiber macht die Skalierung.
    Bei Auflösungen > 1920x1080 sollte man die OSD Größe fest eingeben, da der OSD Puffer nur dies max. kann.
    Es wird dann auf die größere Größe skaliert.


    Also mit "xrandr" prüfen ob X11 mit 50Hz läuft.


    Johns

    Im Log müsste doch etwas stehen?


    Pulseaudio oder so etwas läuft ja nicht?


    Du hast nicht zufällig die Lautstärke auf 0?
    Lautstärke hat nur einen Einfulss auf PCM, nicht auf Passthrough.


    Zeigt dein A/V Receiver eine Veränderung, bei Stereo / AC3, an?


    Johns