Jump to content

Anfänger Fragen - Wie weit komme ich mit der COM ?


strgalt

Recommended Posts

Hallo zusammen,

 

ich blick da leider noch nicht ganz durch was das Entwickeln für den DVBViewer angeht und habe daher ein paar Fragen:

 

1. Wo liegt der Unterschied zwischen einem PlugIn und einem Programm, dass per COM auf den DVBViewer zugreift? Was kann die COM und das PlugIn nicht - oder umgekerht? Mal abgesehen davon, dass man PlugIn's direkt im DVBViewer einstellen kann.

2. Kann ich mit der COM OSDSkins entwickeln? Ein simples Bespiel wäre, dass ich in einem Fenster eine Liste o.ä. befülle und dann auch auf Events reagieren kann - welcher Button im Fenster wurde geklickt, welches Element einer Liste wurde ausgewählt/hat den Fucus/wurde geklickt.

3. Sind die ActionID´s irgend wo dokumentiert?

 

Schon mal Danke für Eure Hilfe

 

Gruß

strgalt

Edited by strgalt
Link to comment
1. Wo liegt der Unterschied zwischen einem PlugIn und einem Programm, dass per COM auf den DVBViewer zugreift? Was kann die COM und das PlugIn nicht - oder umgekerht? Mal abgesehen davon, dass man PlugIn's direkt im DVBViewer einstellen kann.
Die Plugin API bietet auf jeden Fall mehr Möglichkeiten als die COM Schnittelle. Aber wo genau die grenze ist weiß ich nicht.

 

OSD Dialoge kannst du auch über das COM Interface erstellen und die Informationen auswerten. Aber ob du da auch eine Komplett neue Seite einfügen kannst weiß ich nicht.

 

2. Kann ich mit der COM OSDSkins entwickeln? Ein simples Bespiel wäre, dass ich in einem Fenster eine Liste o.ä. befülle und dann auch auf Events reagieren kann - welcher Button im Fenster wurde geklickt, welches Element einer Liste wurde ausgewählt/hat den Fucus/wurde geklickt.

http://www.DVBViewer.tv/forum/topic/18888-myprograms-plugin/

http://www.DVBViewer.tv/forum/topic/18506-myinternet-plugin/

http://www.DVBViewer.tv/forum/topic/12374-verhalten-bei-sofortaufnahme/page__view__findpost__p__93166

 

3. Sind die ActionID´s irgend wo dokumentiert?

http://de.DVBViewer.tv/wiki/Actions.ini

Link to comment

Hallo,

 

@Tjod

Vielen Dank für deine Antwort !

Die Auflistung der ID's war ja schomal Gold wert, vielen Dank.

Zu 2. hast du mir drei Links geschickt, allerdings beziehen die ersten beiden sich auf ein PlugIn, also dll - da habe ich mich evtl. falsch ausgedrückt.

Was ich vor habe ist folgendes:

Da ich kein Delphi Entwickler bin, sondern eher auf C- Sprachen stehe, aktuell bin ich mit c# und PB unterwegs, und zudem, soweit ich das hier im Forum so verfolgen kann, die Entwicklung von "echten" PlugIns nur wenig von den Entwicklern erwünscht/unterstützt wird, möchte ich ein Programm schreiben, dass per COM folgende Aufgaben im Groben hat (ich möchte das auch nicht in c# machen da ich das Prog gern nativ halten möchte):

- Ich erstelle ein Fenster, via OSD- Editor und binde dieses dann in mein Skin ein

In diesem Fenster ist bsp. eine Liste, zwei Buttons und ein Bild

- Öffnet der Benutzer dieses Fenster, möchte ich die List mit Daten befüllen

- Bei Selektion eines Listeneintrags soll sich ein Bild geladen und angezeigt werden werden

- Dann kann der User noch die Buttons betätigen, worauf ich verschiedene Funktionen ausführe

 

Eine Konfigurationsseite unter Optionen vom DVBV benötige ich nicht

 

Ist soetwas per COM möglich? Und wenn ja, wo kann ich ansetzen bezüglich der Events usw...

 

So wie ich das bisher verstehe, muss ich meinem Fenster eine WindowID geben und den Elementen im Fenster auch eine ID geben.

 

Dann sehe ich gerade, dass die Docu "DVBViewer COM Interface" im Member- Bereich von 2006 ist - ömm, gibt es da was aktuelleres oder ist das der einzige Knochen?

 

