Page 1 sur 2
lire une vidéo sur un screen ()
Publié : ven. 30/sept./2011 11:35
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
Re: lire une vidéo sur un screen
Publié : ven. 30/sept./2011 12:25
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)
Re: lire une vidéo sur un screen
Publié : ven. 30/sept./2011 12:43
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

Re: lire une vidéo sur un screen
Publié : ven. 28/oct./2011 10:34
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
Re: lire une vidéo sur un screen
Publié : ven. 28/oct./2011 14:11
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é.
Re: lire une vidéo sur un screen
Publié : sam. 29/oct./2011 10:03
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
Re: lire une vidéo sur un screen
Publié : mar. 01/nov./2011 12:27
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()

.
Re: lire une vidéo sur un screen
Publié : mar. 01/nov./2011 12:43
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)
Re: lire une vidéo sur un screen
Publié : mar. 01/nov./2011 13:19
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

Re: lire une vidéo sur un screen
Publié : mar. 01/nov./2011 14:24
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é ?
Re: lire une vidéo sur un screen () et openwindowedscreen()
Publié : mer. 02/nov./2011 10:41
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()?
Re: lire une vidéo sur un screen () et openwindowedscreen()
Publié : mer. 02/nov./2011 13:22
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)
Re: lire une vidéo sur un screen () et openwindowedscreen()
Publié : dim. 29/janv./2012 14:04
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.
Re: lire une vidéo sur un screen ()
Publié : dim. 29/janv./2012 16:07
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 !
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

)
Re: lire une vidéo sur un screen ()
Publié : dim. 29/janv./2012 17:16
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 !
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

.
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 ^^).