lire une vidéo sur un screen ()

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

lire une vidéo sur un screen ()

Message par blendman »

salut

Pour notre jeu 3arks, j'aimerai en introduction ouvrir une vidéo d'introduction, présentant par exemple l'univers, ou ce genre de chose.

Mais lorsque je tente de lire une vidéo ça ne marche pas en plein écran :(

savez-vous pourquoi ? la vidéo doit-elle faire une taille spéciale ? (ça marche en mode fenêtré).

voici le code, basé sur l'exemple fourni avec purebasic :

Code : Tout sélectionner

If InitMovie()=0 Or InitSprite()=0 Or InitKeyboard()=0
  MessageRequester("Error", "Can't initialize movie playback !", 0) 
  End
EndIf

Global quit.b,play.b,event.l

MovieName$ = OpenFileRequester("Choose the movie to play", "", "Movie/Audio files|*.avi;*.mpg;*.asf;*.mp3;*.wav|All Files|*.*", 0)

If MovieName$
  If LoadMovie(0, MovieName$)
    OpenScreen(1024,768,32,"film")   
    ResizeMovie(0,50,50,MovieWidth(0), MovieHeight(0))
    PlayMovie(0, ScreenID())  
    
    Repeat
      ExamineKeyboard()
      If KeyboardPushed(#PB_Key_Escape)
        quit = 1
      EndIf      
    Until KeyboardPushed(#PB_Key_Escape) Or quit = 1
  Else
    MessageRequester("Error", "Can't load the movie...", 0)
  EndIf
EndIf 
ma vidéo fait 480*360, faut(il qu'elle ait une taille proportionnelle à l'écran ?

Merci

EDIT :
je l'ai redimensionné en 400*300, et ça ne marche toujours pas
Dernière modification par blendman le dim. 29/janv./2012 14:04, modifié 2 fois.
Avatar de l’utilisateur
falsam
Messages : 7323
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: lire une vidéo sur un screen

Message par falsam »

étrange ton code qui ne fonctionne pas effectivement alors que de la maniére suivante il fonctionne.

Code : Tout sélectionner

InitMovie() 
InitSprite() 
InitKeyboard()

MovieName$ = OpenFileRequester("Choose the movie to play", "", "Movie/Audio files|*.avi;*.mpg;*.asf;*.mp3;*.wav|All Files|*.*", 0)

OpenScreen(640, 480, 32, "test")
LoadMovie(0, MovieName$) 
ResizeMovie(0,0,0,MovieWidth(0), MovieHeight(0))
PlayMovie(0,ScreenID())

Repeat
  ExamineKeyboard() 
Until KeyboardPushed(#PB_Key_Escape)
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: lire une vidéo sur un screen

Message par blendman »

Effctivement.

Visiblement, dans le cadre d'un openscreen(), il faut lancer le film après avoir ouvert l'écran, contrairement à la fenêtre.

Merci ;)
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: lire une vidéo sur un screen

Message par blendman »

salut

J'ai remarqué que lorsque je lance une vidéo en fenêtre maximisée, je ne vois pas la vidéo. savez-vous pourquoi ?

le code :

Code : Tout sélectionner

;{ init, constantes, globales
InitMovie()
InitSprite()
InitKeyboard()

#screen = 0

Global quit.b,play.b,event.l
;}

;{ window

MovieName$ = OpenFileRequester("Choose the movie to play", "", "Movie/Audio files|*.avi;*.mpg;*.asf;*.mp3;*.wav|All Files|*.*", 0)
If #screen = 0
  ExamineDesktops()
  OpenWindow(0, 0,0,DesktopWidth(0), DesktopHeight(0), "PureBasic - Movie",#PB_Window_SystemMenu|#PB_Window_MaximizeGadget|#PB_Window_SizeGadget|#PB_Window_Maximize)
Else
  OpenScreen(1024,768,32,"film")
EndIf

If MovieName$ <>"" 
  LoadMovie(0, MovieName$) ; "movie01.avi")
  ResizeMovie(0,50,100,MovieWidth(0)*2, MovieHeight(0)*2)
  If #screen=0
    OpenWindowedScreen(WindowID(0),0,0,DesktopWidth(0), DesktopHeight(0),1,0,0)
  EndIf
  PlayMovie(0, ScreenID()) 
Else 
  End  
EndIf
;}

Repeat
  event = WaitWindowEvent()
  ExamineKeyboard()
  If KeyboardPushed(#PB_Key_Escape) :    quit = 1 :  EndIf 
Until KeyboardPushed(#PB_Key_Escape) Or quit = 1 Or event = #PB_Event_CloseWindow

jem
Messages : 18
Inscription : lun. 26/sept./2011 9:02

Re: lire une vidéo sur un screen

Message par jem »

Chez moi ( PB 4.60RC2 32Bit - Windows 7 ) ton code fonctionne.
la vidéo choisi ( Divx ) s'ouvre correctement dans une fenetre maximisé par contre la vidéo elle meme n'est pas plien écran, juste la fenètre.

La vidéo s'affiche à sa taille par défaut , dans une fenetre de fond noir qui elle est maximisé.
PureBasic V4.60 RC2 x86 | Windows 7
Avatar de l’utilisateur
Atlante
Messages : 337
Inscription : mer. 29/juin/2011 18:35
Localisation : Paris

Re: lire une vidéo sur un screen

Message par Atlante »

Allez rien que pour toi ;)
Comme ça j'aurai mis ma petite pierre dans ton projet ;)
Juste une chose il faut que tu gères les events dans la boucle sinon ça risque de planter si quelqu'un clique ou fait un autre event.

Code : Tout sélectionner



If InitMovie() = 0
  MessageRequester("Error", "Can't initialize movie playback !", 0)
  End
EndIf
If ExamineDesktops() = 0
  End
EndIf

If OpenWindow(0, 0, 0, DesktopWidth(0), DesktopHeight(0), "video", #PB_Window_BorderLess )

 play = 0
      
  Repeat
  
      
    If play = 0
      play =1
      MovieName$="C:\film xbox\Fast Five.avi"
      
             LoadMovie(0, MovieName$)
             ResizeMovie(0, 0, 0, DesktopWidth(0), DesktopHeight(0))      
             PlayMovie(0, WindowID(0))
   EndIf 
            
  ForEver    
EndIf

End
Modérateur
Config : Intel I5 4670K, Nvidia Geforce GTX 1060, 16go RAM, SSD 256go, DD 2000go
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: lire une vidéo sur un screen

Message par blendman »

Merci pour ton code Atlante, mais en fait, le problème vient du fait que je doive utiliser un OpenWindowedScreen() en mode fenêtré dans mon jeu :).

Alors, je n'ai pas vraiment de solution. J'aurai bien déplacer le screen vers la gauche pendant que je lis la vidéo, mais pas possible. J'ai essayé de lire la vidéo sur un sprite, mais seules certains mpg sont lus et chez moi, ça ne marche pas...

Bref, je n'ai pas encore trouver de solution pour lire une vidéo avec un OpenWindowedScreen() :(.
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: lire une vidéo sur un screen

Message par Ar-S »

Peux tu expliquer le "contexte" concernant l'affichage des vidéos dans ton jeu ?
Ce n'est que pour une cinématique ?

Quasiment tous les jeux actuels utilisent le format Bink, je me dis que ça pourrait t'être utile ? (je pense qu'il y a une version gratuite de dispo en affichant le logo)
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: lire une vidéo sur un screen

Message par blendman »

Ar-S a écrit :Peux tu expliquer le "contexte" concernant l'affichage des vidéos dans ton jeu ?
Ce n'est que pour une cinématique ?
disons que si déjà j'arrivai à utiliser les vidéo au moins pour les cinématiques ce serait pas mal :).
Dans l'absolu, ça aurait été top de charger une vidéo sur un sprite3D pour effectuer certaines choses, mais ça ne marche pas chez moi, même en mpg.
Quasiment tous les jeux actuels utilisent le format Bink, je me dis que ça pourrait t'être utile ? (je pense qu'il y a une version gratuite de dispo en affichant le logo)
Je connais bink, mais par contre, je ne sais pas comment l'utiliser avec le purebasic. Et puis, 7500 $... ça fait un peu cher et afficher un logo pendant tout le jeu, non merci :)
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: lire une vidéo sur un screen

Message par Ar-S »

C'est une grosse vidéo ?

Tu pourrais peut-être la décomposer (genre en 15 i/s) en fichier image et la transformer en sprite animé ?
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: lire une vidéo sur un screen () et openwindowedscreen()

Message par blendman »

heu, je préfèrerai quand même lire la vidéo en tant que vidéo, car sinon, ça va être très lourd !
Je risque d'avoir plusieurs vidéos de plusieurs minutes, donc, pas possible d'en faire des images.

Je ne comprends pas que ça ne marche pas même en mpg.

J'ai essayé de lire la vidéo sur un sprite (via RenderMovieFrame()), mais rien ne s'affiche. Y aurait-il un bug à ce niveau sous xp avec OpenWindowedScreen()?
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: lire une vidéo sur un screen () et openwindowedscreen()

Message par Ar-S »

Chez moi ce code fonctionne

Code : Tout sélectionner

Enumeration
  #WIN
  #WIN_GFX
  #SPRITECRAN
  #FILM
EndEnumeration

  


If InitSprite() = 0 Or InitMovie() = 0
  MessageRequester("Erreur", "Impossible d'ouvrir l'écran & l'environnement nécessaire aux sprites ou aux films !", 0)
  End
EndIf
  
If OpenWindow(#WIN, 0, 0, 500, 410, "Un écran dans une fenêtre...", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  ButtonGadget(1, 410, 165, 45, 20, "go")
  ButtonGadget(0, 410, 135, 45, 20, "Quitter")
  
  MovieName$="G:\test\MOV03835.MPG"
  LoadMovie(#FILM, MovieName$)
  Global Longueur.q = MovieLength(#FILM)

  ResizeMovie(#FILM, 0, 0, 400, 300)   
  
  
  If OpenWindowedScreen(WindowID(#WIN), 0, 0, 400, 400, 0, 0, 0)
    ; CreateSprite(#SPRITECRAN, 400, 300)
    ; 
    ; StartDrawing(SpriteOutput(#SPRITECRAN))
      ; Box(400,250,100,100,$FFCC00)
      ; 
    ; StopDrawing()  
    
  Else
    MessageRequester("Erreur", "Impossible d'ouvrir un écran dans la fenêtre!", 0)
    End
  EndIf
EndIf
 
direction = 2
; -----------------------------------------
;- Event Fenêtre Graphique
; -----------------------------------------

Repeat
  
  ; -----------------------------------------
  ;- Event Fenêtre
  ; -----------------------------------------
  Repeat
   
    Select  WindowEvent()
        
      Case #PB_Event_Gadget
        
        Select EventGadget()
            
          Case 1
            ;- lecture classique
            PlayMovie(#FILM, WindowID(#WIN))
            
            ;- tentative de linkage du film et du sprite 0 
            ; PlayMovie(#FILM, #PB_Movie_Rendered) ; Pas réussi à faire fonctionner
            ; RenderMovieFrame(#FILM, #SPRITECRAN )
            
        EndSelect
        
        If EventGadget() = #WIN
          End
        EndIf
        
      Case #PB_Event_CloseWindow
        End 
    EndSelect
  Until Event = 0
  
  
  
  Debug "Position : "+Str (MovieStatus(#FILM))
  If MovieStatus(#FILM) = Longueur ; Si le film est terminé on le decharge
    FreeMovie(#FILM)
    FlipBuffers()
    ClearScreen(RGB(0, 0, 0))
    DisplaySprite(#SPRITECRAN, 400, 400)
  EndIf
  
  
  
  Delay(1)
ForEver

Est-ce que ça te convient ou suis-je à coté de la plaque ?
(je vais partir bosser, je risque de te répondre tard)
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: lire une vidéo sur un screen () et openwindowedscreen()

Message par blendman »

salut

Je reviens sur ce sujet, car j'ai essayé de lancer une vidéo en pleine écran avec comme taille du screen la taille du desktop, et bien ça ne marche pas sur xp.. je ne sais pas du tout pourquoi.

une idée ?

Code : Tout sélectionner

InitMovie()
InitSprite()
InitKeyboard()
If ExamineDesktops() = 0
  End
EndIf
MovieName$ = OpenFileRequester("Choose the movie to play", "", "Movie/Audio files|*.avi;*.mpg;*.asf;*.mp3;*.wav|All Files|*.*", 0)

OpenScreen(DesktopWidth(0), DesktopHeight(0), 32, "test")
LoadMovie(0, MovieName$)
ResizeMovie(0,0,0,MovieWidth(0), MovieHeight(0))
PlayMovie(0,ScreenID())

Repeat
  ExamineKeyboard()
Until KeyboardPushed(#PB_Key_Escape) 
Mon écran est en 1680*1050.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: lire une vidéo sur un screen ()

Message par Backup »

chez moi ça marche de cette façon :

Code : Tout sélectionner

InitMovie()
InitSprite()
InitKeyboard()
Enumeration
    #window
    #movie    
EndEnumeration

If ExamineDesktops() = 0
    End
EndIf

MovieName$ = OpenFileRequester("Choose the movie to play", "", "Movie/Audio files|*.avi;*.mpg;*.asf;*.mp3;*.wav|All Files|*.*", 0)
if LoadMovie(#movie, MovieName$)
    ResizeMovie( #movie,0,0,desktopWidth(0), desktopHeight(0))
    
    OpenWindow(#window,0,0,DesktopWidth(0), DesktopHeight(0),"video",#PB_Window_BorderLess)
    OpenwindowedScreen(WindowId(#window),0,0,DesktopWidth(0), DesktopHeight(0),1,0,0)
    
    
    PlayMovie(#movie,windowID(#window))
    
    Repeat
        WaitWindowEvent(2)
        ExamineKeyboard()
    Until KeyboardPushed(#PB_Key_Escape)
    
    Else
    MessageRequester("erreur","le film n'a pas pu etre chargé" )
    
endif



; 
; EPb 





ne peux pas marcher sur un screen je crois a cause de :
PlayMovie(#Film, FenetreID)
pour utiliser un screen , il faut rendre sur un sprite ! ;)

Code : Tout sélectionner

RenderMovieFrame(#Film, SpriteID)
mais ça ne marche pas avec toutes les videos ;)

mon avis c'est que le mode screen (sans windowed) devrai disparaitre !
en environnement multitache, les fenetres sont reine ! alors autant les utiliser (sans bordures , si besoin ;) )
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: lire une vidéo sur un screen ()

Message par blendman »

Dobro a écrit : ne peux pas marcher sur un screen je crois a cause de :
PlayMovie(#Film, FenetreID)
pour utiliser un screen , il faut rendre sur un sprite ! ;)

Code : Tout sélectionner

RenderMovieFrame(#Film, SpriteID)
mais ça ne marche pas avec toutes les videos ;)
Merci Dobro pour tes informations ;).
je n'ai jamais réussi à rendre une vidéo sur un sprite, pourtant, j'ai essayé presque tous les codecs que j'avais ^^ (avi, xvid, divx, mpg...), je ne dois pas être doué, je vais ré-essayé de toutes façons.

Cela dit, ça devrait fonctionner en fullscreen, car ce qui est bizarre c'est que sur la doc il est noté :
Il est aussi possible de jouer un film en plein écran, il suffit d'utiliser le résultat de la commande ScreenID() comme 'WindowID'.
mon avis c'est que le mode screen (sans windowed) devrai disparaitre !
en environnement multitache, les fenetres sont reine ! alors autant les utiliser (sans bordures , si besoin ;) )
j'imagine que le mode screen doit avoir un intérêt :D.
Sur mon jeu par exemple, c'est beaucoup plus rapide en fullscreen qu'en mode fenêtrée en maximisé.
je n'ai pas testé sans bordure, mais je ne suis pas sûr que cela augmente les performances.

Donc, j'imagine que le mode openscreen doit être plus rapide (enfin, je suppose ^^).
Répondre