Gruß

strgalt

Link to comment
Dann sehe ich gerade, dass die Docu "DVBViewer COM Interface" im Member- Bereich von 2006 ist - ömm, gibt es da was aktuelleres oder ist das der einzige Knochen?
Mal abgesehen von Beiträgen hier im Forum und DVBViewer Spy (Mitgliederbereich) ist das die einzige Dokumentation dazu. Aber die Sachen die da drin stehen sollten eigentlich noch alle Funktionieren.

 

Wirklich kenne ich mich damit aber nicht aus. DVBViewer Spy ist auf jeden Fall Nützlich wenn es um die abfragbaren werte geht.

 

Und hier noch ein Beispiel zum COM Interface. Aber eher weniger zum Thema OSD.

http://www.DVBViewer.tv/forum/topic/16276-update-epgupd-script/page__view__findpost__p__192370

 

Vielleicht weiß da noch wer anderes mehr.

Link to comment

Keine Ahnung, ich wüste von keinem der so was schon über das COM Interface gemacht hat.

Und ich habe mich auch noch nicht intensiver mit dm COM Interface auseinander gesetzt.

Link to comment

Hi,

 

was genau willst du denn machen? Die "normale" Pluginschnittstelle ist primär für die Lowlevel Funktionen gedacht, also sowas wie Transportströme/Pakete auslesen, Fernbedienungen einbinden und so weiter.. Die COM Schnittstelle kann quasi alles andere :) Im Prinzip kann man auch beide Schnittstellen in einem Plugin verwenden. Übrigens sämtliche OSD Funktionen (von Wetter, über die Musik und Videoverwaltung, bis hin zu den Spielen) können auch 1:1 extern via COM Interface nachgebildet werden. Technisch betrachtet sind die auch nichts anderes als Plugins im DVBViewer, die über ihre Daten via COM Interfaces holen und schreiben.

 

Christian

Link to comment

1. Wo liegt der Unterschied zwischen einem PlugIn und einem Programm, dass per COM auf den DVBViewer zugreift? Was kann die COM und das PlugIn nicht - oder umgekerht?

Neben den Plugins in Form einer im Adressraum des DVBV ausgeführten DLL und der klassischen COM Architektur bei der der DVBV als Server in einem möglicherweise anderem Adressraum fungiert (separate EXE) gibt es noch eine Mischform. Diese Plugins arbeiten im Adressraum des DVBV (sind also DLL's), kommunizieren mit dem DVBV aber über COM-Mechanismen (QueryInterface etc.). Hier sind DVBV und Plugin wechselseitig Server und Client. Der Ankerpunkt ist hierbei die Callbackfunktion InitPlugin2() zur Herstellung der Verbindung.

 

Die ganze OSD-Skin Geschichte wird über diese 3. Pluginvariante abgewickelt. Könnte also die Antort auf deine 2. Frage sein. Leider ist das Ganze so gut wie gar nicht dokumentiert. Ausser den Delphi-Samples (die Links von Tjod) bleibst du auf Spekulationen angewiesen. Über die Probleme beim Port auf C++ meinerseits und C# seitens LonelyPixel kannnst du hier nachlesen:

 

http://www.DVBViewer.tv/forum/topic/30745-plugin-entwicklung-unerwuenscht/

 

http://www.DVBViewer.tv/forum/topic/40060-c-sample-plugin/

 

 

Bisheriges Ergebnis: Nicht abschließend gelöst.

 

In Bezug auf C++ habe ich zumindest einen Port der Integration eigener Settings in den Optionen-Dialog erreicht. Ich denke ich habs jetzt verstanden. Den OSD-Part anzupassen habe ich aus Zeitgründen bisher nicht geschafft. Ich weis nicht wieviel Aufwand du reinstecken möchtest aber falls du Ambitionen hast: das Grundgerüst könnte ich dir liefern.

 

erwin

Link to comment

- Ich erstelle ein Fenster, via OSD- Editor und binde dieses dann in mein Skin ein

In diesem Fenster ist bsp. eine Liste, zwei Buttons und ein Bild

- Öffnet der Benutzer dieses Fenster, möchte ich die List mit Daten befüllen

- Bei Selektion eines Listeneintrags soll sich ein Bild geladen und angezeigt werden werden

- Dann kann der User noch die Buttons betätigen, worauf ich verschiedene Funktionen ausführe

 

Eine Konfigurationsseite unter Optionen vom DVBV benötige ich nicht

 

Ist soetwas per COM möglich? Und wenn ja, wo kann ich ansetzen bezüglich der Events usw...

 

So wie ich das bisher verstehe, muss ich meinem Fenster eine WindowID geben und den Elementen im Fenster auch eine ID geben.

 

 

Hi,

 

schau mal den Link "Micro Media Info" in meiner sig an. Die "normale" und die Extended Version tun das selbe. Aber "normal" ist ein selbstausfuehrendes VBScript, also alles COM. Waehrend die extended Version ein echter plugin ist. Nur der plugin kann eine eigene OSD Seite laden und darauf reagieren.

 

Wenn du eine OSD Seite mit eigener Funktion willst, dann kommst du imho nicht am plugin vorbei. Du kannst mit COM Variablen setzten (Siehe DVB Spy) aber keine eigenen IDs nutzen oder OSD XML Beschreibungen laden.

 

Ich habe am Anfang auch versucht das vorhandenen Material fuer FreePascal bzw. Lazarus umzusetzten, aber das ist zu aufwendig und man muss sich u.U. mit bugs in FreePscal auseinander setzten. Da habe ich keine Zeit fuer. Die C Versuche waren mehr oder weniger erfolgreich. Ich hab mich nicht damit befasst. Die beste Loesung ist im Moment eine der seltenen Delphi PE Editionen zu ergattern ;) Ich konnte noch eine in einer Buchhandlung finden. Damit gehts an sich recht gut etwas zu entwickeln. Es fehlt halt an Beispielen und/oder mehr Doku. Wenn man aber Zeit investieren kann, dann ist da einiges machbar.

