Request for comments: Plugin-Interface für DLNA-Plugin

  • Eine dumme Frage warum sind in der Resource "duration, resolution, bitrate, ..."?
    Sind das keine Properties? Oder nur vergessen zulöschen?


    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

  • Eine dumme Frage warum sind in der Resource "duration, resolution, bitrate, ..."?
    Sind das keine Properties? Oder nur vergessen zulöschen?


    Johns


    Ne teilweise Antwort: Wenn ich die Kommentare im Source richtig verstanden habe sollen pro Metadaten-Satz mehrere Resourcen möglich sein -- und diese Properties gibt es eben PRO Resource. Allerdings hab ich nicht so ganz verstanden, warum ;)

    Asrock A75 Pro4-M
    Debian wheezy (testing, stock) (aktuell 2012-08-24: Linux 3.2, VDR 1.7.28)
    vdr-sxfe (xineliboutput)
    Pioneer VSX-520-K

  • Ne teilweise Antwort: Wenn ich die Kommentare im Source richtig verstanden habe sollen pro Metadaten-Satz mehrere Resourcen möglich sein -- und diese Properties gibt es eben PRO Resource. Allerdings hab ich nicht so ganz verstanden, warum ;)


    Exakt! Der Grund ist auch einfach (evtl. hatte ich ihn hier schon erklärt): bestes Beispiel Live-TV, dort gibt es SD- und HD-Kanäle, die rein von den Metadaten keinen Unterschied enthalten, da der Inhalt identisch ist. Nur die Aufmachung ist anders. Es wäre jetzt also denkbar - das muss sich erst zeigen, weil ich das Verhalten der DMPs nicht genau kenne - dass man z.B. ZDF und ZDF HD zusammenlegt und nur einen Metadateneintrag pflegt. Der Player könnte nun, eine gewisse Intelligenz vorausgesetzt, immer den höherwertigen Stream abrufen, sofern er verfügbar ist und der DMP das Profil unterstützt.


    Es gibt aber auch andere Anwendungsfälle: wenn man transkodieren muss, z.B. für's Handy, kann man eine neue Resource anbieten, die dann gewisse Restriktionen hat (häufig kann man dann nicht spulen)


    Ich hatte mir schon überlegt, ob es nicht sinnvoll wäre, die Resource identisch zur Metadata-Klasse aufzubauen und auch über Set-/GetProperty die Werte setzen zu lassen. Außer resourceUri und protocolInfo sind alle optional.


    Medion Digitainer; AsRock B75 Pro3-M, Celeron G540; Kingston Value 4GB
    Samsung SpinPoint 250GB 2,5"; Samsung WriteMaster DVD-Brenner;
    TT-S2-6400, 2x TT-S2-1600, Ubuntu 12.04 mit YaVDR-Paketen. VDR 1.7.27, UPnP/DLNA-Plugin

  • Testweises Browsen funktioniert, jedoch hab ich noch ein Problem mit der Update-ID: die UpdateID eines Containers muss sich immer exakt dann ändern, wenn eine Datei angelegt, modifiziert oder gelöscht wurde. Da man aber schlecht für jeden Conainer einen Counter pflegen kann, würde ich jetzt vorschlagen, einfach einen Zeitstempel zu verwenden. Jetzt haben aber die verschiedenen Systeme eine unterschiedliche Granularität der System-Uhr.


    Die ContaierUpdateID wird alle 2 Sekunden via Broadcast an alle Geräte rausposaunt, damit die ihre Medienliste aktualisieren können. Rein nach Nyquist müsste ja eine Granularität von 1s vollkommen ausreichen. Daher meine Frage: ist eine Update-ID anhand des Unix-Timestamps sinnvoll oder gibt es gewisse Caveats, die mir gerade entfallen? Vorteil eines Timestamps: er lässt sich relativ leicht und schnell generieren und er muss bei Dateisystemen nicht gesondert gespeichert werden, da der Timestamp im Modified-Date eines Verzeichnisses hinterlegt ist. Einzig, wenn eine Datei selbst inhaltlich verändert wird, ändert sich nicht das mDate eines Ordners, hat hier jemand eine Idee, wie man das abfangen kann?


    Medion Digitainer; AsRock B75 Pro3-M, Celeron G540; Kingston Value 4GB
    Samsung SpinPoint 250GB 2,5"; Samsung WriteMaster DVD-Brenner;
    TT-S2-6400, 2x TT-S2-1600, Ubuntu 12.04 mit YaVDR-Paketen. VDR 1.7.27, UPnP/DLNA-Plugin

  • Ja, ich habe einen inotify-Listener. Aber ich muss trotzdem containerUpdateIDs pflegen, damit die Player ihre Listen aktualisieren.


    Inotify nutzt nur während des Betriebs etwas und es liefert auch keine brauchbare ID, also muss ich mir irgendwas überlegen.


    Medion Digitainer; AsRock B75 Pro3-M, Celeron G540; Kingston Value 4GB
    Samsung SpinPoint 250GB 2,5"; Samsung WriteMaster DVD-Brenner;
    TT-S2-6400, 2x TT-S2-1600, Ubuntu 12.04 mit YaVDR-Paketen. VDR 1.7.27, UPnP/DLNA-Plugin

  • Naja beim Start kann man ja einmal scannen, ob sich seit dem letzten Betrieb was geändert hat (das sollte mittels Timestamp zuverlässig funktionieren denke ich). Und die IDs -- was für ein Format sollen die denn sein? Wenn es "passt" würd ich da einfach GUIDs/UUIDs nehmen.

    Asrock A75 Pro4-M
    Debian wheezy (testing, stock) (aktuell 2012-08-24: Linux 3.2, VDR 1.7.28)
    vdr-sxfe (xineliboutput)
    Pioneer VSX-520-K

  • Bis zum Jahr 2038 kannst du für einen timestamp auch ein (u)int32 verwenden - aber Anfang Januar '38 wäre ein Patch dann nicht schlecht ;)

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Dann nimm doch die "untersten 32 bit"? Kollision praktisch ausgeschlossen, da müssten gute 68 Jahre vergehen zwischen den Änderungen ...

    Asrock A75 Pro4-M
    Debian wheezy (testing, stock) (aktuell 2012-08-24: Linux 3.2, VDR 1.7.28)
    vdr-sxfe (xineliboutput)
    Pioneer VSX-520-K

  • Ich sehe es als nicht sowichtig an, wenn sich eine einzelne Datei auf dem Server ändert
    und der Client dies nicht mitbekommt.


    Was kann denn im schlimmsten Fall passieren?


    Die angezeigten Metadaten stimmen nicht.


    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

  • Darüber schweigt der Standard. Den faktisch ist es so, dass ContainerUpdateIDs optional sind. Also ggf. muss ich die SystemUpdateID hochzählen und die ContainerID bleibt gleich. Das ist dann notwendig, wenn sich nur die Metadaten (Titel, Beschreibung usw.) ändert und NICHT über ide Provider mitgeteilt werden kann.


    Medion Digitainer; AsRock B75 Pro3-M, Celeron G540; Kingston Value 4GB
    Samsung SpinPoint 250GB 2,5"; Samsung WriteMaster DVD-Brenner;
    TT-S2-6400, 2x TT-S2-1600, Ubuntu 12.04 mit YaVDR-Paketen. VDR 1.7.27, UPnP/DLNA-Plugin

  • Tachchen,


    ich habe den Plugin-Loader jetzt weitgehend fertig geschrieben, kann ihn aber nicht testen, da ich mit dlopen, dlsym usw. noch nie etwas gemacht habe. Ich habe mir ein Makefile aus dem Plugin-Makefile zusammenkopiert, hapere jetzt aber an den Includes, den Verlinkungen usw.


    Kennt sich jemand damit aus und könnte mir hier weiterhelfen? Ich würde gerne das Plugininterface so schnell wie möglich abschließen, damit ich die Provider und Profiler dann endlich schreiben kann. Die notwendigen Vorbereitungen sind getroffen, aber beim Zusammenstecken müsste jemand helfen. Es ist alles im Git eingepflegt, so dass dort mitgearbeitet werden könnte.


    Hat jemand Lust?


    Medion Digitainer; AsRock B75 Pro3-M, Celeron G540; Kingston Value 4GB
    Samsung SpinPoint 250GB 2,5"; Samsung WriteMaster DVD-Brenner;
    TT-S2-6400, 2x TT-S2-1600, Ubuntu 12.04 mit YaVDR-Paketen. VDR 1.7.27, UPnP/DLNA-Plugin

  • ich habe den Plugin-Loader jetzt weitgehend fertig geschrieben, kann ihn aber nicht testen, da ich mit dlopen, dlsym usw. noch nie etwas gemacht habe.


    Bei

    Code
    man dlopen

    ganz runterscrollen, da gibt es ein Beispiel. Die Manpage ist auch sonst ganz informativ.


    Gerald


    HP Proliant MicroServer Gen8, Xeon E3-1230, 12 GB RAM, 3xWD red 2TB im RAID 5, 2xSundtek MediaTV Home DVB-C/T, L4M TWIN-C/T, Ubuntu Server 14.04.1, Plex Media Server
    Samsung UE55H6470

  • Danke, scheint zu klappen, was ich da fabriziert habe. Der C++-Code ist also erstmal verwertbar. Was noch gar nicht geht, ist das Makefile. Ich hab hier viel mit Verrenkungen die Bibliothek so lange zurecht gebogen, bis sie geladen wird. Viele Sachen aus dem Plugin-Makefile und dem Hauptmakefile des UPnP-Plugins sind dadurch doppelt, was nicht so toll ist. Was davon kann alles ausgelagert werden?


    Plugin-Makefile: http://projects.vdr-developer.…ider/vdrProvider/Makefile
    Haupt-Makefile: http://projects.vdr-developer.…ons/master/entry/Makefile


    Medion Digitainer; AsRock B75 Pro3-M, Celeron G540; Kingston Value 4GB
    Samsung SpinPoint 250GB 2,5"; Samsung WriteMaster DVD-Brenner;
    TT-S2-6400, 2x TT-S2-1600, Ubuntu 12.04 mit YaVDR-Paketen. VDR 1.7.27, UPnP/DLNA-Plugin

  • Ich komme wieder nicht weiter: Das Laden eines Plugins klappt. Auch die Symbole zum Erzeugen der Klassen funktionieren. Jetzt habe ich die in der Plugin-Schnittstelle vorgegebe Klasse erweitert. Sobald ich nun die Lib lade erhalte ich nicht definierte Symbole, die sich alle auf SYmbole im UPnP-Plugin beziehen. Ich habe als Linker-Option "-rdynamic" hinzugefügt, aber der Fehler tritt weiterhin auf: "/usr/lib/vdr/plugins/upnp/libupnp-vdr-provider.so.1.0.0: undefined symbol: _ZNK4upnp21cUPnPResourceProvider8SeekableEv"


    Mit c++filt übersetzt: upnp::cUPnPResourceProvider::Seekable() const


    Die Funktion ist in der pluginManager.cpp auf jeden Fall definiert. Warum kann er die dann nicht finden? Muss ich noch mehr angeben als bloß "-rdynamic"? Google schlägt mir noch "-Wl,--export-dynamic" vor. Was ist der Unterschied?


    Medion Digitainer; AsRock B75 Pro3-M, Celeron G540; Kingston Value 4GB
    Samsung SpinPoint 250GB 2,5"; Samsung WriteMaster DVD-Brenner;
    TT-S2-6400, 2x TT-S2-1600, Ubuntu 12.04 mit YaVDR-Paketen. VDR 1.7.27, UPnP/DLNA-Plugin

  • Ich komme wieder nicht weiter: Das Laden eines Plugins klappt. Auch die Symbole zum Erzeugen der Klassen funktionieren. Jetzt habe ich die in der Plugin-Schnittstelle vorgegebe Klasse erweitert. Sobald ich nun die Lib lade erhalte ich nicht definierte Symbole, die sich alle auf SYmbole im UPnP-Plugin beziehen. Ich habe als Linker-Option "-rdynamic" hinzugefügt, aber der Fehler tritt weiterhin auf: "/usr/lib/vdr/plugins/upnp/libupnp-vdr-provider.so.1.0.0: undefined symbol: _ZNK4upnp21cUPnPResourceProvider8SeekableEv"


    Mit c++filt übersetzt: upnp::cUPnPResourceProvider::Seekable() const


    Die Funktion ist in der pluginManager.cpp auf jeden Fall definiert. Warum kann er die dann nicht finden? Muss ich noch mehr angeben als bloß "-rdynamic"? Google schlägt mir noch "-Wl,--export-dynamic" vor. Was ist der Unterschied?


    Ich gehe nicht davon aus, dass das ein Linker-Problem ist. Das ist eher ein Compiler-Problem mit Name-Mangeling, hast du da irgendwo extern "C" {...} in Benutzung?


    Gerald


    HP Proliant MicroServer Gen8, Xeon E3-1230, 12 GB RAM, 3xWD red 2TB im RAID 5, 2xSundtek MediaTV Home DVB-C/T, L4M TWIN-C/T, Ubuntu Server 14.04.1, Plex Media Server
    Samsung UE55H6470

  • "Eigentlich" nicht, da die einzigen C-artigen Funktionen in der tools.h stehen.


    edit: verdammt. Jetzt sehe ich das erst:

    Code
    #define UPNP_REGISTER_RESOURCE_PROVIDER(cls) extern "C" void *UPnPCreateResourceProvider(void) { return new cls; }


    Muss das extern "C" dort weg, oder wie bekomme ich das gelöst?


    Medion Digitainer; AsRock B75 Pro3-M, Celeron G540; Kingston Value 4GB
    Samsung SpinPoint 250GB 2,5"; Samsung WriteMaster DVD-Brenner;
    TT-S2-6400, 2x TT-S2-1600, Ubuntu 12.04 mit YaVDR-Paketen. VDR 1.7.27, UPnP/DLNA-Plugin

Jetzt mitmachen!

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