Schleife während Abspielen eines Videos

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
CptGreenwood
Beiträge: 125
Registriert: 12.07.2007 10:40

Schleife während Abspielen eines Videos

Beitrag 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
Benutzeravatar
Kiffi
Beiträge: 10715
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Schleife während Abspielen eines Videos

Beitrag 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
a²+b²=mc²
Benutzeravatar
CptGreenwood
Beiträge: 125
Registriert: 12.07.2007 10:40

Re: Schleife während Abspielen eines Videos

Beitrag 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.
Benutzeravatar
Kiffi
Beiträge: 10715
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Schleife während Abspielen eines Videos

Beitrag 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
a²+b²=mc²
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Schleife während Abspielen eines Videos

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

Re: Schleife während Abspielen eines Videos

Beitrag 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.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8812
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Schleife während Abspielen eines Videos

Beitrag von NicTheQuick »

ts-soft hat geschrieben:

Code: Alles auswählen

..."aliensong.mpeg"...
Hey, der ist aber doch auch schon uralt, oder? :D
Benutzeravatar
CptGreenwood
Beiträge: 125
Registriert: 12.07.2007 10:40

Re: Schleife während Abspielen eines Videos

Beitrag von CptGreenwood »

Danke für eure Hilfe, zusammen mit den kleinen Änderungen von ts funzt es jetzt! :bounce:
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Schleife während Abspielen eines Videos

Beitrag 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)
Antworten