Link to comment

Moin moin,

 

so Leut, danke erstmal für Eure Antworten und Interesse. Ich musste mich in den letzten Tagen den Osterferien meiner Kinder „hingeben“ - Ausflüge und der ganze Kladaratasch :)

 

Also mein Ziel wäre es, Filme, Serien, Musik und mehr TV- Infos besser zu integrieren. Ich weiss, es gibt ja schon MyMovies usw, aber ich möchte das, und bitte nicht falsch verstehen, anders, mehr OSD- orientiert machen – besonders was die Konfiguration der Funktionen angeht. Ich habe Hochachtung vor dem Entwickler von MyMovies, immerhin macht er das, wie ich auch, in seiner Freizeit und verbringt viel Zeit darauf.

 

Prinzipiell habe ich ja schon beschrieben was ich brauche. Ich muss nicht an die Streams oder sonst irgend welcher Hardwarinfos rann (zumindest gehe ich jetzt davon aus). Da ich, soweit wie möglich sämtliche Einstellungen im OSD verfügbar machen möchte, benötige ich auch keine Konfigurationsmöglichkeit über die Optionen des DVBV.

 

Mich würde erst einmal interessieren, in wie weit ich per COM an das OSD herankomme und in wieweit ich Zugriff auf bestimmte, von mir erstellte Fenster habe.

Folgendes Vorgehen könnte ich mir vorstellen:

Ich erstelle per XML ein Fenster mit verschiedenen Elementen – ein paar Buttons, ein Listenelement und ein Image. Dieses Fenster kann dann aus dem OSD- Hauptmenü heraus aufgerufen werden – soweit so gut.

Jetzt muss ich wissen wann der User dieses Fenster öffnet. Ich benötige also ein Event, mit dem ich abfragen kann, welches Fenster geöffnet ist.

Als nächstes muss ich die Liste mit Infos füllen, sagen wir mal mit Titelnamen. Ich brauche also Funktionen wie ClearList() und verschiedene Item- Funktionen.

Events benötige ich auch um abfragen zu können, ob und welcher Buttens geklickt wurde und natürlich auch ob der User in der Liste ein Item gewählt hat, um ein entsprechendes Bild im Image anzuzeigen.

 

So, also wenn ich da mit dem OSD so arbeiten kann wie oben beschrieben wäre das genau das richtige.

 

Warum nun der ganze Aufwand?

Das ist schnell erklärt. Prinzipiell muss man sagen, gibt es leider kein Mediacenter das alles kann. Das MC7 kann zwar eigentlich alles (mit entsprechenden Decodern/Filter), ist aber von der Obefläche her ziemlich langweilig. Zudem ist die Dokumentation ein Graus, zumal man sich hier auf MCML einlassen muss, was die Sache sehr schwer macht.

