WMP Loop optimieren?



  • Guten Morgen,

    in einer GUI-Anwendung habe ich per ActiveX ein WindowsMediaPlayer Objekt eingefügt.
    Wenn ich nun per setMode das Loop-Verhalten setze, funktioniert dies auch, aber zwischen den einzelnen Wiederholungen gibt es meist ein kurzes schwarzes Blitzen unterschiedlicher Länge.
    Lade ich dieselbe Datei direkt in den WMP (ohne diesen in den C++-Builder einzubauen) läuft es kontinuierlich. Es ruckelt höchstens mal ganz leicht am Übergang, aber ohne Schwarzblitz.

    Hat jemand eine Idee woran das unterschiedliche Verhalten des gleichen Players mit derselben Datei liegen kann bzw. wie ich das schöner machen kann? Gibt es z.B. ne Möglichkeit da irgendwo das Video vorzupuffern o.ä.? Habe da leider nichts in der Richtung zu gefunden.

    Hier übrigens die Methode, die ich meine/nutze: https://docs.microsoft.com/de-de/windows/desktop/api/wmp/nf-wmp-iwmpsettings-setmode

    Sonnige Grüße

    P.S.: für alle späteren Leser, die per Suche nach einer Video Loop Möglichkeit hierher finden, sei noch folgender interessanter Artikel verlinkt (da ich selber kurz drüber gestolpert bin): https://blogs.msdn.microsoft.com/oldnewthing/20041222-00/?p=36923



  • Irgendwie find ichs 2018 ziemlich uncool, den WMP per ActiveX einzubinden. Es gibt 1000 andere Möglichkeiten, eine Video abzuspielen, die nicht wesentlich komplizierter sind.



  • Probiere mal showFrame auch auf true zu setzen (entsprechend deines Links).

    PS: Warum benutzt du nicht den TMediaPlayer?



  • @mechanics sagte in WMP Loop optimieren?:

    Irgendwie find ichs 2018 ziemlich uncool, den WMP per ActiveX einzubinden. Es gibt 1000 andere Möglichkeiten, eine Video abzuspielen, die nicht wesentlich komplizierter sind.

    Okay, kannst du mir auch sagen, warum oder welche Nachteile das hat? Und was wären z.B. Alternativen, mit denen ich mich mal beschäftigen könnte? (bin in dem Gebiet noch recht unerfahren)

    @th69 sagte in WMP Loop optimieren?:

    Probiere mal showFrame auch auf true zu setzen (entsprechend deines Links).

    Gute Idee, bewirkt aber leider auch keinen Unterschied 😕 hat vermutlich nur Einfluss, wenn das Video pausiert ist, damit da nicht irgendne Grütze zu sehen ist, sondern ein vollständiger Keyframe/also Vollbild. Obwohl dort steht:

    the nearest video keyframe is displayed when not playing

    hat es beim stoppen/enden des Videos keinen Einfluss darauf. Das Bild wird immer schwarz/leer.

    @th69 sagte in WMP Loop optimieren?:

    Warum benutzt du nicht den TMediaPlayer?

    weil der mir nicht genug Codecs unterstützt. Und den Display/Vollbildmodus dürft ich dann auch alles selbst schreiben oder irre ich mich da? Warum alles neu machen, wenn es schon fertige Player gibt. 😉 Wollt ja erst den VLC nehmen (da OpenSource und mehr Codecs), aber davon abgesehen, dass das VLC ActiveX Plugin dauernd Probleme mit dem C++ Builder macht, schneidet der VLC leider meistens ein paar Audioeinheiten am Anfang ab (was für meine Zwecke ungenügend ist) und seit der neuen 3er Version gibts da auch noch ein paar weitere nervige Macken, die die Zuverlässigkeit nicht garantieren. Da ist der WMP schon deutlich sauberer (hab ich zu meinem Erstaunen festgestellt), obwohl er selbst nicht alles wiedergeben kann, aber das meiste zumindest.

    Das einzige was mich da halt nur nervt und wundert, ist das der Loop nicht sauber ohne Schwarzbild geht, obwohl derselbe Player es bei derselben Datei in seiner "Inhouse"-Anwendung tut. 😔



  • Naja, es ist ziemlich "schwergewichtig" und so toll ist die Integration auch nicht.
    Die aktuelle API in Windows für sowas ist wohl die Media Foundation (früher hätt ich DirectShow benutzt, hab da aber auch schon seit Jahren nichts mehr gemacht). Damit ist es auch nicht so schwer, ein Video abzuspielen. Es ist zwar etwas mehr Aufwand und du müsstest die Controls wie Pause/Weiter selber implementieren (auch nur paar Funktionsaufrufe), aber dafür lädst du keine fette Komponente und hast es genau im Griff.



  • Dann werd ich dort mal einen Blick reinwerfen. Ist aber nicht mit Windows XP kompatibel, soweit ich beim ersten Lesen sehen konnte...
    Die Controls hab ich eh selber implementiert, da ich von der Komponente lediglich das Display und die fertigen Funktionen benutze. Die Steuerung mach ich eh nicht über die Komponente, eben weil ichs selbst im Griff haben will.

    Die Frage für mich ist jetzt natürlich, ob sich der Aufwand alles umzuschmeißen lohnt, denn wenn ich die beschriebene Loop-Problematik dadurch weiter habe, hab ich (bis auf die "Leichtigkeit", die grundsätzlich natürlich gut ist) nichts gewonnen.



  • Ist Windows XP wirklich eine Anforderung? Mittlerweile wird nicht mal Windows Vista unterstützt. Aber wenn, dann könntest du dir noch DirectShow anschauen. Ist aber nicht trivial, wenn man das nur mal kurz braucht...