Seite 1 von 1

Schleife während Abspielen eines Videos

Verfasst: 22.02.2010 13:27
von CptGreenwood
Hi,

ich habe eine Frage zum Abspielen eines Videos:

Ich habe einen Video mit "LoadMovie" geladen und spiele ihn in einem rahmenlosen Fenster ab. Das funktioniert eigentlich super aber ich möchte das Programm so lange anhalten, bis der Film abgelaufen ist. Dies ist mir trotz der unterschiedlichsten Versuche nicht gelungen. Entweder der Film wurde sofort abgebrochen und das Programm fortgesetzt oder nach Ende des Films ging es nicht weiter oder der Film wurde garnicht erst abgespielt.
Nun habe ich es so implementiert, dass eine Schleife die Anzahl der Sekunden wartet (über "ElapsedMilliseconds"), die der Film lang ist. Das geht meistens, nur bei langsameren Systemen, wo der Film ein wenig ruckelig läuft, sind diese Sekunden abgelaufen, bevor der Film wirklich durch ist und er wird hinten abgekappt.

Gibt es da eine bessere Lösung?

Greetz,
CptGreenwood

Re: Schleife während Abspielen eines Videos

Verfasst: 22.02.2010 13:39
von Kiffi
CptGreenwood hat geschrieben:aber ich möchte das Programm so lange anhalten, bis der Film abgelaufen ist.
was heißt in diesem Fall 'anhalten'? Möchtest Du, dass keine
Benutzereingaben (Buttonklick, etc.) gemacht werden?

Grüße ... Kiffi

Re: Schleife während Abspielen eines Videos

Verfasst: 22.02.2010 13:47
von CptGreenwood
Nein, keine Benutzereingaben. Anhalten soll hier wirklich anhalten heißen. Der Film soll ganz ablaufen und anschließend das Programm (ist ein Vollbildspiel, keine Windows-GUI) fortgesetzt werden. Hinbekommen habe ich es, wenn ich das Fenster nicht rahmenlos, sondern mit Titelleiste anzeige und auf das Schließen-Ereignis prüfe aber das möchte ich eigentlich nicht, dass soll von selbst gehen.

Re: Schleife während Abspielen eines Videos

Verfasst: 22.02.2010 14:13
von Kiffi
CptGreenwood hat geschrieben:(ist ein Vollbildspiel, keine Windows-GUI)
mh, mit Spielen kenne ich mich leider nicht so gut aus. Hier mal der
Versuch, das mit 'normalen' Fenstern zu machen. Vielleicht kann
Dich das inspirieren:

Code: Alles auswählen

InitMovie()

myMovieFile.s = "C:\Program Files\Microsoft Visual Studio\MSDN98\98VSa\1031\SAMPLES\VID98\content\mmedia\GLOBE.AVI"