Das Media Portal ist recht gut und selbst die Dokumentation zur Entwicklung ist akzeptabel. Allerdings find ich den TV- Server recht zickig. Auch die Stabilität des MP ist, zumindest für mich, nicht ausreichend.

Der vielversprechendste Kandidat ist XBMC. Eine nahezu geniale Skinning- Schnittstelle – wenn auch für mich schon fast überladen. Der Player verwurstet fast alles was man ihm vorwirft. ABER ABER – keine TV- Unterstützung. Ich habe eine Menge versucht. Per VLC/Recordingservice streamen was auch tadellos funktioniert. Da kommen aber auch schon zwei weitere Abers: Zum Einen ist die PlugIn- Schnittstelle grotten schlecht, wenn überhaupt dokumentiert und zum Anderen die Schlange Python – das ist ja so gar nicht mein Fall – aber wäre die Doku entsprechend... Aufgegeben habe ich dann, als klar wurde, dass Aufnahmen, wenn gleich ein entsprechender Button im Skinning zur Verfügung steht nicht möglich sind – zwar gibt es sowohl im deutschen, als auch im englischen Forum einen Dev- Bereich – diese Bereiche können jedoch getrost in der Pfeife geraucht werden. Jetzt läuft der DVBV per von mir angepassten „Launcher“ - das Rumgestwitche zwischen den den Progs gefällt mir jetzt aber nicht mehr.

Es bleibt also der DVBV. Der hat zumindest eine COM- Schnittstelle – wenn auch veraltert aber immerhin. Das Skinning ist zwar nicht so, im wahrsten Sinne des Wortes „effektiv“, aber das finde ich nicht schlimm. Im TV- Bereich ist er einsame Spitze und den Rest, also eine OSD orientierte Integration von Film, Serien und Musik lässt sich, wie man am Beispiel von MyMovies sehen kann bewerkstelligen. Zudem ist er im Vergleich zu den oben aufgeführten Programmen schlank und kann bei Entsprechenden Modifikationen entsprechender Decoder und Filter auch alles abspielen. Wie ja schon öfter hier im Forum erwähnt wurde finde ich es sehr sehr schade, dass den Entwicklern von Erweiterungen nicht seitens der Entwickler vom DVBV unter die Arme gegriffen wird. Wenn man schon eine COM- Schnittstelle zur Verfügung stellt, sollte man diese doch auch weiter entwickeln – der Wille, dass sich dritte um tolle neue Erweiterungen kümmern war ja scheinbar da, sonst gäbe es die Schnittstelle ja nicht. Leider passen das XBMC und der DVBV vom Marketing so gar nicht zusammen – XBMC open und free und der DVBV ist das Gegenteil. Dennoch – ein Paukenschlag würden diese beiden Projekte auf welchem Wege auch immer zusammen finden. Der Marktanteil wäre gigantisch...

 

@mague

