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

(naja, meine Mühe soll ja nicht ganz umsonst gewesen sein, auch wenn Peter schneller war

)
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
Hey, der ist aber doch auch schon uralt, oder?

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!

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?

Zeitlos schön
(wollte nichts lokales nehmen, was evtl. nicht bei jedem vorhanden ist)