Début d'un lecteur de vidéos avec les commandes MCI

Programmation d'applications complexes
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Début d'un lecteur de vidéos avec les commandes MCI

Message par Chris »

Voilà le code d'un début de lecteur vidéo que j'ai fait avec les commandes MCI.
Il y a encore pas mal de bugs, certaines commandes s'emmêlent un peu les pinceaux, et ça plante, (pas trop fort), par moment.

J'ai surtout fait ça pour voir comment on utilisait les commandes MCI.

Le code contient trois fichiers, le titre du fichier se trouve au début de chaque code.

Code : Tout sélectionner

; Nom du fichier : Video2.pb
;
; But : Lecture de fichiers video et audio avec les commandes MCI
; Librairies utilisées : aucune
; Auteur : Chris (http://purebasic.hmt-forum.com/index.php)
;
; Certaines procédures MCI_ proviennent du fichier "MCI-Commands.pbi", qui
; se trouve dans le dossier "Includes" de jaPBe
;===========================================================================================
;
;- Raccourcis clavier
; PageUp :    Augmenter le Volume
; PageDown :  Diminuer le Volume
; Enter :     Lancer la vidéo
; Pause :     Mettre en pause
; Space :     Mode Plein Ecran/Fenêtre
; Home :      Remettre la video au début
; Delete :    Ejecter la video

IncludeFile "MCI_Procs.pb"
IncludeFile "VideoProcs2.pb"
;/

S_Width = GetSystemMetrics_(#SM_CXSCREEN)
S_Height = GetSystemMetrics_(#SM_CYSCREEN)

Open_Win_Command()

Repeat;{
  Select WindowEvent()
    Case 0
        Delay(20)

    Case #WM_KEYDOWN;{
      Select EventwParam()
        Case #VK_SPACE
          If MCI_GetStatus(0) = #MCI_Playing
            SetActiveWindow_(hCommand)
            keybd_event_(#VK_SPACE,0,0,0)
            keybd_event_(#VK_SPACE,0,#KEYEVENTF_KEYUP,0)
            Delay(10)
          EndIf
          
        Case #VK_DELETE
          EjectFilm(0)
          
        Case #VK_RETURN
          If IsPlay = 0 And MCI_GetStatus(0) = #MCI_Stopped
            MCI_Play(0) : IsPlay = 1
          ElseIf IsPlay = 1 And MCI_GetStatus(0) = #MCI_Playing
            StopFilm(0,1) : IsPlay = 0
          EndIf
          
        Case #VK_PAUSE
          PauseFilm(0)
          
        Case #VK_HOME
          MCI_SeekToStart(0)
          If IsPlay = 1
            MCI_Play(0)
          EndIf
      EndSelect;}
      
    Case #PB_EventMenu;{
      Select EventMenuID()
        Case #Btn_FullScreen
          If MCI_GetStatus(0) = #MCI_Playing
            FullScreen(0)
          EndIf
      EndSelect;}
      
    Case #PB_EventGadget;{
      Select EventGadgetID()
        Case #Btn_Close
          Quit = #True
          
        Case #Btn_Load
          Film$ = OpenFileRequester("Ouvrir une vidéo","Fichiers vidéo","Fichiers vidéo|*.wmv;*.avi;*.mpg|Tout type|*.*",0)
          If Film$
            If LoadFilm(Film$,0)
              hDis  = Info\Handle :W_Film = Info\Largeur : H_Film = Info\Hauteur
              T_10  = SetTimer_(hCommand, #T_10, 100, @TimerProc())
            EndIf
          EndIf
          
        Case #Btn_Play
          MCI_Play(0) : IsPlay = 1
          
        Case #Btn_Pause
          PauseFilm(0)
          
        Case #Btn_Stop
          StopFilm(0,1) : IsPlay = 0
          
        Case #Btn_FullScreen
          FullScreen(0)
          
        Case #Btn_Eject
          EjectFilm(0)
          
        Case #Trk_Bar_Seek
          SeekFilm()
          
      EndSelect;}
      
  EndSelect
Delay(1)
Until Quit;}
End

Code : Tout sélectionner

; Nom du fichier : VideoProcs2.pb
;
; But : Lecture de fichiers video et audio avec les commandes MCI
; Librairies utilisées : aucune
; Auteur : Chris (http://purebasic.hmt-forum.com/index.php)
;
; Certaines procédures MCI_ proviennent du fichier "MCI-Commands.pbi", qui
; se trouve dans le dossier "Includes" de jaPBe
;=================================================================================================
;
IncludeFile "VideoProcs2.pb.declare"

;{- Constantes
;/Constantes Window
Enumeration
  #Win_Command
  #Win_Display
EndEnumeration

;/ Constantes gadgets
Enumeration
  #Btn_FullScreen
  #Btn_Play
  #Btn_Pause
  #Btn_Stop
  #Btn_Load
  #Str_Title
  #Trk_Bar_Seek
  #ProgressBar_Length
  #Trk_Bar_Volume
  #Btn_Eject
  #Btn_Close
EndEnumeration

;/ StatusBar
Enumeration
  #Status
EndEnumeration

;/ Timers
Enumeration 1
  #T_10
  #T_300
EndEnumeration

#PBM_SETRANGE32   = #WM_USER + 6
#PBM_GETRANGE     = #WM_USER + 7
#PBM_SETBARCOLOR  = #WM_USER + 9
;}

;{- Structures
Structure FILM_INFO
  Handle.l
  Titre.s
  Largeur.l
  Hauteur.l
EndStructure
Global Info.FILM_INFO
;}

;{- Variables
;/ Variables globales
Global S_Width.w, S_Height.w, hCommand.l, hProg.l, hSeek.l, hVol.l, MoveTrackBar.b
Global KeySpace.b, IsPlay, Full, Etat, hDis, IsLoaded, MsgError$
Global DureeDefaut$, EcouleDefaut$, OldStyle

;/ Autres variables
DureeDefaut$ = "Durée : 00:00:00"
EcouleDefaut$ = "Ecoulé : 00:00:00"
;}

;{- Procedures
Procedure Open_Win_Command()                    ; Fenêtre de commandes
  If OpenWindow(#Win_Command, 265, 10, 480, 120,  #PB_Window_TitleBar , "")
    hCommand = WindowID(#Win_Command)
    
    If CreateStatusBar(#Status,hCommand)
      AddStatusBarField(235)
      AddStatusBarField(240)
    EndIf
    
    If CreateGadgetList(hCommand)
      ButtonGadget(#Btn_FullScreen, 5, 75, 65, 20, "Plein ecran")
      ButtonGadget(#Btn_Play, 75, 75, 100, 20, "Lecture")
      ButtonGadget(#Btn_Pause, 175, 75, 100, 20, "Pause")
      ButtonGadget(#Btn_Stop, 275, 75, 100, 20, "Stop")
      ButtonGadget(#Btn_Load, 415, 5, 55, 20, "Charger")
      StringGadget(#Str_Title, 5, 5, 370, 20, "", #PB_String_ReadOnly)
      hSeek = TrackBarGadget(#Trk_Bar_Seek, 0, 45, 380, 20, 0, 10)
      hProg =ProgressBarGadget(#ProgressBar_Length, 5, 30, 370, 10, 0, 10)
      hVol = TrackBarGadget(#Trk_Bar_Volume, 390, 0, 20, 95, 0, 1000, #PB_TrackBar_Vertical)
      ButtonGadget(#Btn_Eject, 415, 30, 55, 20, "Ejecter")
      ButtonGadget(#Btn_Close, 415, 75, 55, 20, "Quitter")
    EndIf
    AddKeyboardShortcut(#Win_Command, #PB_Shortcut_Space, #Btn_FullScreen)
  EndIf
  StatusBarText(#Status, 0, DureeDefaut$)
  StatusBarText(#Status, 1, EcouleDefaut$)
EndProcedure

Procedure TimerProc(hwnd.l, uMsg.l, idEvent.l, dwTime.l)
  Select uMsg
    Case #WM_TIMER
      Select idEvent
        Case #T_10
          StatusBarText(#Status, 0, "Durée : " + MCI_TimeString(MCI_GetLength(0)))
          StatusBarText(#Status, 1, "Ecoulé : " + MCI_TimeString(MCI_GetPosition(0)))
          MCI_SetVolume(0,GetGadgetState(#Trk_Bar_Volume))
          SetGadgetState(#Trk_Bar_Seek,MCI_GetPosition(0))
          SetGadgetState(#ProgressBar_Length, MCI_GetPosition(0))
          
          If GetAsyncKeyState_(#VK_PRIOR)
            SetGadgetState(#Trk_Bar_Volume, GetGadgetState(#Trk_Bar_Volume)+50)
          EndIf
          If GetAsyncKeyState_(#VK_NEXT)
            SetGadgetState(#Trk_Bar_Volume, GetGadgetState(#Trk_Bar_Volume)-50)
          EndIf
      EndSelect
  EndSelect
EndProcedure

Procedure ShowTaskBar(Bar.b) ; 0 cache la barre de taches, 1 la montre
  Result = ShowWindow_(FindWindow_("Shell_TrayWnd", #Null), Bar)
  ProcedureReturn Result
EndProcedure

Procedure LoadFilm(Movie$, IdFilm)
  If MCI_Load(0,Movie$)
    IsLoaded = 1
    MCI_SetTimeMSFormat(IdFilm)
    
    t$ = MCI_GetRect(IdFilm)
    Info\Handle = MCI_GetHandle(IdFilm)
    Info\Largeur = Val(StringField(t$,1," "))
    Info\Hauteur = Val(StringField(t$,2," "))
    Info\Titre = Left(GetFilePart(Movie$), Len(GetFilePart(Movie$))-Len(GetExtensionPart(Movie$))-1)
    
    MCI_SetCaption(IdFilm, Info\Titre)
    MoveWindow_(Info\Handle, S_Width/2-Info\Largeur/2, S_Height/2-Info\Hauteur/2,Info\Largeur, Info\Hauteur,#True)
    
    SendMessage_(hProg,#PBM_SETRANGE32,0,MCI_GetLength(IdFilm))
    SendMessage_(hSeek, #TBM_SETRANGEMAX,#True,MCI_GetLength(IdFilm))
    SetGadgetState(#Trk_Bar_Volume,MCI_GetVolume(IdFilm))
    SetGadgetText(#Str_Title,Info\Titre)
    
    ProcedureReturn #True
  Else
    IsLoaded = 0
    MessageRequester("Erreur de chargement","Chargement du fichier impossible")
    ProcedureReturn #False
  EndIf
EndProcedure

Procedure PauseFilm(IdFilm)
  If MCI_GetStatus(IdFilm) = #MCI_Paused
    SetGadgetText(#Btn_Pause, "Pause")
    MCI_Resume(IdFilm)
  ElseIf MCI_GetStatus(IdFilm) = #MCI_Playing
    SetGadgetText(#Btn_Pause, "Reprise")
    MCI_Pause(IdFilm)
  EndIf
EndProcedure

Procedure EjectFilm(IdFilm)
  If MCI_Free(IdFilm) = 0
    KillTimer_(hCommand,#T_10)
    KillTimer_(hCommand,#T_300)
    
    SetGadgetText(#Str_Title,"")
    SetGadgetState(#Trk_Bar_Volume,0)
    SetGadgetState(#ProgressBar_Length,0)
    SetGadgetState(#Trk_Bar_Seek,0)
    
    IsLoaded = 0
    
    StatusBarText(#Status, 0, DureeDefaut$)
    StatusBarText(#Status, 1, EcouleDefaut$)
  EndIf
EndProcedure

Procedure StopFilm(IdFilm, FlagStop)
  If FlagStop = 1
    MCI_SeekToStart(IdFilm)
    MCI_Stop(IdFilm)
  ElseIf FlagStop = 0
    MCI_Stop(IdFilm)
  EndIf
EndProcedure

Procedure SeekFilm()
  If IsPlay = 0
    MCI_ShowWindow(0)
  EndIf
  
  If GetAsyncKeyState_(#VK_LBUTTON)
    NoPlay = 1
    If IsPlay = 1 And MCI_GetStatus(IdFilm) <> #MCI_Stopped
      MCI_Stop(0)
    EndIf
    
    MCI_Seek(0, GetGadgetState(#Trk_Bar_Seek))
  Else
    NoPlay = 0
  EndIf
  
  If IsPlay = 1 And NoPlay = 0
    MCI_Play(0)
  EndIf
EndProcedure

Procedure FullScreen(IdFilm)
  If Full = 0
    ;HideWindow(hCommand,1)
    MCI_Full(IdFilm)
    Full = 1
  ElseIf Full = 1
    MCI_Restore(IdFilm)
    ;HideWindow(hCommand,0)
    Full = 0
  EndIf
EndProcedure
;}

Code : Tout sélectionner

; Nom du fichier : MCI_Procs.pb
;
; But : Lecture de fichiers video et audio avec les commandes MCI
; Librairies utilisées : aucune
; Auteur : Chris (http://purebasic.hmt-forum.com/index.php)
;
; Certaines procédures MCI_ proviennent du fichier "MCI-Commands.pbi", qui
; se trouve dans le dossier "Includes" de jaPBe
;=================================================================================================
;

;Info: MCI-Commands (to play mp3s, and so on)

Enumeration 0
  #MCI_Unknown
  #MCI_Stopped
  #MCI_Playing
  #MCI_Paused
EndEnumeration
Enumeration
  #Forward
  #Backward
EndEnumeration

; Commandes d'état de la vidéo
Procedure MCI_GetStatus(Nb)   ; Renvoie l'état de la vidéo: En pause, en lecture, ou stoppée
  Result=#MCI_Unknown
  a$=Space(#MAX_PATH)
  i=mciSendString_("status MCI_"+Str(Nb)+" mode",@a$,#MAX_PATH,0)
  If i=0
    Select a$
      Case "stopped":Result=#MCI_Stopped
      Case "playing":Result=#MCI_Playing
      Case "paused":Result=#MCI_Paused
    EndSelect
  EndIf
  ProcedureReturn Result
EndProcedure
Procedure MCI_GetSpeed(Nb)    ; Renvoie la vitesse de lecture
  a$=Space(#MAX_PATH)
  i=mciSendString_("status MCI_"+Str(Nb)+" Speed",@a$,#MAX_PATH,0)
  ProcedureReturn Val(a$)
EndProcedure
Procedure MCI_GetLength(Nb)   ; Renvoie la longueur de la vidéo
  a$=Space(#MAX_PATH)
  i=mciSendString_("status MCI_"+Str(Nb)+" length",@a$,#MAX_PATH,0)
  ProcedureReturn Val(a$)
EndProcedure
Procedure MCI_GetPosition(Nb) ; Renvoie la position du film
  a$=Space(#MAX_PATH)
  i=mciSendString_("status MCI_"+Str(Nb)+" position",@a$,#MAX_PATH,0)
  ProcedureReturn Val(a$)
EndProcedure
Procedure MCI_GetVolume(Nb)   ; Renvoie le volume
  a$=Space(#MAX_PATH)
  i=mciSendString_("status MCI_"+Str(Nb)+" volume",@a$,#MAX_PATH,0)
  ProcedureReturn Val(a$)
EndProcedure
Procedure.s MCI_GetRect(Nb)   ; Renvoie la taille du film
  a$=Space(#MAX_PATH)
  i=mciSendString_("where MCI_"+Str(Nb)+" source",@a$,#MAX_PATH,0)
  ProcedureReturn StringField(a$,3," ")+" "+StringField(a$,4," ")
EndProcedure
Procedure MCI_GetHandle(Nb)   ; Renvoie le handle de la fenêtre d'affichage
  a$=Space(#MAX_PATH)
  i=mciSendString_("status MCI_"+Str(Nb)+" window handle",@a$,#MAX_PATH,0)
  ProcedureReturn Val(a$)
EndProcedure

; Commandes de contrôle de la vidéo
Procedure MCI_Load(Nb,file.s)
  i=mciSendString_("OPEN "+Chr(34)+file+Chr(34)+" Type MPEGVIDEO ALIAS MCI_"+Str(Nb),0,0,0)
  If i=0
    ProcedureReturn #True
  Else
    ProcedureReturn #False
  EndIf
EndProcedure
Procedure MCI_Play(Nb)
  i=mciSendString_("play MCI_"+Str(Nb),0,0,0)
  ProcedureReturn i
EndProcedure
Procedure MCI_PlayStart(Nb)
  i=mciSendString_("play MCI_"+Str(Nb)+" from "+Str(0),0,0,0)
  ProcedureReturn i
EndProcedure
Procedure MCI_PlayPart(Nb,start,endPos)
  i=mciSendString_("play MCI_"+Str(Nb)+" from "+Str(start)+" to "+Str(endPos),0,0,0)
  ProcedureReturn i
EndProcedure
Procedure MCI_Pause(Nb)
  i=mciSendString_("pause MCI_"+Str(Nb),0,0,0)
  ProcedureReturn i
EndProcedure
Procedure MCI_Resume(Nb)
  i=mciSendString_("resume MCI_"+Str(Nb),0,0,0)
  ProcedureReturn i
EndProcedure
Procedure MCI_Stop(Nb)
  i=mciSendString_("stop MCI_"+Str(Nb),0,0,0)
  ProcedureReturn i
EndProcedure
Procedure MCI_Free(Nb)
  i=mciSendString_("close MCI_"+Str(Nb),0,0,0)
  ProcedureReturn i
EndProcedure

Procedure MCI_SetVolume(Nb,volume)
  i=mciSendString_("SetAudio MCI_"+Str(Nb)+" volume to "+Str(volume),0,0,0)
  ProcedureReturn i
EndProcedure
Procedure MCI_SetSpeed(Nb,Tempo)
  i=mciSendString_("set MCI_"+Str(Nb)+" Speed "+Str(Tempo),0,0,0)
  ProcedureReturn i
EndProcedure
Procedure MCI_SetTimeMSFormat(Nb)
  i=mciSendString_("set MCI_"+Str(Nb)+" time format milliseconds",0,0,0)
  ProcedureReturn i
EndProcedure
Procedure MCI_SetCaption(Nb, Caption$)
  i=mciSendString_("Window MCI_"+Str(Nb)+" text "+Chr(34)+Caption$+Chr(34),0,0,0)
  ProcedureReturn i
EndProcedure

Procedure MCI_Seek(Nb,pos)
  i=mciSendString_("Seek MCI_"+Str(Nb)+" to "+Str(pos),0,0,0)
  ProcedureReturn i
EndProcedure
Procedure MCI_SeekToStart(Nb)
  i=mciSendString_("Seek MCI_"+Str(Nb)+" to start",0,0,0)
  ProcedureReturn i
EndProcedure
Procedure MCI_SeekToEnd(Nb)
  i=mciSendString_("Seek MCI_"+Str(Nb)+" to end",0,0,0)
  ProcedureReturn i
EndProcedure
Procedure MCI_SeekTo(Nb, pos)
  i=mciSendString_("play MCI_"+Str(Nb)+" from "+Str(pos),0,0,0)
  ProcedureReturn i
EndProcedure

Procedure MCI_Parent(Nb, Hnd)
  i=mciSendString_("Window MCI_"+Str(Nb)+" handle "+Str(Hnd),0,0,0)
  ProcedureReturn i
EndProcedure
Procedure MCI_Full(Nb)
  i=mciSendString_("play MCI_"+Str(Nb)+" fullscreen ",0,0,0)
  ProcedureReturn i
EndProcedure
Procedure MCI_Restore(Nb)
  i=mciSendString_("play MCI_"+Str(Nb)+" window ",0,0,0)
  ProcedureReturn i
EndProcedure
  
Procedure MCI_Step(Nb,NumFrames,Dir)
  If Dir = #Forward ; en avant
    i=mciSendString_("step MCI_"+Str(Nb)+" by "+Str(NumFrames),0,0,0)
  ElseIf Dir = #Backward ; en arrière
    i=mciSendString_("step MCI_"+Str(Nb)+" by "+Str(NumFrames)+" reverse",0,0,0)
  EndIf
  ProcedureReturn i
EndProcedure

Procedure.s MCI_TimeString(time)
  time/1000
  sek=time%60:time/60
  min=time%60:time/60
  ProcedureReturn RSet(Str(time),2,"0")+":"+RSet(Str(min),2,"0")+":"+RSet(Str(sek),2,"0")
EndProcedure
Procedure MCI_ShowWindow(Nb)
  i=mciSendString_("Window MCI_"+Str(Nb)+" state show ",0,0,0)
  ProcedureReturn i
EndProcedure
Dernière modification par Chris le mar. 14/déc./2004 12:43, modifié 2 fois.
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Tout le monde s'en fout, on dirait, de mon petit lecteur :cry:

#nervous #pendu
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

moi je viens d'essayer et je le trouve super, ya tout ce ki faut :wink:
par contre mon processeur est à 100% avec ce programme et environ à
75% avec mediaplayer :? pas grave.
en tout cas c'est vachement didactique ton source. très propre bravo !
Image
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Merci Flype :wink:

Moi, c'est pareil, le proc est à 100%

J'ai surtout fait ça pour essayer de comprendre au maximum les commandes MCI.
Il y a certainement moyen de faire mieux pour l'occupation du processeur, mais je ne sais pas trop comment.

L'interêt de ces commandes, c'est surtout qu'elles sont simples à utiliser, et qu'elle permettent de lire à peu près tous les médias.

Parce qu'il faut bien l'avouer, les commandes de Pure sont un peu pauvres dès que les fichiers sont compressés. (comme les mp3, par exemple)
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Message par Thyphoon »

Tout le monde s'en fout, on dirait, de mon petit lecteur
Non, non moi je suis ça avec interet ...car j'avais fait un petit lecteur "sécurisé" pour jouer des videos dans des espaces publiques avec les commandes du pure.... et j'avais quelques soucies avec certain format... Donc ça m'interesse beaucoup :P
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Solution du problème de conso CPU, donné par Fred dans la rubrique "Débutants", il faut mettre un Delay(x) dans la boucle.

J'ai essayé avec 1, et avec 20, la conso CPU passe de 100% à 12 %
Par contre, avec 20, on attends un certain temps avant que le fenêtre du panneau de commande ne s'affiche.

J'ai édité le post, tout en haut, pour rajouter le Delay()
Si quelqu'un peut me dire ce que ça donne chez lui

MicroMou peut aller se rhabiller, je suis largement en dessous du WindowMediaPlayer :P

Moi, je dis "Vive PureBasic" :D
Fred
Site Admin
Messages : 2808
Inscription : mer. 21/janv./2004 11:03

Message par Fred »

Le delay(1) n'est pas bien placé. Il doit etre dans le "Case 0" de ton select WindowEvent() car si il y a plusieurs evenements dans la file d'attente, tu vas mettre 20 ms à pour passer de l'un à l'autre. En d'autre termes, il ne faut attendre (delay()) que s'il n'y a pas d'évènements à traiter.
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

En clair, il faut faire

Code : Tout sélectionner

    Select WindowEvent()
      Case 0
        Delay(1)
      Case #WM_KEYDOWN;{
....
???

Je sais, je suis c.., mais je me soigne :lol:
Fred
Site Admin
Messages : 2808
Inscription : mer. 21/janv./2004 11:03

Message par Fred »

Voila, c'est ca. Essaie avec Delay(20), tu ne devrais plus avoir le probleme de l'affichage.
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Nickel!!!

J'édite tout de suite le code au début du post

Merci :wink:
Pingtix
Messages : 159
Inscription : mer. 03/nov./2004 15:30

Mélanger MCI et lib Movie

Message par Pingtix »

Si je veux utiliser une commande MCI dans mon programme pour trouver le nombre de frames ou la frame en cours, je suis oubligé de tout passer en MCI ou je peux toujours utiliser la lib Movie pour le reste ?
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Je ne pense pas que la lib Movie soit compatible. En fait, je n'ai même jamais essayé
Pingtix
Messages : 159
Inscription : mer. 03/nov./2004 15:30

Message par Pingtix »

A première vue elle n'est pas compatible...
Ca veut dire BEAUCOUP de boulot de perspective pour un simple problème de codec... (pas possible de récupérer la longueur d'une video en wma, mov
Ya un moyen de contourner le problème sans passer par l' MCI ? (on sait jamais)
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

C'est pas si compliqué, finalement, une fois que tu as compris comment ça fonctionne.

C'est vrai qu'au départ, ça peut paraître un peu compliqué, mais une fois que tu as compris la construction de la chaine, ça roule tout seul.

Et si c'est pour lire uniquement du film, tu peux directement utiliser le fichier de commandes qui est dans mon code.

Avant de te lancer la-dedans, tu l'as essayé, mon lecteur, pour voir si il fonctionnait chez toi?
Pingtix
Messages : 159
Inscription : mer. 03/nov./2004 15:30

Message par Pingtix »

La réponse qui casse l'ambiance: il marche pas. :cry:
Il aime pas le IncludeFile "VideoProcs2.pb.declare" vu que je n'ai pas le fichier. Je le trouve où ?
C'est peut etre évident, mais moi je suis un débutant...

J'ai réussi a lire une video en piquant des procédures dans un autre code, mais je n'ai pas complètement compri ce que j'ai fait pour autant. Je vais essayer d'en piquer dans le tien alors :wink:
Répondre