Das hört sich aber nicht gut an. Ich kenne mich mit Delphi über haupt nicht aus und wenn ich mir da die Preise ansehe was da für XE abgegriffen wird :( Wo hagts denn genau?

 

Interessant wäre, ob man nicht etwas wie einen Wrapper hinbekommen könnte - genau für solche Zwecke speziell für OSD- Entwicklung...

 

Gruß

Link to comment

@mague

Das hört sich aber nicht gut an. Ich kenne mich mit Delphi über haupt nicht aus und wenn ich mir da die Preise ansehe was da für XE abgegriffen wird :( Wo hagts denn genau?

 

Interessant wäre, ob man nicht etwas wie einen Wrapper hinbekommen könnte - genau für solche Zwecke speziell für OSD- Entwicklung...

Der von mague beschrittenen Weg - nämlich Delphi zu benutzen ist momentan der mit dem geringstem Aufwand.

 

Wo liegt aber das Problem z.B. C++ zu benutzen. Wie oben schon beschrieben wird zur Kommunikation zwischen DVBV und dem Plugin COM benutzt, d.h sowohl der DVBV, der in Delphi erstellt wurde, als auch das Plugin, welches hier z.B. C++ benutzt gehen davon aus, das im Hauptspeicher Datenstrukturen in einer wohldefinierten Form an den übergegeben Adressen vorgefunden werden. Konkret fordert der Delphi-DVBV über den Aufruf der vom Plugin zu liefernden Callbackfunktion InitPlugin2() eine solche Adresse an. An dieser muss also das C++-Plugin genau ein solches Speicherlayout erzeugen wie es sein würde als hätte man dieses Interface mit Delphi erzeugt. Die sogenanten vtables. Glücklicherweise erzeugen sowohl der Delphi-Compiler als auch der C++-Compiler (zumindest der von Microsft) bei Verwendung von Klassen mit virtuellen Funktionen kompatible Speicherstrukturen, so dass das Ansprechen der normalen DVBV-COM-Funktionalität über C++ kein allzu großes Problem darstellt. Die Betonung liegt auf "Glücklicherweise", denn dies ist durch keinerlei Normung erzwungen. Die Speicherlayouts liegen normalerweise im Ermessen des Compilerentwicklers. Die OSD-COM Geschichte ist nun um einiges komplizierter: Wie die Speicherlayouts auszusehen haben erfährt man folgenderweise: Man nehmme die verlinkten Delphi-Samples. Aus den dort syntaktisch deklarierten (COM-)Klassen muss man auf das Speicherlayout schließen, etwa indem man Literatur über Interna des Delphi-Compilers zu Rate zieht. Dann hofft man dass dieses Layout sich bei der von den DVBV-Entwicklern eingesetzten Compilerversion bei einem Compilerwechsel nicht ändert. (Sonst läuft das C++-Plugin beim nächsten DVBV-Release nicht mehr). Als nächstes muss das Plugin genau dieses Speicherlayout mit C++-Mitteln erzeugen. Was bei geradliniger Vererbung (normale COM-Schnittstelle) "glücklicherweise" gelingt, wird hier dadurch erschwert, dass aus C++ Sicht Mehrfachvererbung vorliegt. Die Delphi-Samples haben Klassen die geerbt haben und gleichzeitig ein Interface implementieren. Das ist in C++ Mehrfachvererbung. Wie also ist das Layout bei Mehrfachvererbung. Du siehst ...

Link to comment

naja, dir COM währe ja auch kein Problem, da komme ich ja mit PB oder C# oder sonst was ran. So wie ich mague verstehe, kann man damit aber keine Aktionen abfange, auf die ich reagieren kann. Und das währe notwendig - klickt der User auf einen Button möchte ich das wissen und eine bestimmte Routine in meinem PlugIn ausführen. Oder habe ich etwas missverständlich geschrieben. Ich will mit dem PlugIn nicht etwa ein Window erstellen sondern mit einem bereits von mir erstellten Window (XML) das im Skin- Vereichnis liegt interagieren - also Items in Listen einfügen und auf Buttons reagieren. Wenn ich hier die COM- Help durchfliege finde ich da aber nichts wie man auf die Steuerelemente eines Fensters zugriff erlangt.

Da die COM mit PB machbar ist, jedoch ein größerer Auffand ist, müsste ich das erstmal mit c# druchgehen, in wie weit die COM brauchbar für meine Zwecke ist und das dann in PB umsetzen. Aber wie gesagt, ich finde keinen Anhaltpunkt wie ich da anfangen kann.

 

Gruß

Link to comment

naja, dir COM währe ja auch kein Problem, da komme ich ja mit PB oder C# oder sonst was ran.

Das ist nicht der Punkt. Der Punkt ist, das die verwendeten COM-Objekte nicht im System registriert sind und auch keine Typlibrary existiert. Alles was Frameworks wie unter C# dir zur Unterstützung bieten wie z.B die automatische Generierung von COM-Interop-Assemblies aúf Knopfdruck fällt weg. Musst du händisch selber machen. Und dann must du wissen was du machen must und bist dann bei Obigen, egal ob C++, C# oder andere.

 

 

Aber wie gesagt, ich finde keinen Anhaltpunkt wie ich da anfangen kann.

Der Anhaltspunkt sind die von Tjod verlinkten Delphi-Samples. Versuche sie zu verstehen. Dafür gibt es keine "COM-Help". Baue die dort benötigten COM-Objekte mit C++, C# oder was auch immer. Wenn du die hast wirst du vom DVBV mittels InputPlugin2 nach der Adresse des Ausgangsobjektes gefragt.

 

erwin

Link to comment

na das war doch schon mal ei Hinweis, dass die nicht registriet sind. Per PB hatte ich ja schon das DVBViewerServer- Object - also ich konnte schon auf die Methoden und Eigenschaften zugreifen.

Bei anderen Interfaces klappte das nicht.

 

Gruß

Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...