Abspielen von Filmen

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
CptGreenwood
Beiträge: 125
Registriert: 12.07.2007 10:40

Abspielen von Filmen

Beitrag 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??
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

nur ne idee: versuch mal klammern:

Code: Alles auswählen

(MovieStatus(0)=0) Or KeyboardPushed(#PB_Key_Escape) 
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag 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 
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
CptGreenwood
Beiträge: 125
Registriert: 12.07.2007 10:40

Beitrag 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?
Benutzeravatar
CptGreenwood
Beiträge: 125
Registriert: 12.07.2007 10:40

Beitrag 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...
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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....
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
CptGreenwood
Beiträge: 125
Registriert: 12.07.2007 10:40

Beitrag von CptGreenwood »

Leider auch nix. Der Video bricht nach dem ersten Bild ab.
Benutzeravatar
CptGreenwood
Beiträge: 125
Registriert: 12.07.2007 10:40

Beitrag 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... :?
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: Abspielen von Filmen

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag 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.
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Antworten