Seite 1 von 1
Abspielen von Filmen
Verfasst: 08.04.2008 12:58
von CptGreenwood
Hallo,
ich glaube, ich habe hier ein typisches Noob-Problem. Ich möchte einen Film abspielen, bis er zu Ende ist oder die Esc-Taste gedrückt wurde, dann soll das Programm weiterlaufen.
Ich habe es mit folgendem Code versucht:
Code: Alles auswählen
PlayMovie(0, ScreenID())
Repeat
ExamineKeyboard()
Until MovieStatus(0) = 0 Or KeyboardPushed(#PB_Key_Escape)
StopMovie(0)
Leider sieht man nur das erste Bild des Films, dann macht das Programm schon weiter. Benutze ich folgende Zeilen:
Code: Alles auswählen
PlayMovie(0, ScreenID())
Repeat : Until MovieStatus(0) = 0
StopMovie(0)
dann läuft der Film bis zum Ende, ich kann aber nicht mit Esc abbrechen. Lasse ich den MovieStatus aus der Bedingung weg:
Code: Alles auswählen
PlayMovie(0, ScreenID())
Repeat
ExamineKeyboard()
Until KeyboardPushed(#PB_Key_Escape)
StopMovie(0)
dann läuft der Film und ich kann mit Esc abbrechen. Allerdings muss ich auch Esc drücken, wenn der Film fertig ist, sonst bleibts beim schwarzen Bildschirm.
Hat jemand eine Idee, wie ich vorgehen muss??
Verfasst: 08.04.2008 13:09
von #NULL
nur ne idee: versuch mal klammern:
Verfasst: 08.04.2008 13:27
von bobobo
die Klammern sollten eigentlich egal sein.
es kommt ein wenig auf das FilmFormat an. nicht in jedem
Format-Fall werden ein brauchbare Ergebnis geliefert.
Nimm Dir mal das Beispiel aus der PB-Hilfe , ergänz es um ein paar MovieAbfragen wie Movielength(), MovieInfo() und während des Spielens
Moviestatus() und versuch damit das Movie abzuspielen.
--
Ich seh gerade dass MovieStatus() mit 0 anfängt (warum auch immer)
dann hochzählt bis Movielength() -1 .. versuch mal folgenden Code
Code: Alles auswählen
If InitMovie() = 0
MessageRequester("Error", "Can't initialize movie playback !", 0)
End
EndIf
MovieName$ = OpenFileRequester("Choose the movie to play", "", "Movie/Audio files|*.avi;*.mpg;*.asf;*.mp3;*.wav|All Files|*.*", 0)
If MovieName$
If LoadMovie(0, MovieName$)
Debug MovieInfo(0,0)
OpenWindow(0, 100, 150, MovieWidth(0), MovieHeight(0), "PureBasic - Movie")
PlayMovie(0, WindowID(0))
Repeat
SetWindowTitle(0,Str(MovieLength(0))+" "+Str(MovieStatus(0)))
Until WaitWindowEvent() = #PB_Event_CloseWindow Or MovieStatus(0)+1=MovieLength(0)
Else
MessageRequester("Error", "Can't load the movie...", 0)
EndIf
EndIf
Verfasst: 08.04.2008 16:15
von CptGreenwood
Klappt nicht. Da mein Proggi in Vollbildgrafikmode läuft, habe ich nicht ganz deinen Code verwendet, sondern:
Code: Alles auswählen
LoadMovie(0, ".\gfx\intro.gvv")
ResizeMovie(0, 80, 60, 640, 480)
PlayMovie(0, ScreenID())
Repeat
ExamineKeyboard()
Until KeyboardPushed(#PB_Key_Escape) Or MovieStatus(0) + 1 = MovieLength(0)
StopMovie(0)
FreeMovie(0)
Der Film spielt ab, lässt sich per Esc abbrechen, das Programm fährt allerdings nicht fort, wenn der Film zuende ist, ich muss dann auch Esc drücken. MovieStatus(0)+1 scheint nie MovieLength(0) zu werden.
Verstehe ich die Benutzung nur nicht oder scheint das ein Bug zu sein?
Verfasst: 08.04.2008 16:21
von CptGreenwood
Ich habe jetzt doch mal deinen Code direkt ausprobiert. Film wird abgespielt. MovieLength zeigt immer 500 an, MovieStatus irgendwelche wilde 8-stellige Zahlen, ganz am Ende (wie erwartet) 0.
Die 500 wird MovieStatus aber nie, daher klappt es wahrscheinlich so nicht...
Verfasst: 08.04.2008 16:23
von Kaeru Gaman
nimm mal testhalber die doppelabfrage aus dem Until.
Code: Alles auswählen
PlayMovie(0, ScreenID())
EXIT=0
Repeat
ExamineKeyboard()
If KeyboardPushed(#PB_Key_Escape)
EXIT = 1
EndIf
If MovieStatus(0) = 0
EXIT = 1
EndIf
Until EXIT
StopMovie(0)
...mich irritiert ein wenig, warum das überhaupt so funktioniert, ganz ohne FlipBuffers und so....
Verfasst: 08.04.2008 17:10
von CptGreenwood
Leider auch nix. Der Video bricht nach dem ersten Bild ab.
Verfasst: 08.04.2008 17:21
von CptGreenwood
Jetzt funzt es. Ich habe aus dem "If MovieStatus(0) = 0" ein "If MovieStatus(0) <= 1" gemacht. Keine Ahnung warum es nun geht aber hauptsache es geht...

Re: Abspielen von Filmen
Verfasst: 08.04.2008 17:29
von Kaeru Gaman
dann verstehe ich aber das nicht:
CptGreenwood hat geschrieben:Benutze ich folgende Zeilen:
Code: Alles auswählen
PlayMovie(0, ScreenID())
Repeat : Until MovieStatus(0) = 0
StopMovie(0)
dann läuft der Film bis zum Ende, ich kann aber nicht mit Esc abbrechen.
das kann dann ja eigentlich auch nicht sein.
Verfasst: 08.04.2008 18:51
von bobobo
mein testvideo (mpg) bricht mit der <= Abfrage beim ersten Bild ab.
MovieStatus() liefert scheinbar formatabhängig unterschiedliches zurück
und ist demnach eher ungeeignet.