[Prototyp] RPI Ausgabeplugin

  • Ich nutze ffmpeg 2.0.2 unter Arch Linux ARM. Die Soundprobleme habe ich auf allen Kanälen (Empfang über Kabel D) - wenn es dir hilft, kann ich dir gerne eine Aufnahme zukommen lassen.

    Also, ffmpeg funktioniert bei mir auch... Allerdings habe ich gesehen, dass das SoftHdDevice-Plugin die Audioerkennung über die ganze Payload macht, ich teste nur den Beginn. Eigentlich würde ich hier ein Problem erwarten, wenn bei einem privaten Stream die Header nicht am Anfang der Payload liegen - aber scheinbar funktioniert ja die Erkennung. Bliebt nur noch die Möglichkeit, dass die nicht decodierte Restdaten, die beim RpiHdDevice momentan verworfen werden, die Störungen verursachen.


    Um das zu testen wäre ich also froh um eine kurze Aufnahme und würde gerne auf Dein Angebot zurückkommen!


    Gruss
    Thomas

  • Nein, ich versuche es mit 1.7.28. Aber ich sehe schon, dass das meine Fähigkeiten übersteigt. Ich warte dann bis zum deb-Paket.

  • Hallo rollercontainer,


    Fuer 1.7.28 habe ich die so Datei und ein angepasstes Makefile die kann ich dir heute abend hier hochladen.


    Leider aber nur rpihddevice 0.0.3.


    Die 0.0.4 kann ich nicht bauen da ich den weiter oben beschriebenen Fehler bekomme.


    Gruss,


    Franz

  • OK, mit vdr-2.0.3 und streamdev aus dem git habe ich es übersetzen können.


    Was noch fehlte für ein Plugin war libncurses5-dev.

  • Warum aktualisiert ihr nicht erstmal den VDR?


    In einigen Bereichen ist die aktuelle vdr Version ressourcenschonender, was gerade für schwache ARM Hardware gut ist.


    Daumen hoch für das Plugin :tup


    Munter bleiben, Rossi

  • hi reufer,


    nun auch von mir herzlichen dank für deine mühen!


    claus hat mich nun doch genötigt mit beim pi rumzuspielen und ich muss sagen ich bin begeistert.


    wegen den tonproblemen -> stottern. Mir ist gerade aufgefallen, das bei einer film -> werbung umschaltung es zu diesem stottern kam.


    vllt hilft das ja weiter


    (sorry, aber bis mir das problem klar wurde hatte ich schon nen reboot durchgeführt und somit keine logs -> vllt beim nächsten mal :( )


    greetz MarMic

    SZVDR HD: Intel e5300@1,2ghz - Gigabyte GA-EP41-UD3L - 2GB ddr2 800 - Gainward G210 512mb - Silverstone LC16MR - Tevii s480 - Astra 19,2 - MLDHD-5.4 testing


    WZVDR HD: Intel g1610@1,6ghz - Intel DH61BE - Scythe Big Shuriken 2 - 4GB ddr3 1333 - Asus GT610 1024mb - Chieftec Hi-Fi HM-02 - Tevii s480 - Astra 19,2 - MLDHD-5.4 testing

  • Hi MarMic


    Danke für den Hinweis! Hier gibt's wahrscheinlich wirklich noch ein Problem, wenn plötzlich die Anzahl der Kanäle wechselt. Die Codec-Rekonfiguration wird momentan nur von einem Stream-Id-Wechsel, einer Konfigurationsänderung oder einem Decoderfehler getriggert - kann gut sein, dass der Wechsel von 2.0 zu 5.1 gar nicht bemerkt wird.


    Zu den andern Tonstörungen wurde ich von seahawk1986 auf einen Thread zum SoftHdDevice aufmerksam gemacht, der das Problem erklärt: Die Rpi-Hardware unterstützt nur signed int als Ausgabeformat, während >ffmpeg-1.1 (?) scheinbar signed int planar zurück gibt. Ich bin mir noch nicht ganz im Klaren, wie ich hier weiter vorgehen soll, aber ich sehe gerade noch unzählige andere, wichtigere Baustellen, statt mich mit unstable-ffmpeg-Versionen zu beschäftigen. Ich nutze aktuell ffmpeg-1.0.7 unter Gentoo - falls es Gründe gibt, auf eine andere Version zu wechseln, lasse ich mich gerne belehren.


    Gruss
    Thomas

  • Hallo,
    bzgl. ffmpeg versus libav.
    Ich verwenden nur libav, da diese von vielen Distributionen als Standard verwendet wird.
    Da sich die beiden branches auch in der API auseinander entwickeln, würde ich empfehlen nur eines von beiden zu verwenden.
    Zu den anderen Fragen:

    Zitat

    Ich glaube nun begriffen zu haben, wie die Codec-Erkennung im SoftHdDevice funktioniert. Aber egal welcher Codec gefunden wird, decodiert wird immer ab Anfang der Payload vom PES-Paket - genau gleich wie bei meiner Implementation.


    Es kann sein, dass sich der VDR bei seinen devices anders verhält, ich habe mir auch weder den Code bei softhddevices noch deinen Code angesehen.
    Ich denke das sicher ist bei einem PES paket zu starten, bei dem das sync flag gesetzt ist. Es ist möglich das VDR diese Pakete zu einem Paket zusammenfasst, was bei vomp nicht gegeben ist. Daher würde ich nur die Möglichkeit das es zerstückelt sein kann im Hinterkopf behalten, falls es Probleme gibt.
    Wobei bei deutschsprachigen Sender, meist keine zerstückelung vorliegt, ich habe das jedenfalls erst durch meine internationalen User herausgefunden und mich gewundert warum es nicht funktioniert.


    Zitat

    "Aber auch libav speichert teilweise Daten zwischen
    Zusammen mit dem Flag CODEC_FLAG_TRUNCATED und dem Zwischenspeichern der Restdaten sollte das doch eigentlich immer funktionieren... oder?"


    Ich hatte das am ANfang auch so, kann mich aber erinnern warum ich es ändern mußte. Es kann sein, dass es Codec abhängig ist oder vom vomp Design abhing.


    Zitat

    Inzwischen habe ich auch herausgefunden, dass der VDR die Stream-Id mitgibt - aber diese sagt mir lediglich, ob es sich um MPEG-Audio oder "was anderes", also einen privaten Stream handelt.


    Hilft da nicht die SetPid Funktion? Ich vermute, das der type, der übergeben wird der type aus der PAT PMT für recording ist.
    Schau mal in cDvbHdFfDevice::SetPid(cPidHandle *Handle, int Type, bool On) vom vdr, da ist ein Beispiel wie man an die tds kommt.
    Damit kann man wenigstens zwischen 0x0F:AAC ADTS packaging, 0x11: // AAC LATM packaging , 3: case 4: mpeg audio unterscheiden.
    Bzw. im Fall eines private Streams 5 oder 6 etwas anderes auswerten( ich weis nicht ob vdr hier was erkennt, aber möglich wäre, z.B. 0x7A: // Enhanced Ac3 Desriptor 0x6A: Ac3 descriptor, wenn es die PAT PMT ids sind).



    Marten

    vdr experimental, Femon, vdr live, acpi-wakeup, vompserver, undelete, epgsearch, vdr-burn, Raspberry Pi und Vompserver Windows Client (build from git)

  • Ich habe es gerade gegen ffmpeg-compat (1.0.8) gelinkt gebaut, damit klappt es bei mir auch mit dem Ton:

    Code
    libavcodec.so.53 => /usr/lib/ffmpeg-compat/libavcodec.so.53 (0xb620b000)
            libavformat.so.53 => /usr/lib/ffmpeg-compat/libavformat.so.53 (0xb6109000)
            libavutil.so.51 => /usr/lib/ffmpeg-compat/libavutil.so.51 (0xb5e3e000)

    Es liegt also an ffmpeg > 1.1.

    Ich bin mir noch nicht ganz im Klaren, wie ich hier weiter vorgehen soll, aber ich sehe gerade noch unzählige andere, wichtigere Baustellen, statt mich mit unstable-ffmpeg-Versionen zu beschäftigen.


    Hauptsache es funktioniert ;)
    Das ffmpeg-Projekt stuft die 2.0 ja als Major Release ein und rät selbstbewusst:

    We recommend users, distributors and system integrators to upgrade unless they use current git master.

    Gentoo ist da also recht konservativ mit den "stable"-Empfehlungen.

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Hi Marten

    bzgl. ffmpeg versus libav.
    Ich verwenden nur libav, da diese von vielen Distributionen als Standard verwendet wird.
    Da sich die beiden branches auch in der API auseinander entwickeln, würde ich empfehlen nur eines von beiden zu verwenden.

    Ok, dann werde ich wohl auch versuchen, auf einen solchen Standard zu setzen. Jedenfalls habe ich keine Lust, mein Plugin mit zahlreichen ifdefs und Workarounds zu unterschiedlichen ffmpeg-Versionen zu "verunstalten". Ist das mein subjektiver Eindruck, oder ist hier die libav im Bezug auf das API wirklich stabiler?


    Hilft da nicht die SetPid Funktion? Ich vermute, das der type, der übergeben wird der type aus der PAT PMT für recording ist.
    Schau mal in cDvbHdFfDevice::SetPid(cPidHandle *Handle, int Type, bool On) vom vdr, da ist ein Beispiel wie man an die tds kommt.
    Damit kann man wenigstens zwischen 0x0F:AAC ADTS packaging, 0x11: // AAC LATM packaging , 3: case 4: mpeg audio unterscheiden.
    Bzw. im Fall eines private Streams 5 oder 6 etwas anderes auswerten( ich weis nicht ob vdr hier was erkennt, aber möglich wäre, z.B. 0x7A: // Enhanced Ac3 Desriptor 0x6A: Ac3 descriptor, wenn es die PAT PMT ids sind).

    Danke für den Hinweis - das wäre natürlich Klasse, wenn das so einfach funktioniert! (Ich war bislang nur VDR-Anwender, die Eingeweide des VDR sind mir neu). Mal eine ganz naive Frage: Wenn die Formaterkennung so einfach ist und der VDR einem das so schön auf dem Silbertablett serviert, warum treibt denn das SoftHdDevice (und auch xineliboutput) einen solchen Aufwand?


    Gruss
    Thomas

  • Zitat

    Mal eine ganz naive Frage: Wenn die Formaterkennung so einfach ist und der VDR einem das so schön auf dem Silbertablett serviert, warum treibt denn das SoftHdDevice (und auch xineliboutput) einen solchen Aufwand?


    Ich glaube, weil das vor vdr version 1.7. ?? nicht anders ging, als der vdr noch komplett pes basiert war und die beiden PlugIns sind schon ein wenig älter.


    Marten

    vdr experimental, Femon, vdr live, acpi-wakeup, vompserver, undelete, epgsearch, vdr-burn, Raspberry Pi und Vompserver Windows Client (build from git)

  • Hi Marten

    Ich glaube, weil das vor vdr version 1.7. ?? nicht anders ging, als der vdr noch komplett pes basiert war und die beiden PlugIns sind schon ein wenig älter.

    Hmm... ich habe mir den Device-Abschnitt der VDR-Dokumentation nochmals angeschaut. So wie das hier steht und ich es verstehe, sagt hier der VDR, welche PIDs ein Device aufnehmen soll. Wenn ich aber die Stelle im DvbHdDevice anschaue, dann interpretiere ich das so, dass hier der Hardware das Ausgabeformat mitgeteilt wird.


    Ich bin etwas verwirrt...


    Gruss
    Thomas

  • Ich glaube da kann man nur kls fragen...
    Kann sein, dass es so nur funktioniert, wenn es auch aufnehmen kann, aber eigentlich ist wirklich unsinnig dem Ausgabeplugin, das Format vorzuenthalten.


    Marten

    vdr experimental, Femon, vdr live, acpi-wakeup, vompserver, undelete, epgsearch, vdr-burn, Raspberry Pi und Vompserver Windows Client (build from git)

  • Ich glaube da kann man nur kls fragen...
    Kann sein, dass es so nur funktioniert, wenn es auch aufnehmen kann, aber eigentlich ist wirklich unsinnig dem Ausgabeplugin, das Format vorzuenthalten.


    Marten

    Also, Klaus war so nett und hat mich prompt aufgeklärt: Der Weg, wie es SoftHdDevice & Co machen sei der richtige, das Ausgabeplugin muss selber schauen, was es mit den Daten anstellt. SetPid() teilt, wie es auch in der Doku steht, dem Device mit, welcher PIDs es empfangen soll.


    Auch beim DvbHdDecive wird in PlayAudio die Payload geparst und entsprechend das Audioformat gesetzt. Allerdings scheint mir diese Implementation, im Gegensatz zum SoftHdDevice, nicht vollständig. (Wobei die HD-FF vermutlich gar nicht mehr Formate unterstützt).


    Ich werde mich nun also daran setzen und die Implementation vom SoftHdDevice übernehmen - allerdings vorerst ohne das ffmpeg-Gemurkse. :S


    Gruss
    Thomas

  • Ich war mal so faul und dreist und habe mal das vdr wiki aktualisiert ;)


    Unter anderem auch die Seite
    http://www.vdr-wiki.de/wiki/in…es_und_Komponentenbundles


    um ein paar ARM-Boxen aktualisiert



    finde nur den Titel "Barebones und Komponentenbundles" ein bisschen nichts sagend


    "Hardware - Empfohlene Hardware, Komponentenbundles, ARM-Boxen"


    wäre vielleicht Aussagekräftiger.

  • Hallo,
    bzgl. ffmpeg versus libav.
    Ich verwenden nur libav, da diese von vielen Distributionen als Standard verwendet wird.


    Das würde ich so nicht unterstreichen. Es wird von Debian-Basierten verwendet. Und das liegt im Wesentlichen daran, dass Debian ein echter "Fork-Magnet" ist. Wo auch immer zu irgendeinem Projekt ein Fork entsteht ist Debian meist schnell mit dabei und stellt auf den Fork um.


    War es nicht so, dass johns in seinem softhddevice zwischenzeitlich den libav-Support sogar einstellen wollte (oder gar hat?) weil es mit der libav mehr Probleme gab als mit ffmpeg?


    Ohne FFMPEG-Support ist Archlinux auf jedem Fall außen vor.

  • Ohne FFMPEG-Support ist Archlinux auf jedem Fall außen vor.


    So schlimm ist es aktuell nicht - ffmpeg-compat ist teil der Arch Linux ARM Pakete:
    http://archlinuxarm.org/packages?arch=&search=ffmpeg-compat

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

Jetzt mitmachen!

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