Seite 1 von 2
[Qt4] MediaPlayer (*würg*) einbetten
Verfasst: 24. Oktober 2005 19:42
von Esleborn
hi,
ich hab hier ein besch...öntes Problem.
Lange Fassung: Ich muss mich jetzt hier als Verräter outen... mein Chef (
bitte kein Kommentar über ihn, ich hab mir schon selbst 'ne Sammlung von negativen Kommentaren über ihn erstellt...) hat grad kurzfristig beschlossen, dass die MP3s, die wir im aktuellen Projekt benutzen/verkaufen mit DRM geschützt werden sollen. Als Folge dessen hat sich mein Problem MP3s abzuspielen (siehe
hier und
hier) leicht verändert. Ich brauche nun die Möglichkeit einen Player, der DRM unterstützt, in ein Qt Projekt einzubinden. Beschränkt wird das ganze dafür (erstmal) auf Windows. Daher kam mir die "Lösung" den M$ Speicherfresser ("
Media Player") zu verwenden. Ich hatte auch irgendwo gelesen, wie ich den am besten in ein Qt-Widget einbette, so dass ich ihn zum Abspielen von MP3s verwenden kann. Weiß aber nicht mehr wo, und find auch nichts... kann mir da vllt einer weiterhelfen?
Kurze Fassung: Integrieren von M$ "
Media Player" in ein Qt Widget, wie?
Danke
Elgrimm Esleborn
PS: Ja ich bin Mitglied im
Protect Privacy und muss trotzdem "DRM-Software" entwickeln. Tut mir ja selbst weh...
Verfasst: 25. Oktober 2005 10:56
von lepsai
Elementar. Du kannst MS Media Player als ein ActiveX Control in Qt Widget einbinden. Geht im Designer mit einem Click.
Verfasst: 25. Oktober 2005 21:09
von Esleborn
sehr gut... danke
PS: Als Mathematik Student hasse ich das Wort "trivial" und Wörter mit ähnlicher Bedeutung zB "elementar"... *grins*
Verfasst: 25. Oktober 2005 21:11
von Esleborn
<verschoben>
Verfasst: 4. November 2005 17:09
von Esleborn
mmh ich bin leider zu doof um damit klar zu kommen, könnte mir einer genauer Beschreiben, was ich machen muss um den MediaPlayer so einzubetten, dass ich MP3s abspielen kann`?
E.E.
Verfasst: 6. November 2005 20:26
von Esleborn
kommt schon bitte...
Verfasst: 7. November 2005 08:22
von lepsai
Starte den Designer, in der Widget Toolbox in der Kategorie "Containers" wähle das "AxWidget". Beim Click auf der Form erscheint das "Select ActiveX Control"-Dialog. In diesem wählste "Windows Media Player". Fertig!
Verfasst: 7. November 2005 22:47
von Esleborn
sry ich bin echt zu blöd zum sch....
meine Frage war komplett falsch gestellt... ich wollte eigentlich fragen, ob es möglich ist bzw wie es möglichst ist, den MediaPlayer mit "eigenen Buttons" usw auszustatten... leichter Alkoholgenuss und 2 Tage ohne Schlaf haben die Frage leider etwas umformuliert

... Sry, spätestens beim "kommt schon bitte" hätte ich die Frage vllt nochmal lesen sollen... sry
Verfasst: 7. November 2005 23:06
von lepsai
Das geht nicht... Kannst weiter saufen....

Verfasst: 10. November 2005 21:29
von Esleborn
schlecht... *trink*
PROST!

Verfasst: 14. November 2005 21:27
von Esleborn
wie übergeb ich dem player eine MP3 Datei die er abspielen soll oder ruf eine Funktion auf, welche Funktionen (à la start/pause/stop) gibt es?
thx für Infos
Verfasst: 14. November 2005 22:07
von lepsai
Über die Eigenschaft URL...
Verfasst: 14. November 2005 22:12
von Esleborn
Code: Alles auswählen
QAxWidget *p_widget = new QAxWidget ( &window );
p_widget->setControl ( "{6BF52A52-394A-11d3-B153-00C04F79FAA6}" );
und wie bekomm ich jetzt ein item in die Playlist und starte/pausiere/stoppe das abspielen?
Code: Alles auswählen
IDispatch *p_result = ( IDispatch * ) p_widget->querySubObject ( "newMedia ( QString )", filePathString );
p_widget->dynamicCall ( "setCurrentMedia(IDispatch*)", p_result );
tut nicht, es kommt der Fehler: "QAxBase: Error calling IDispatch member setCurrentMedia: Type mismatch in parameter 0."...
E.E.
PS: Ich will nicht sofort das Abpsielen starten... außerdem brauch ich die Möglichkeit zum pausieren und stoppen...
Verfasst: 21. Oktober 2007 22:12
von tamad
Ich habe das gleiche Problem. Ich kann das WMP 11.0 ActiveX Control mit setControl() anlegen, aber um an den play(), stop() usw Methoden zu kommen, brauche ich das IWMPControls Interface. Wie kann man über das QAXWidget Objekt, das durch setControl für das WMP 11 ActiveX generiert wurde, ein Objekt mit dem IWMPControls Interface instanzieren ? Kann bitte jemand mit einem C++ Code-Sample helfen ?
Danke im voraus.
Verfasst: 22. Oktober 2007 14:42
von Sephral
Hallo zusammen,
bevor es hier zu chaotisch wird eine allgemein gehaltene Anleitung...
Das folgende gilt natürlich nur für Windows und ich nehme an man braucht auch die Commercial-Version. Ich halte das ganze bewusst allgemein.
Als erstes sollte man das richtige Control finden btw die entsprechende CLSID. Persönlich nutze ich dafür am liebsten ein kleines Tool namens ActiveXHelper
(download).
Hat man das Control gefunden, sollte man sich eine Doku der Interfaces erstellen lassen. Hierfür bringt Qt ein kleines Tool mit:
<IrgendeinLaufwerk>:\Qt\4.x.x\tools\activeqt\dumpdoc
Aufruf mit: dumpdoc.exe "<CLSID>" -o doku.html
Das Tool kompilieren und verwenden. Am Ende sollte ne schicke HTML-Doku bei raus kommen (Parameter -O). In der Doku findet man nun kleine Codeschnipsel, wie man die einzelnen Funktionen verwenden soll.
Mit den Codeschnipseln und ein wenig herumprobieren, bekommt man das Control dann üblicherweise zum laufen.
Alternativ kann man versuchen sich mit dem Tool "dumpcpp" Interfaceklassen erstellen zu lassen, aber ehrlich gesagt hat das bei mir bisher keinen Erfolg gebracht, wenn es jemand schafft wäre ich für ein paar Tips dankbar

hatte dann immer Probleme mit Namespaces und ich konnte nichts davon kompilieren.
Ciao,
Sephral