Komprimierte Avi-Dateien abspielen



  • Ich zeige die AVI-Datei direkt im Dialog-Fenster in dem Animations-Bereich an. Gibt es vielleicht einen Beispielcode wie nun komprimierte Dateien dort abspielen kann?
    Ich möchte nicht auf Fremdsoftware, wie den Media-Player oder Ähnliche zurückgreifen!



  • AFAIK kann man mit CAnimateCtrl "nur" MS-RLE AVI's abspielen !!!

    um jetzt DivX o.ä. Formate abspielen zu können müßtest du den Codec in Deine Sourcen implementieren ( IMHO unmöglich ).

    Ich würde es ( wie Du es bereits schon "beschrieben" hast ) mit dem Media-Player Control realisieren, da hier der Codec kein Thema ist, solange er auf deinem System installiert ist 😉

    MfG veganza



  • Hmm...ist nicht Sinn der Sache, dass ich den Media Player nutze!

    Ich hab wie gesagt ein Dialog-Fenster in dem ein Fortschrittbalken durchläuft, Texte eingeblendet werden und nebenher halt das Video abgespielt wird. Das würde optisch nicht wirken, wenn ich nun den Media-Player öffne und mein Video wiedergebe.

    Besteht echt keine Möglichkeit, wie du geschrieben hast, den Codec in die Ressourcen zu laden und dann auf das Video zuzugreifen. Bzw. hat vielleicht schon jemand eine spezielle von CAnimateCtrl-abgeleitete Klasse entworfen, die dazu in der Lage ist? 😕



  • Den Mediaplayer kannst du auch als control einbinden ... du könntest dir auch den Source von VirtualDub angucken, der verwendet auch die installierten codecs, aber ne eigene videowiedergabe.



  • Ok...danke für die Antwort!

    Kann man den Media-Player so als Control einbinden, dass sämtliche Einstellungsmöglichkeiten ausgeblendet sind und wirklich nur der Bereich angezeigt wird, den das Video darstellt?



  • ja



  • So hab das Problem jetzt eine Weile ruhen lassen, da andere Sachen Vorrang hatten.

    Hab eine Möglichkeit gefunden mit mciSendString ein komprimiertes AVI-File im CAnimateCtrl-Control wiederzugeben.

    Nun habe ich dazu noch 2 Fragen:
    1. Wie kann ich das Video aus dem Speicher entfernen?
    2. Wie kann ich ein bestimmtes Frame wiedergeben?
    http://msdn.microsoft.com/library/en-us/multimed/mmcmdstr_177b.asp?frame=true



  • @Dressman1981

    wenn du es mit open öffnest würde ich es mit close wieder schließen und mit seek springt man an die gewünschte Postion / Frame !!!

    steht alles in deinem geposteten MSDN-Link bzw. in Folge-Links auf dieser Seite... ansonsten warten bis Eliminator 2001 antwortet 😉

    MfG veganza

    [ Dieser Beitrag wurde am 30.06.2003 um 18:58 Uhr von veganza editiert. ]



  • Danke @Veganza!

    Der Befehl Close haut übrigens wunderbar hin!

    Nur mit dem Seek-Befehl hab ich meine Probleme:

    mciSendString("seek movie", NULL, NULL, AnimationsHWND);

    Wo genau muss ich den Parameter übergeben, dass ich zu einem beliebigen Frame springen kann?

    Ok, dann muss ich warten bis Eliminator 2001 mir antwortet... 🙄



  • für den Fall das er nicht antwortet:

    Ich würde es mal so versuchen:

    seek movie to end nur um zu schauen ob er ans Ende springt !!!

    und für die Frames vielleicht dann seek movie to 100 für Frame 100 😕

    mußt mal selber probieren... mir fehlt die Zeit dazu 😉 wäre nett wenn Du mich auf dem Laufenden halten würdest 😉

    MfG veganza



  • noch was gefunden:

    Du mußt erst mit
    set video1 time format frames
    das Zeitformat auf Frames stellen... default sind ms ( Milisekunden )... sollte also in meinem obigen Beispiel ohne diese einstellungen 100 Milisikunden nach vorne springen ( wird man wahrscheinlich gar nicht sehen ) !!!

    und wie springt man wieder rückwärts ???

    MfG veganza



  • Super @Veganza!

    Mit:
    mciSendString("seek movie to 1", NULL, NULL, AnimationsHWND);

    kann ich nun zum Anfang des Videos springen.
    Das Video Time Format brauchte ich nicht extra auf Frames definieren.

    Ich habe jetzt das folgende Problem:

    Als ich es am Anfang alles über das CAnimateCtrl-Control laufen lassen habe, habe ich einfach in der OnInitDialog()-Funktion den Startpunkt angegeben. Das funktioniert jetzt nicht mehr.

    Wenn ich in der OnPaint()-Funktion den Aufruf mache (funktioniert nur, ohne dass ich mciSendString("close movie", NULL, NULL, AnimationsHWND); aufrufe), dann wird das erste Frame nur so lange angezeigt bis der Bildschirminhalt wieder neu gezeichnet wird.
    Ich möchte aber immer das erste Frame anzeigen, nur wenn die Animation abläuft, dann natürlich nicht.

    Wie löse ich das am Besten?



  • @Dressman

    versuche Deine Ausgangssituation mal etwas genauer zu beschreiben !!!
    wie greifst Du wo drauf zu... welchen Anwendungstyp hast Du, welche Controls benutzt Du usw.

    in meiner "alten" Testanwendung... als Du das Posting gemacht hast habe ich auf dem "Dialog-Hintergrund" das Video abgepielt, wie Eliminator 2001 und hatte dort keine Redraw-Probleme... kenne die aber aus einem anderen Zusammenhang 😉
    Bitmap-Button... da war auch nach einem Redraw das Bitmap weg... nur keine Ahnung was ich damals gemacht habe um das Problem zu lösen 🙄

    MfG veganza



  • Hab alle Probleme beseitigt!

    Danke für die Hilfe! 😉

    [ Dieser Beitrag wurde am 02.07.2003 um 10:19 Uhr von Dressman1981 editiert. ]


Anmelden zum Antworten