Posts by Zabrimus

    Ich habe in den 3 Komponenten so ein paar Probleme gefixed. Das Verhalten bei encrypted Streams ist nicht toll (einfach nur ein VK_BACK), aber das verhindert die Blockade aller Komponenten.

    Bei mpeg-dash wird der beste (mit der höchsten Bitrate) Videostream im Transcoder gewählt. Und noch ein paar andere Verbesserungen.


    Wer das testen will, sollte alle 3 Komponenten aktualisieren (Plugin, Transcoder, Browser).

    Da scheinen header nicht zu passen. Fehlt evtl. python-dev oder python3-devel oder so ähnlich?

    Es wird versucht, gegen Header von python 3.8 zu kompilieren. Ist CE nicht schon bei einer höheren Version?

    Wo hast Du die Sourcen von python-evdev her? Ist das überhaupt eine Version die python3 unterstützt?

    Die Python3 Header werden schon gefunden. Verwendet habe ich die aktuelle Version (git) aus dem Repository: https://github.com/gvalkov/python-evdev.

    Kompiliert habe ich mit CE 19. Es kann sein, daß 20 oder 21 schon höher sind. Welche Python Versionen tatsächlich untersützt werden ist irgendwie so gar nicht herauszufinden. Aus der setup.py könnte man schliessen, daß es die Versionen 3.6 - 3.11 sind, aber das ist etwas unsicher.

    Mal ein Beispiel, daß ich nicht verstehe.

    Ich habe auch die Reihenfolge der "-I" geändert, aber das brachte nicht das gewünschte Ergebnis.

    Das ist etwas tricky und und Zabrimus müsste dafür python-evdev in seine Distri aufnehmen.

    Das habe ich probiert, aber der cross-compile für python-evdev klappt nicht. Ich verstehe nicht, was genau fehlt oder falsch ist.

    Das Problem ist schwieriger zu lösen, als ich dachte. Es gibt/gab auf jeden Fall noch ein Problem mit dem Timing ResetVideo/StopVideo. Aber das ist noch nicht alles. Irgendwo ist noch der Wurm drin.

    Schon der Versuch, encrypted Streams abzufangen und alles sauber zu beenden erweist sich als schwierig.

    Benutzt du schon die neue Version vom Sonntag? Ich hätte zumindest vor dem

    Code
    [vdrweb] Error playing ts, result is -1

    noch ein paar Ausgaben mehr erwartet. Bevor abgebrochen wird, wird es eine relativ kurze Zeit erneut versucht. Vielleicht wäre eine höhere Wartezeit besser, aber da fehlen Erfahrungswerte.

    Verdammt. Das

    Code
    [main.cpp:185] Stop streamId

    kommt von extern. Entweder Browser oder Plugin. Ich muss versuchen, irgendwie an mehr Infos zu kommen, warum der Stop aufgerufen wird.


    Der Segfault kommt im Transcoder?


    Edit:

    Ich habe den Browser und den Transcoder um eine Info erweitert, die angibt, warum oder wer das /StopVideo überhaupt sendet. Im Transcoder wird die Info mit ausgegeben. Z.B. so etwas

    [transcoder] [info] [main.cpp:186] Stop streamId 192.168.178.20_50001, reason VDR request StopVideo

    Du setzt in PlayPacket bei jedem "Problem" tsError = true. Das ist m.E. falsch weil ja TeilPakete richtig gehändelt werden und keinen Fehler darstellen.

    Stimmt, da war noch einiges suboptimal. Das PlayPacket wurde etwas überarbeitet und sollte jetzt besser funktionieren.

    Also so wie es aussieht ist es kein Problem mit dem Stream sondern wohl ein Timing Problem.

    So wie es aussieht, hat das Problem aufgrund von Problemen in PlayPacket, den Stream abgebrochen. Kannst du es nochmal probieren?


    Die Privaten finde ich immer noch grauselig. Ich weiß gar nicht, was ich zuerst zu fixen versuchen soll oder einen Workaround für Fehler in den Sender-Seiten/Javascript finden muss. Irgendwas ist da immer noch schräg. Aktuell bin ich ja schon zufrieden, wenn wenigstens die ÖR + Arte gut funktionieren.

    Aber ich denke du behebst den Fehler noch :)

    Es gibt einen "Fix" für den Browser. Mir ist da keine bessere Lösung eingefallen. Irgendwas stimmt nicht mit den Werten, die der Browser für die einzelnen Element zurückgibt.

    Ich habe oft im Video den Lautstärkebalken oben im Bild und er geht nicht weg.

    Der Balken wird mittlerweile durch das Plugin erzeugt. Das Video startet ohne Balken, dann spielst du mit der Lautstärke, aber der Balken verschwindet nicht spätestens nach 3 Sekunden wieder?

    Findest du im syslog die Meldung "WebOSDPage::DeleteVolume"? Einfach, mehrfach, gar nicht?

    Dann habe ich versucht bei RTL mal Werbung und Film anzuschauen aber beim laden der Werbung bleibt er hängen .

    Da gibt es 2 potentielle Probleme.
    1. Das Video ist DRM geschützt und der Transcoder steigt relativ schnell aus. Ich habe bisher vergeblich versucht, den Fall zu erkennen, aber gelungen ist es mir nicht.


    2. Es findet ein Wechsel der Auflösung zwischen Werbung und Film statt.

    Im syslog kann man so etwas finden (ich habe gerade noch einen Fix für das Plugin gepushed):

    Code
    vdr: [2705147] [vdrweb] ResetVideo received: Coords x=0, y=0, w=0, h=0
    vdr: [2705147] [vdrweb] video change from h264/avc1/640/360 to h264/avc1/768/432
    vdr: [2705147] [vdrweb] Device Reset requested
    vdr: [2705147] [vdrweb] SetVideoSize in video player: x=0, y=0, width=0, height=0
    vdr: [2705148] [vdrweb] Error playing ts: 17296 13912
    vdr: [2705148] [vdrweb] Error playing ts, abort: 3384 0

    Ein DeviceClear reicht nicht aus, leider. Ich habe schon versucht mit StopVideo/StartVideo statt einem ResetVideo zu arbeiten. Allerdings habe ich ziemliche Probleme mit dem Sync. Wann ist der Stop wirklich durch, wann darf ich wieder starten? Das OSD geht an/aus.

    Versuche mit deta/susp habe ich schnell wieder aufgegeben, das wird nix.


    Moment. Der bleibt beim Laden der Werbung selbst hängen? Was sagt denn der Transcoder? Arbeitet der?

    Scheisse. Es hat doch etwas mit den Video-Änderungen zu tun, auch wenn kein Video angezeigt wird.

    Hardcoded width/height (als Attribute) beim HTML object (broadcast, also TV) fallen mir in den Rücken, weil der zoom nicht berücksichtigt wird.

    Das Broadcast-Element hat die Größe 1280x720, die Seite 1920x1080 und das sollte nicht sein. Die Mischung aus css + html attributen ist hier echt ungünstig.


    Wenn du den Browser mit -z 1280 startest, dann sollte es wieder funktionieren.

    Äh was? Es geht noch gar nicht um ein Video, sondern nur um die Seite selbst?


    Ich bin gerade mal die Git Logs durchgegangen und kann nichts finden, daß das Verhalten erklären könnte. Betätigt habe ich mich Wesentlichen nur mit dem Video-Handling oder es zumindest versucht.


    Gibt es Hinweise in den Logs? Weisst du denn ungefähr den letzten Stand, der noch funktioniert hat?

    Wäre es theoretisch möglich, den Stream, den man vom transcoder bekommt aufzuzeichnen?

    Das ist nicht nur theoretisch möglich. Wird der entsprechende Plugin-Parameter gesetzt, dann werden alle eingehenden Streams (getrennt nach Video) in das Aufnahmeverzeichnis gespeichert.

    Das habe ich mal zu Debug-Zwecken eingebaut und man kann nicht situativ entscheiden, ob man jetzt aufnehmen will oder nicht. Aber da dies nur ein Flag ist, sollte man das auch zur Laufzeit ändern können - theoretisch.

    Code
    { "savets",      optional_argument, nullptr, 's' },

    Anhand der Auflösung vielleicht nicht, aber vielleicht anhand der URL.

    Ich transportiere jetzt die Video Informationen vom Transcoder zum VDR. Dort kann ich jetzt entscheiden, ob ein cPlayer::DeviceClear ausreicht oder ob noch mehr erforderlich ist.

    Der entsprechende Code fehlt an der Stelle noch, aber die Informationen sind alle gesammelt.


    Ich musste dazu alle 3 Komponenten ändern und es ist sinnvoll, bei einem Update den Browser, das Plugin und den Transcoder zu aktualisieren, damit das Zusammenspiel noch passt und es keine seltsamen Fehler gibt.


    Ich weiß noch nicht wann, aber ich werde demnächst CEF (chromium embedded framework) aktualisieren. Leider gab es da ein paar API Changes, so daß ich das noch verschoben habe. In der bestehenden Version bekomme ich hin und wieder und nicht reproduzierbar, Exceptions, die tief aus Chromium kommen und leider den Browser weniger bis gar nicht mehr bedienbar machen. Ob das Problem in den neueren Version gefixed ist, weiß ich nicht, aber probieren will ich es.

    PS: Könnte man die Werbung nicht anhand der Auflösung überspringen ?

    Anhand der Auflösung vielleicht nicht, aber vielleicht anhand der URL. Es gibt da verschiedene Werbung-Content-Provider die ihre Werbevideos so ausliefern. Ich fürchte nur, daß Werbung auch plötzlich innerhalb einer Sendung eingeblendet wird und da könnte es schwierig werden. Aber soweit habe ich bisher nicht schauen können :) Deshalb habe ich erst einmal nicht viele Versuche unternommen, die Werbung zu unterbinden, da der Wechsel Werbung/Sendung unvorhersehbar ist und das auch irgendwie funktionieren sollte.

    Normalerweise findet das ja auch nur bei einem Programmwechel statt. Hier aber wohl mitten im Film. Da muss ich wohl nochmal ins Plugin schauen und aufpassen das ich es mitbekomme wenn sich die Auflösung ändert.

    Ich mache ja keinen Programmwechsel, sondern nur ein Reset nach dem Stoppen des Videos und dem Start des Neuen. Aber gut, daß zumindest dafür eine Erklärung vorhanden ist.

    Die Werbung hat eine kleinere Auflösung, als die Sendung. Beide Auflösungen sind sowieso seltsam klein. Da wird wohl etwas zuviel an Bandbreite/Zeit/Kosten oder was auch immer gespart.


    Ich habe es endlich geschafft, daß das eigentliche Video nach der Sendung die richtige Länge hat. Ich weiß nicht, welche der Änderungen oder welche Kombination dafür verantwortlich ist. Das ist aber auch egal, wenn es funktioniert. Das Problem ist jetzt nur noch, daß das Ausgabedevice nur TS Errors auswirft und das Video nicht darstellt. Mit der Speicherung der eingehenden TS Packete (Parameter -s) kann ich sehen, daß durchaus etwas vernünftiges im VDR ankommt, es wird nur nicht dargestellt.

    Da ich morgen in Urlaub fahre wird es aber wohl noch etwas dauern bis ich dazu komme.

    Dann wünsche ich Dir einen schönen Urlaub :)

    Schliesst du auch die Pipe auf der Remotrans seite ? Evtl. sind da noch reste drin.

    Hmmm... Gute Idee. Das werde ich prüfen.


    Irgendeine Änderung ist dafür verantwortlich, daß der Transcoder häufiger abstürzt (wenn der Browser abgeschossen wird). Das war vorher nicht so, da muss ich dringend schauen, weil ich den Transcoder bisher einfach gemütlich habe durchlaufen lassen.


    Das Plugin kennt jetzt den Parameter "-s/--savets". Damit werden alle eingehenden TS Packete in das videodir/web gespeichert und können als Aufnahme abgespielt werden. Bei jedem StartVideo und ResetVideo wird eine neue "Aufnahme" angelegt. Zu Debugging-Zwecken bestimmt nützlich.


    Ich hatte jetzt beim Test wieder TS Fehler, aber die die erzeugten "Aufnahmen" werden problemlos abgespielt.

    Aber es gibt noch ein anderes extrem seltsames Verhalten mit softhdcuvid. Ich kann es jetzt gerade - natürlich - nicht nachstellen.

    Werbung in Fullscreen

    Sendung im Fullscreen

    Aber plötzlich wird ist das Video kleiner (rechts und unten ein Rand). Im Rand werden dann Reste der Werbung dargestellt. Allerdings nicht als Standbild, sondern eher als sehr kurze Endlosschleife.

    Dann passiert das wieder und das Video-Fenster ist noch kleiner, aber in dem neuen Rand ist alles grün.

    Ganz merkwürdig und das scheint auch von der Werbung abzuhängen.

    Kann es Probleme mit dem schnellen Wechsel der Auflösung des Videos, der Bitrate oder was auch immer geben?


    Edit:

    Mir ist es wieder gelungen. Das Bild sieht dabei so aus:

    Der untere Rand ist nicht statisch, sondern bewegt sich in einer kleinen Endlosschleife.

    Dann startete die zweite Episode automatisch und nach 4 Minuten hat sich das ganze dann aufgehängt.

    In der ARD? Vielleicht ist das dasselbe Problem, daß ich mit Sat1/Pro7 habe.


    Ich weiß einfach nicht mehr weiter. Folgende Situation habe ich bei S1P7:

    Ich will irgendwas schauen und vorher wird Werbung eingeblendet. Die Werbung läuft durch und dann soll die eigentliche Sendung starten. Und dabei gibt es 2 Probleme:

    1. Die Länge der Sendung entspricht im Browser genau der Länge der Werbung davor und nach Ablauf der Zeit wird die Sendung gestoppt und wieder Werbung gestartet.

    2. Der Transcoder schickt zwar Daten, aber im VDR habe ich nur TS-Fehler ohne Ende. Deshalb auch der Verdacht oben mit der ARD.


    Im Moment konzentriere ich mich auf 1. und habe so alles probiert, was ich im Netz gefunden habe:

    Gespielt habe ich mit den Attributen autoplay, preload und mit video.play, video.load, video.pause.

    Im Chrome-Debugger gesehen, daß eigentlich (augenscheinlich) alles funktionieren müsste. Es gibt keine Fehler, das neue transparente Video der Sendung (mit der Richtung Länge) wird auch übers Netz geladen. Den Transcoder habe ich den HTTP Header Cache-Control: no-cache untergeschoben um auch da sicher zu sein. Der Transcoder wurde gesplittet: Statt einem einfachen StreamVideo sind nun 2 Kommandos notwendig: Probe und dann StreamVideo. Das hatte andere positive Auswirkungen, die ich mir nicht erklären kann, aber eine Lösung ist immer noch nicht in Sicht.


    Ich bin rat- und ideenlos. Falls jemand mal schauen will:

    Im Browser in der Datei static-content/js/videoobserver.js befindet sich das ganze Video-Handling.

    Interessant sind dabei die Funktionen checkObjectNode und addVideoNode.


    ich werde jetzt erstmal den 2. Fehler oben untersuchen. FFmpeg wird eigentlich vollständig gestoppt, bevor das neue Video startet und trotzdem gibt es TS-Fehler im Plugin bzw. Ausgabedevice.