Entwickler-Ecke

Sonstiges (.NET) - VLC-Player - AXVLC.dll einbinden, ohne Registrierung


Palladin007 - So 24.02.13 07:31
Titel: VLC-Player - AXVLC.dll einbinden, ohne Registrierung
Moin,

ich möchte die AXVLC.dll, die der VLC-Player zur Verfügung stellt, verwenden, möchte sie dabei aber nicht registrieren müssen.

Das alleinige Registrieren der dll hat scheinbar auch nicht gereicht, solange ich nicht den VLC-Player an sich installiere, zumindest kann ich die AXVLC.dll dann nicht mehr verwenden, da sie keine gültige COM-Komponente ist.

Das installieren des Players würde ich aber gerne vermeiden und am besten auch das registrieren der dll, da ich möchte, dass das Programm ohne Installation gleich nutzbar sein soll.



Als zweites Problem habe ich aber auch einen Compiler-Fehler, den ich nach stundenlanger Suche nicht in den Griff bekommen habe, da ich ja eigentlich die richtige API vom VLC-Player verwende - dachte ich zumindest, bis ich sie ausprobieren wollte und der Fehler kam.

Und zwar wollte ich nichts anderes tun, als den Konstruktor der Klasse AXVLC.VLCPlugin2Class aufrufen, erhielt vom Compiler aber diesen Fehler:

Zitat:
Der Interoptyp "AXVLC.VLCPlugin2Class" kann nicht eingebettet werden. Verwenden Sie stattdessen die entsprechende Schnittstelle.


Kann mir einer sagen, was ich falsch mache und wie ich das Problem löse?


Beste Grüße


Palladin007 - Mo 25.02.13 16:19

Hat niemand eine Idee, wie das funktionieren könnte?


Der VLC-Player ist ja kostenlos, daher mache ich nichts illegales, dass muss sich doch irgendwie lösen lassen.


Ralf Jansen - Mo 25.02.13 16:59

Wenn Embedding nicht geht (warum auch immer) einfach mal versuchen das embedding auszuschalten. Dein Verweis auf die Interop Assembly sollte eine 'Embedded Interop Types' Eigenschaften haben die du testweise auf false setzen kann.


Palladin007 - Mo 25.02.13 18:03

Danke, jetzt kann ich zumindest auf die dll zugreifen.

Ob die dafür registriert sein muss, teste ich noch, aber ich glaube, ein HRESULT FAIL, den ich ein paar mal bekam, hängt genau damit zusammen.


Zwar bekomme ich jetzt keinen Compiler-Fehler und auch zur Laufzeit wird mir kein Fehler mehr angezeigt, aber ich höre kein Lied. Es passiert absolut gar nichts, das Programm stockt nur grob geschätzt eine viertel Sekunde, dann zeigt es mein testweise "Play" in der Konsole an und danach würde es aus gehen, wenn kein Console.Read(); da stehen würde:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
            AXVLC.VLCPlugin2Class axVLCPlugin1 = new AXVLC.VLCPlugin2Class();
            axVLCPlugin1.Volume = 100;
            axVLCPlugin1.Visible = true;
            axVLCPlugin1.addTarget(p, null, AXVLC.VLCPlaylistMode.VLCPlayListAppendAndGo, -666);
            Console.WriteLine("play");
            axVLCPlugin1.play();
            Console.Read();


Wie das ganze funktioniert habe ich von diesem [http://csharp-tricks.blogspot.de/2010/08/vlc-player-einbinden.html] Blog.

Das das Programm nach play() direkt aus geht, kann ich ja noch irgendwo verstehen. Es muss ja ein zweiter Thread geöffnet werden, damit der Rest der Software ungehindert der Musik weiter laufen kann und wenn dieser Thread nicht das Beenden der Software blockiert, ist das auch kein Problem, aber warum kann ich nichts hören?
Wie kann ich denn im Visual Studio die aktuell laufenden Threads überwachen?



Kennt sich vielleicht jemand mit der VLC-API aus, oder weiß, wo ich eine taugliche Dokumentation oder Erklärung finde? Ich hab da nicht viel gefunden, oder bin einfach nur blind.


Gruß


Ralf Jansen - Mo 25.02.13 18:10

Zitat:
Das das Programm nach play() direkt aus geht, kann ich ja noch irgendwo verstehen. Es muss ja ein zweiter Thread geöffnet werden, damit der Rest der Software ungehindert der Musik weiter laufen kann und wenn dieser Thread nicht das Beenden der Software blockiert, ist das auch kein Problem, aber warum kann ich nichts hören?
Wie kann ich denn im Visual Studio die aktuell laufenden Threads überwachen?


Ich vermute mal da wird eine MessageLoop benötigt die du aber nicht hast (Consolenanwendung?). Versuch mal ein Winforms Project oder bau dir zumindest ein Application.Run ein damit du eine MessageLoop bekommst.


Palladin007 - Mo 25.02.13 18:42

Ja, war eine Konsolen-Anwendung, aber auch als Forms-Anwendung macht es keinen Unterschied :(


Hab den Code von Oben in ein Button_Click-Event gelegt und mir darin auch mal den Form-Namen ändern lassen, damit ich sehe, wann der Code ausgeführt wurde. Wieder das gleiche, eine viertel Sekunde nach dem Klick ändert sich der Name, aber es bleibt trotzdem stumm.


Ralf Jansen - Mo 25.02.13 19:37

Da gehen mir die Ideen aus. Hast du mal die Alternativen zum ActiveX Control gecheckt?

Auf der Homepage gibt es das hier [http://wiki.videolan.org/LibVLC]. Und einen .Net Wrapper hier [http://wiki.videolan.org/LibVLC].

Edit: 2.ter Link http://vlcdotnet.codeplex.com/


Palladin007 - Mo 25.02.13 20:38

Kann es sein, dass das eigentlich zwei verschiedene Links sein sollten? ^^