web (HbbTV, VDR*ELEC), Milestone 1 erreicht

  • 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.

  • 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.

  • RE: Unverschlüsselte Sendung bei MagentaSport aufzeichnen? hat mich auf eine Idee gebracht. Wäre es theoretisch möglich, den Stream, den man vom transcoder bekommt aufzuzeichnen? Unabhängig davon, dass ich nicht weiß, ob man das mit Inhalten aus den Mediatheken überhaupt dürfte.

  • 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' },
  • Ich habe nun mal alle 3 Programme (cefbroweser, remotrans, web plugin) updated und nun geht schon die ARD nicht mehr :(

    Es kommt zwar noch die Startseite, aber wenn ich dann in die Mediathek gehe, dann kommt kurz die Seite in 1080x720

    dann geht sie aber sofort wieder weg und die skalierte Seite kommt nicht mehr und das TV Bild läuft sichtbar weiter.

  • Ä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?

  • 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.

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

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

    Im Log sehe ich zwar das wohl ein Film startet aber es kommt kein Bild, vermutlich also keine weiteren Daten.

    Ich sehe leider nichts mehr im Log vom web plugin.


    Edit:

    Jetzt habe ich mal auf ARD einen Film gestreamt und der bricht nach wenigen Minuten ab mit folgender Meldung:

    Code
    Sep 21 13:43:29 Odroid vdr[6062]: [6104] [vdrweb] Error playing ts saving : 56
    Sep 21 13:43:29 Odroid vdr[6062]: [6104] [vdrweb] Delete Player...
  • 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?

  • Findest du im syslog die Meldung "WebOSDPage::DeleteVolume"?

    Ja das sehe ich. Aber ich glaube das Problem liegt woanders. Wenn der Film abbricht (warum auch immer) dann kommt der Volumebalken und das normale TV Bild wird wieder angezeigt. Dann bleibt der Balken stehen. Ich denke wir sollten erstmal das Problem finden warum der Stream einfach abbricht. Mir ist RTL und Co. nicht wichtig, Hauptsache die Mediatheken gehen. Und da sieht es bis auf die Abbrüche schon super aus.

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

    Das will ich im softhdodroid plugin abfangen und dann den Decoder neu starten. Nur ist es mir bisher halt nicht gelungen das Testszenario zum laufen zu bringen :)

  • Zum Streamabbruch:

    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.

    Derzeit bricht der Stream dann aber ab weil du den Player dann stoppst. Das habe ich bei mir zum testen mal geändert und dann laufen auch die Streams.

    Der einzige Grund tsError auf true zu setzen wäre evtl. wenn du die Daten längere Zeit (>2s) nicht los wirst. Weil dann entweder der Stream Pausiert ist oder ein anderes Problem vorliegt.


    Nun zum Problem mit dem laden der Werbung bei RTL:

    Da ist es tatsächlich so das er beim laden hängen bleibt und der Stream überhaupt nicht losläuft. Könnte evtl. an meinem Pi-Hole liegen, aber da ist der testvdr eigentlich freigeschaltet. Da suche ich nun mal weiter.


    Edit:

    Also so wie es aussieht ist es kein Problem mit dem Stream sondern wohl ein Timing Problem. Ich habe mal das Log von remotrans angehängt wo versucht wird ein Stream von RTL zu starten. Da erst immer Werbung kommt dachte ich das es daran liegt. Scheint aber generell zu sein. Manchmal klappt es ja auch .

  • 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.

  • Das verhalten beim starten von RTL streams hat sich nicht geändert.

    Code
    [2023-09-24 11:35:15.115] [transcoder] [info] [ffmpeghandler.cpp:31] Start reader thread...
    [2023-09-24 11:35:15.180] [transcoder] [info] [main.cpp:185] Stop streamId 192.168.1.54_50001
    [2023-09-24 11:35:15.188] [transcoder] [debug] [ffmpeghandler.cpp:178] Error writing trailer of /tmp/ffmpegts_192.168.1.54_50001: Broken pipe

    Startest du den Reader Thread nicht etwas zu spät. Nur 65ms später stoppt schon der Stream.


    Edit:

    Wenn ich es danach nochmal versuche bekomme ich meistens einen Segmentation Fault. Irgend etwas ist da noch faul :)

  • 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

  • Das sieht nun so aus:

    remolog:

    Code
    [2023-09-24 16:08:38.154] [transcoder] [info] [ffmpeghandler.cpp:31] Start reader thread...
    [2023-09-24 16:08:38.219] [transcoder] [info] [main.cpp:186] Stop streamId 192.168.1.54_50001, reason VDR request StopVideo
    [2023-09-24 16:08:38.221] [transcoder] [debug] [ffmpeghandler.cpp:178] av_interleaved_write_frame(): Broken pipe
    
    [2023-09-24 16:08:38.221] [transcoder] [debug] [ffmpeghandler.cpp:178] Error writing trailer of /tmp/ffmpegts_192.168.1.54_50001: Broken pipe
    [2023-09-24 16:08:38.154] [transcoder] [info] [ffmpeghandler.cpp:31] Start reader thread...
    [2023-09-24 16:08:38.219] [transcoder] [info] [main.cpp:186] Stop streamId 192.168.1.54_50001, reason VDR request StopVideo
    [2023-09-24 16:08:38.221] [transcoder] [debug] [ffmpeghandler.cpp:178] av_interleaved_write_frame(): Broken pipe
    
    [2023-09-24 16:08:38.221] [transcoder] [debug] [ffmpeghandler.cpp:178] Error writing trailer of /tmp/ffmpegts_192.168.1.54_50001: Broken pipe

    und hier das syslog

    Da gefällt irgend etwas dem VDR nicht :) oder der Ablauf ist noch falsch. Ich würde hier ein Set PlayMode 1 erwarten. Das startet einen Stream.


    Bei einem anderen Versuch habe ich folgendes Log:

    Code
    Sep 24 16:18:49 Odroid vdr[4638]: [4681] [vdrweb] Create Player...
    Sep 24 16:18:49 Odroid vdr[4638]: [4681] [softhddev]SetPlayMode: 0
    Sep 24 16:18:49 Odroid vdr[4638]: [4681] [softhddev]SetVolumeDevice: 125
    Sep 24 16:18:49 Odroid vdr[4638]: [4680] [vdrweb] Error playing ts, result is -1
    Sep 24 16:18:49 Odroid vdr[4638]: [4681] [vdrweb] WebOSDPage::DrawVolume...

    Da bricht dann das PlayPacket ab weil der PlayTS ein -1 zurück bringt. Du scheinst nach den starten des Players zu schnell Daten zu liefern. Wenn ich beim Create Player einen sleep 1 einbaue dann kommt zumindest die -1 nicht mehr, aber laufen tut es auch nicht.

  • 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.

  • 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).

  • 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).

    mal nur eine frage, warum alles in drei Komponenten, wäre es nicht einfacher alles in eins zu machen ?

    Also ein 'plugin'


    Gruß,

    Roland

    https://www.minidvblinux.de/forum/

    1x OctopusNet mit 8x DVB-C
    1x Raspberry 4 MLD 6.0 SATIP (softhddevice-drm )

    1x RockPi 4 MLD 6.0 SATIP (softhddevice-drm )

    1x Raspberry 3 als Client MLD 5.4

    1x Raspberry 2 als Client MLD 6.0

    1x Raspberry 1 (staubt gerade so vor sich hin) ;)
    1x Cubietruck

    1x MCC 100
    1x BananaPi

    1x Zotac CI327 MLD 6.0 SATIP (softhddevice)

  • mal nur eine frage, warum alles in drei Komponenten, wäre es nicht einfacher alles in eins zu machen ?

    Also ein 'plugin'

    Das geht leider überhaupt nicht. 2 Komponenten sind auf jeden Fall notwendig: Browser und Plugin. Der Transcoder könnte vielleicht in das Plugin integriert werden, aber das hat noch niedrige Priorität.

    Der Browser selbst (nutzt das CEF, chromium embedded framework) forkt sich nicht nur, sondern startet sich mit selbst mit verschiedenen Parametern neu um die verschiedenen Zygote-Prozesse (Renderer, Browser, Network, ...) zu erzeugen.

    Der Versuch, den Browser in das Plugin zu integrieren resultierte in einer Katastrophe, weil die Command-Line Parameter des VDR verwendet wurden und damit VDR mehrfach gestartet wurde, aber die Parameter, die das CEF hinzufügt vom VDR verständlicherweise gar nicht akzeptiert wurden.


    Meine grundsätzliche Idee war eine vollständige Entkopplung von VDR/Browser/Transcoder, um die verschiedenen Komponenten auf evt. stärkere Rechner oder Rechner mit Hardware-Encoding ausführen zu können. Ein Transcoder sollte auch in der Lage sein, beliebig viele Clients zu bedienen.


    Mein finales Ziel bei mir ist es, den Browser und den Transcoder auf den Server zu starten und auf dem Client nur den VDR, einfach um ein schnelleres GUI zu haben und die Schwuppdizität zu erhöhen. Zusätzlich soll aber auch die Möglichkeit existieren, alle 3 Komponenten auf dem Client (arm) laufen lassen zu können. Das ist meine 2. Anforderung.

    Genau das mache ich in der Entwicklung: Auf den N2+ nur der VDR und das Plugin und auf dem Entwicklungsrechner den Browser und den Transcoder.

Jetzt mitmachen!

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