myMovie = LoadMovie(#PB_Any, myMovieFile)

If myMovie = 0
  ; Meldung
  Debug "Konnte Movie nicht laden. Programm wird beendet"
  ; Programmende
  End
EndIf

#Window1 = 0
#Window2 = 1

; erste Fenster öffnen. hier wird das movie abgespielt
OpenWindow(#Window1, #PB_Ignore, #PB_Ignore, 300, 300, "Window1")

PlayMovie(myMovie, WindowID(#Window1))

; warten, bis das movie abgespielt wird
Repeat
  While WindowEvent() : Delay(1) : Wend
Until MovieStatus(myMovie) > 0

Repeat
  
  WWE = WaitWindowEvent(100)
  
  If WWE = 0
    
    If IsWindow(#Window2) = 0
      If MovieStatus(myMovie) = 0 ; wenn movie nicht mehr abgespielt wird
        
        ; Fenter 2 öffnen
        OpenWindow(#Window2, #PB_Ignore, #PB_Ignore, 200, 200, "Window2")
        
        ; 'Moviefenster' schliessen
        CloseWindow(#Window1)
        
      EndIf
    EndIf
    
  Else
    
    If WWE = #PB_Event_CloseWindow
      
      If EventWindow()=#Window2
        
        Quit = #True
        
      EndIf
      
    EndIf
    
  EndIf
  
Until Quit = #True
Grüße ... Kiffi

Re: Schleife während Abspielen eines Videos

Verfasst: 22.02.2010 14:22
von ts-soft
Hier meine Version :wink: (naja, meine Mühe soll ja nicht ganz umsonst gewesen sein, auch wenn Peter schneller war :lol: )

Code: Alles auswählen

InitNetwork()
Define event
If ReceiveHTTPFile("http://www.blitzbasement.net/bank/aliensong.mpeg", GetTemporaryDirectory() + "aliensong.mpeg")
   If InitMovie() And LoadMovie(0, GetTemporaryDirectory() + "aliensong.mpeg")
    OpenWindow(0, 0, 0, MovieWidth(0), MovieHeight(0), "blub", #PB_Window_BorderLess | #PB_Window_ScreenCentered)
    PlayMovie(0, WindowID(0))
    While MovieStatus(0) <= 0 : Delay(10) : Wend; warten bis movie läuft
    Repeat
      event = WaitWindowEvent(20)
      If MovieStatus(0) <= 0; movie zuende, also löschen und weiter im text
        Break
      EndIf
    ForEver
    DeleteFile(GetTemporaryDirectory() + "aliensong.mpeg")
  EndIf
EndIf
Gruß
Thomas

Re: Schleife während Abspielen eines Videos

Verfasst: 22.02.2010 14:27
von CptGreenwood
Danke für den Code aber ich glaube, das funzt bei mir nicht, denn ich benutze kein zweites Fenster, sondern das Game läuft dann im FullScreen.

So ist's momentan:

Code: Alles auswählen

InitMovie()
LoadMovie(0, "film.avi")
OpenWindow(0, 100, 150, MovieWidth(0), MovieHeight(0), "Intro",  #PB_Window_BorderLess | #PB_Window_ScreenCentered)
PlayMovie(0, WindowID(0))      
timer = ElapsedMilliseconds()
Repeat
Until ElapsedMilliseconds() - timer >= 21000
StopMovie(0)
CloseWindow(0)

OpenScreen(1024, 768, 32, "Game")
;...und so weiter
Habe es mal mit dem Schleifenteil deines Beispielcodes versucht:

Code: Alles auswählen

InitMovie()
LoadMovie(0, "film.avi")
OpenWindow(0, 100, 150, MovieWidth(0), MovieHeight(0), "Intro",  #PB_Window_BorderLess | #PB_Window_ScreenCentered)
PlayMovie(0, WindowID(0))      
Repeat
  While WindowEvent() : Delay(1) : Wend
Until MovieStatus(0) = 0
CloseWindow(0)

OpenScreen(1024, 768, 32, "Game")
;...und so weiter
Leider sieht man das Videofenster nur den Bruchteil einer Sekunde, dann isses weg und das Programm läuft weiter.

Re: Schleife während Abspielen eines Videos

Verfasst: 22.02.2010 14:28
von NicTheQuick
ts-soft hat geschrieben:

Code: Alles auswählen

..."aliensong.mpeg"...
Hey, der ist aber doch auch schon uralt, oder? :D

Re: Schleife während Abspielen eines Videos

Verfasst: 22.02.2010 14:32
von CptGreenwood
Danke für eure Hilfe, zusammen mit den kleinen Änderungen von ts funzt es jetzt! :bounce:

Re: Schleife während Abspielen eines Videos

Verfasst: 22.02.2010 14:39
von ts-soft
NicTheQuick hat geschrieben:
ts-soft hat geschrieben:Hey, der ist aber doch auch schon uralt, oder? :D
Zeitlos schön :mrgreen:
(wollte nichts lokales nehmen, was evtl. nicht bei jedem vorhanden ist)