Page 1 sur 2

VLCPlayer

Publié : lun. 11/avr./2011 17:57
par bombseb
Bonjour,

J'essaye de faire marcher un prog trouvé ici
Mais impossible....
J'ai d'abord commencé par remplacer les files$ envoyés en paramètre par des @Files$ (apparement ces fonctions prennent désormais un pointeur en paramètre)
Ensuite il n'arrivait pas à me trouver la libvlccore.dll
Alors dans les options du compilateur -> compiler / executer -> Répertoire courant : j'ai mis le répertoire de vlc (pas génial comme solution, si vous avez mieux dites le moi)
Maintenant ca compil, mais quand je lance le prog il me dit "Accès mémoire invalide" sur cette ligne :

Code : Tout sélectionner

*inst = CallFunction(0, "libvlc_new", 4, @vlc_args(), @ex)

Voici le code :

Code : Tout sélectionner

Global *base = OpenLibrary(0, "C:\Program Files\VideoLAN\VLC\libvlc.dll")
Global file$

OpenWindow(1, 0, 0, 60, 20, "PureBasic VLC dll", #PB_Window_SystemMenu|#PB_Window_ScreenCentered|#WS_CLIPCHILDREN|#PB_Window_SizeGadget| #PB_Window_Maximize )
ScrollBarGadget(0, 40, 0, 0, 20, 0, 1000, 1)
ButtonGadget(1, 0, 0, 20, 20, "F") ; file
ButtonGadget(2, 20, 0, 20, 20, ">") ; play
SetGadgetText(2, "||")
OpenWindow(0, 0, 0, 60, 0, "", #PB_Window_BorderLess)
SetWindowColor(0, RGB(0,0,0))
SetParent_(WindowID(0), WindowID(1))


Global ex.l

If *base
    Dim vlc_args.s(8)
    vlc_args(0) = "-I"
    vlc_args(1) = "dummy"
    vlc_args(2) = "--ignore-config"
    vlc_args(3) = "--plugin-path=C:\\Program Files\\VideoLAN\\VLC\\plugins\\"
    CallFunction(0, "libvlc_exception_init", @ex)
    
    *inst = CallFunction(0, "libvlc_new", 4, @vlc_args(), @ex)
    ; 0.8.6 method
    If Len(file$)=0
       file$ = OpenFileRequester("Select media file", "", "*.*", 0)
       If Len(file$)=0
          End
       EndIf   
    EndIf
    item = CallFunction(0, "libvlc_playlist_add", *inst, @file$, #Null, @ex)
    CallFunction(0, "libvlc_playlist_play", *inst, item, 0, #Null, @ex)
    drawable = WindowID(0)
    CallFunction(0, "libvlc_video_set_parent", *inst, drawable, @ex)     
    While wevent<>#PB_Event_CloseWindow
        wevent = WindowEvent()
        If EventWindow()=0
           SetActiveWindow(1)
        EndIf
        If wevent = #PB_Event_Gadget
           Select EventGadget()
              Case 0 ; slider
                 procent.l = GetGadgetState(0)     
                 CallFunction(0, "libvlc_media_player_set_time", *mp, stukje.q*procent, @ex)
              Case 1 ; file
                 file$ = OpenFileRequester("Select media file", "", "*.*", 0)
                 If Len(file$)
                    CallFunction(0, "libvlc_playlist_stop", *inst, @ex)
                    CallFunction(0, "libvlc_playlist_clear", *inst, @ex)
                    item = CallFunction(0, "libvlc_playlist_add", *inst, @file$, #Null, @ex)
                    CallFunction(0, "libvlc_playlist_play", *inst, item, 0, #Null, @ex)                   
                    Delay(100)
                 EndIf
              Case 2 ; play / pause
                 If GetGadgetText(2) = ">"
                    CallFunction(0, "libvlc_media_player_play", *mp, @ex)
                    SetGadgetText(2, "||")                 
                 Else
                    CallFunction(0, "libvlc_media_player_pause", *mp, @ex)
                    SetGadgetText(2, ">")
                 EndIf
           EndSelect
        EndIf
        If wevent=#PB_Event_SizeWindow
           If IsGadget(0)
              ResizeGadget(0, 40, WindowHeight(1)-20, WindowWidth(1)-40, 20)
           EndIf
           If IsGadget(1)
              ResizeGadget(1, 0, WindowHeight(1)-20, 20, 20)
           EndIf
           If IsGadget(2)
              ResizeGadget(2, 20, WindowHeight(1)-20, 20, 20)
           EndIf
           ResizeWindow(0, 0, 0, WindowWidth(1), WindowHeight(1)-20)
        EndIf
        Delay(10)
        *mp = CallFunction(0, "libvlc_playlist_get_media_player", *inst, @ex)
        state = CallFunction(0, "libvlc_media_player_get_state", *mp, @ex)           
        Select state
           Case 0 ; libvlc_NothingSpecial    
           Case 1 ; libvlc_Opening    
           Case 2 ; libvlc_Buffering    
           Case 3 ; libvlc_Playing    
              osizex = CallFunction(0, "libvlc_video_get_width", *mp, @ex)
              osizey = CallFunction(0, "libvlc_video_get_height", *mp, @ex)
              If sizex<>osizex And sizey<>osizey
                 sizex=osizex
                 sizey=osizey
                 ResizeWindow(0, #PB_Ignore, #PB_Ignore, sizex, sizey)
                 ResizeWindow(1, #PB_Ignore, #PB_Ignore, sizex, sizey+20)
                 length.q = CallFunction(0, "libvlc_media_player_get_length", *mp, @ex)                 
                 stukje.q = length.q / 1000
                 If length=0
                    DisableGadget(0, 1)
                 Else
                    DisableGadget(0, 0)
                 EndIf
                 SetGadgetText(2, "||")                             
              EndIf   
              curpos.q = CallFunction(0, "libvlc_media_player_get_time", *mp, @ex)
              If curpos.q<>curposo.q
                 curposo.q = curpos.q
                 stukje.q = length.q / 1000
                 If stukje>0 And curpos>0
                    percentage.l = curpos/stukje
                    SetGadgetState(0, percentage)
                 EndIf
              EndIf
           Case 4 ; libvlc_Paused    
           Case 5 ; libvlc_Stopped    
                 DisableGadget(2, 0)
           Case 6 ; libvlc_Forward    
           Case 7 ; libvlc_Backward    
           Case 8 ; libvlc_Ended    
           Case 9 ; libvlc_Error
        EndSelect   
    Wend
    If *mp
       CallFunction(0, "libvlc_media_player_stop", *mp, @ex)
       CallFunction(0, "libvlc_media_player_release", *mp)
    EndIf
    CallFunction(0, "libvlc_release", *inst)
    CloseLibrary(0)
EndIf
CloseLibrary(0)
End
Merci d'avance pour votre aide parceque là je pète un cable.... :oops:

PS : J'ai même rajouté le répertoire de vlc dans la variable d'environnement "Path"

Re: VLCPlayer

Publié : lun. 02/mai/2011 7:33
par Thyphoon
si jamais tu y arrives fait moi signe ... ça fait longtemps que je cherche la possibilité d'intégrer a purebasic un bon lecteur de video ... :P

Re: VLCPlayer

Publié : mer. 25/mai/2011 10:49
par bombseb
désolé, j'ai laissé tombé.... j'ai regardé du coté de directshow, mais c'est je suis resté bloqué sur un truc...

Re: VLCPlayer

Publié : mer. 25/mai/2011 11:27
par Thyphoon
bombseb a écrit :désolé, j'ai laissé tombé.... j'ai regardé du coté de directshow, mais c'est je suis resté bloqué sur un truc...
Ok ... Bon courage alors ! :)

Re: VLCPlayer

Publié : mer. 25/mai/2011 11:43
par G-Rom
copie les dll dans le dossier compiler.

Remplace CallFunction par CallCFunction et ca marche ;)

Code : Tout sélectionner

Global *base = OpenLibrary(0, "C:\Program Files\VideoLAN\VLC\libvlc.dll")
Global file$
Debug *base
OpenWindow(1, 0, 0, 60, 20, "PureBasic VLC dll", #PB_Window_SystemMenu|#PB_Window_ScreenCentered|#WS_CLIPCHILDREN|#PB_Window_SizeGadget| #PB_Window_Maximize )
ScrollBarGadget(0, 40, 0, 0, 20, 0, 1000, 1)
ButtonGadget(1, 0, 0, 20, 20, "F") ; file
ButtonGadget(2, 20, 0, 20, 20, ">") ; play
SetGadgetText(2, "||")
OpenWindow(0, 0, 0, 60, 0, "", #PB_Window_BorderLess)
SetWindowColor(0, RGB(0,0,0))
SetParent_(WindowID(0), WindowID(1))


Global ex.l

If *base
    Dim vlc_args.s(8)
    vlc_args(0) = "-I"
    vlc_args(1) = "dummy"
    vlc_args(2) = "--ignore-config"
    vlc_args(3) = "--plugin-path=C:\\Program Files\\VideoLAN\\VLC\\plugins\\"
    CallCFunction(0, "libvlc_exception_init", @ex)
    
    *inst = CallCFunction(0, "libvlc_new", 4, @vlc_args(), @ex)
    ; 0.8.6 method
    If Len(file$)=0
       file$ = OpenFileRequester("Select media file", "", "*.*", 0)
       If Len(file$)=0
          End
       EndIf   
    EndIf
    item = CallCFunction(0, "libvlc_playlist_add", *inst, @file$, #Null, @ex)
    CallCFunction(0, "libvlc_playlist_play", *inst, item, 0, #Null, @ex)
    drawable = WindowID(0)
    CallCFunction(0, "libvlc_video_set_parent", *inst, drawable, @ex)     
    While wevent<>#PB_Event_CloseWindow
        wevent = WindowEvent()
        If EventWindow()=0
           SetActiveWindow(1)
        EndIf
        If wevent = #PB_Event_Gadget
           Select EventGadget()
              Case 0 ; slider
                 procent.l = GetGadgetState(0)     
                 CallCFunction(0, "libvlc_media_player_set_time", *mp, stukje.q*procent, @ex)
              Case 1 ; file
                 file$ = OpenFileRequester("Select media file", "", "*.*", 0)
                 If Len(file$)
                    CallCFunction(0, "libvlc_playlist_stop", *inst, @ex)
                    CallCFunction(0, "libvlc_playlist_clear", *inst, @ex)
                    item = CallCFunction(0, "libvlc_playlist_add", *inst, @file$, #Null, @ex)
                    CallCFunction(0, "libvlc_playlist_play", *inst, item, 0, #Null, @ex)                   
                    Delay(100)
                 EndIf
              Case 2 ; play / pause
                 If GetGadgetText(2) = ">"
                    CallCFunction(0, "libvlc_media_player_play", *mp, @ex)
                    SetGadgetText(2, "||")                 
                 Else
                    CallCFunction(0, "libvlc_media_player_pause", *mp, @ex)
                    SetGadgetText(2, ">")
                 EndIf
           EndSelect
        EndIf
        If wevent=#PB_Event_SizeWindow
           If IsGadget(0)
              ResizeGadget(0, 40, WindowHeight(1)-20, WindowWidth(1)-40, 20)
           EndIf
           If IsGadget(1)
              ResizeGadget(1, 0, WindowHeight(1)-20, 20, 20)
           EndIf
           If IsGadget(2)
              ResizeGadget(2, 20, WindowHeight(1)-20, 20, 20)
           EndIf
           ResizeWindow(0, 0, 0, WindowWidth(1), WindowHeight(1)-20)
        EndIf
        Delay(10)
        *mp = CallCFunction(0, "libvlc_playlist_get_media_player", *inst, @ex)
        state = CallCFunction(0, "libvlc_media_player_get_state", *mp, @ex)           
        Select state
           Case 0 ; libvlc_NothingSpecial    
           Case 1 ; libvlc_Opening    
           Case 2 ; libvlc_Buffering    
           Case 3 ; libvlc_Playing    
              osizex = CallCFunction(0, "libvlc_video_get_width", *mp, @ex)
              osizey = CallCFunction(0, "libvlc_video_get_height", *mp, @ex)
              If sizex<>osizex And sizey<>osizey
                 sizex=osizex
                 sizey=osizey
                 ResizeWindow(0, #PB_Ignore, #PB_Ignore, sizex, sizey)
                 ResizeWindow(1, #PB_Ignore, #PB_Ignore, sizex, sizey+20)
                 length.q = CallCFunction(0, "libvlc_media_player_get_length", *mp, @ex)                 
                 stukje.q = length.q / 1000
                 If length=0
                    DisableGadget(0, 1)
                 Else
                    DisableGadget(0, 0)
                 EndIf
                 SetGadgetText(2, "||")                             
              EndIf   
              curpos.q = CallCFunction(0, "libvlc_media_player_get_time", *mp, @ex)
              If curpos.q<>curposo.q
                 curposo.q = curpos.q
                 stukje.q = length.q / 1000
                 If stukje>0 And curpos>0
                    percentage.l = curpos/stukje
                    SetGadgetState(0, percentage)
                 EndIf
              EndIf
           Case 4 ; libvlc_Paused    
           Case 5 ; libvlc_Stopped    
                 DisableGadget(2, 0)
           Case 6 ; libvlc_Forward    
           Case 7 ; libvlc_Backward    
           Case 8 ; libvlc_Ended    
           Case 9 ; libvlc_Error
        EndSelect   
    Wend
    If *mp
       CallCFunction(0, "libvlc_media_player_stop", *mp, @ex)
       CallCFunction(0, "libvlc_media_player_release", *mp)
    EndIf
    CallCFunction(0, "libvlc_release", *inst)
    CloseLibrary(0)
EndIf
CloseLibrary(0)
End

je te conseil les prototypes pour importé les fonctions.
@+

Re: VLCPlayer

Publié : mar. 31/mai/2011 19:00
par anissa
@G-Rom

Code : Tout sélectionner

Global *base = OpenLibrary(0, "C:\Program Files\VideoLAN\VLC\libvlc.dll")
Global file$
Debug *base
OpenWindow(1, 0, 0, 60, 20, "PureBasic VLC dll", #PB_Window_SystemMenu|#PB_Window_ScreenCentered|#WS_CLIPCHILDREN|#PB_Window_SizeGadget| #PB_Window_Maximize )
ScrollBarGadget(0, 40, 0, 0, 20, 0, 1000, 1)
ButtonGadget(1, 0, 0, 20, 20, "F") ; file
ButtonGadget(2, 20, 0, 20, 20, ">") ; play
SetGadgetText(2, "||")
OpenWindow(0, 0, 0, 60, 0, "", #PB_Window_BorderLess)
SetWindowColor(0, RGB(0,0,0))
SetParent_(WindowID(0), WindowID(1))


Global ex.l

If *base
    Dim vlc_args.s(8)
    vlc_args(0) = "-I"
    vlc_args(1) = "dummy"
    vlc_args(2) = "--ignore-config"
    vlc_args(3) = "--plugin-path=C:\\Program Files\\VideoLAN\\VLC\\plugins\\"
    CallCFunction(0, "libvlc_exception_init", @ex)
   
    *inst = CallCFunction(0, "libvlc_new", 4, @vlc_args(), @ex)
    ; 0.8.6 method
    If Len(file$)=0
       file$ = OpenFileRequester("Select media file", "", "*.*", 0)
       If Len(file$)=0
          End
       EndIf   
    EndIf
    item = CallCFunction(0, "libvlc_playlist_add", *inst, @file$, #Null, @ex)
    CallCFunction(0, "libvlc_playlist_play", *inst, item, 0, #Null, @ex)
    drawable = WindowID(0)
    CallCFunction(0, "libvlc_video_set_parent", *inst, drawable, @ex)     
    While wevent<>#PB_Event_CloseWindow
        wevent = WindowEvent()
        If EventWindow()=0
           SetActiveWindow(1)
        EndIf
        If wevent = #PB_Event_Gadget
           Select EventGadget()
              Case 0 ; slider
                 procent.l = GetGadgetState(0)     
                 CallCFunction(0, "libvlc_media_player_set_time", *mp, stukje.q*procent, @ex)
              Case 1 ; file
                 file$ = OpenFileRequester("Select media file", "", "*.*", 0)
                 If Len(file$)
                    CallCFunction(0, "libvlc_playlist_stop", *inst, @ex)
                    CallCFunction(0, "libvlc_playlist_clear", *inst, @ex)
                    item = CallCFunction(0, "libvlc_playlist_add", *inst, @file$, #Null, @ex)
                    CallCFunction(0, "libvlc_playlist_play", *inst, item, 0, #Null, @ex)                   
                    Delay(100)
                 EndIf
              Case 2 ; play / pause
                 If GetGadgetText(2) = ">"
                    CallCFunction(0, "libvlc_media_player_play", *mp, @ex)
                    SetGadgetText(2, "||")                 
                 Else
                    CallCFunction(0, "libvlc_media_player_pause", *mp, @ex)
                    SetGadgetText(2, ">")
                 EndIf
           EndSelect
        EndIf
        If wevent=#PB_Event_SizeWindow
           If IsGadget(0)
              ResizeGadget(0, 40, WindowHeight(1)-20, WindowWidth(1)-40, 20)
           EndIf
           If IsGadget(1)
              ResizeGadget(1, 0, WindowHeight(1)-20, 20, 20)
           EndIf
           If IsGadget(2)
              ResizeGadget(2, 20, WindowHeight(1)-20, 20, 20)
           EndIf
           ResizeWindow(0, 0, 0, WindowWidth(1), WindowHeight(1)-20)
        EndIf
        Delay(10)
        *mp = CallCFunction(0, "libvlc_playlist_get_media_player", *inst, @ex)
        state = CallCFunction(0, "libvlc_media_player_get_state", *mp, @ex)           
        Select state
           Case 0 ; libvlc_NothingSpecial   
           Case 1 ; libvlc_Opening   
           Case 2 ; libvlc_Buffering   
           Case 3 ; libvlc_Playing   
              osizex = CallCFunction(0, "libvlc_video_get_width", *mp, @ex)
              osizey = CallCFunction(0, "libvlc_video_get_height", *mp, @ex)
              If sizex<>osizex And sizey<>osizey
                 sizex=osizex
                 sizey=osizey
                 ResizeWindow(0, #PB_Ignore, #PB_Ignore, sizex, sizey)
                 ResizeWindow(1, #PB_Ignore, #PB_Ignore, sizex, sizey+20)
                 length.q = CallCFunction(0, "libvlc_media_player_get_length", *mp, @ex)                 
                 stukje.q = length.q / 1000
                 If length=0
                    DisableGadget(0, 1)
                 Else
                    DisableGadget(0, 0)
                 EndIf
                 SetGadgetText(2, "||")                             
              EndIf   
              curpos.q = CallCFunction(0, "libvlc_media_player_get_time", *mp, @ex)
              If curpos.q<>curposo.q
                 curposo.q = curpos.q
                 stukje.q = length.q / 1000
                 If stukje>0 And curpos>0
                    percentage.l = curpos/stukje
                    SetGadgetState(0, percentage)
                 EndIf
              EndIf
           Case 4 ; libvlc_Paused   
           Case 5 ; libvlc_Stopped   
                 DisableGadget(2, 0)
           Case 6 ; libvlc_Forward   
           Case 7 ; libvlc_Backward   
           Case 8 ; libvlc_Ended   
           Case 9 ; libvlc_Error
        EndSelect   
    Wend
    If *mp
       CallCFunction(0, "libvlc_media_player_stop", *mp, @ex)
       CallCFunction(0, "libvlc_media_player_release", *mp)
    EndIf
    CallCFunction(0, "libvlc_release", *inst)
    CloseLibrary(0)
EndIf
CloseLibrary(0)
End
Tu es sûr que tu n'as rien oublié à ce niveau ??

Code : Tout sélectionner

CallCFunction(0, "libvlc_exception_init", @ex)
   
    *inst = CallCFunction(0, "libvlc_new", 4, @vlc_args(), @ex)
    ; 0.8.6 method
J'ai un blocage ici..

Re: VLCPlayer

Publié : lun. 27/janv./2020 10:17
par Maalik
Je pense qu'il y a une erreur sur le code

Re: VLCPlayer

Publié : lun. 27/janv./2020 11:24
par Ar-S
Maalik a écrit :Je pense qu'il y a une erreur sur le code
Bonjour. Merci de te présenter pour prouver que tu n'es pas un bot, sinon je supprimerai ce message.

Re: VLCPlayer

Publié : lun. 27/janv./2020 13:26
par Zorro
en realité, finalement, je ne sais pas pourquoi le code a fonctionné en 5.62
mais plus maintenant !

depuis quelque soit la version , le code ne fonctionne pas
la ligne " Global *base = OpenLibrary(0, "C:\Program Files\VideoLAN\VLC\libvlc.dll")" renvoie toujours 0 ...
donc la Dll ne se charge pas ....

8O

j'ai laissé un message sur le forum Anglais, pour voir ..


ps: oui ça fait déterrage de post :mrgreen:
mais la question reste entiere

Re: VLCPlayer

Publié : lun. 27/janv./2020 15:23
par Thyphoon
tiens nous au courant si tu as une réponse Zorro, car j'ai passé beaucoup de temps sur le même problème :mrgreen:

Re: VLCPlayer

Publié : lun. 27/janv./2020 16:35
par Zorro
je pense que ça viens de la Dll "libvlc.dll" qui doit etre dans un format spécial

car si on remplace par la Dll "libvlccore.dll" , alors là Purebasic arrive a charger ....

je ne connais pas les tenants et aboutissants de la dll "libvlc.dll" si c'est open-source, Free, ou proprietaire .!?

mais il semble qu'elle soit dans un format particulier, ce qui expliquerai que Purebasic n'arrive pas
a la voir comme une "Vraie" DLL .. et donc bloque a son chargement ...


j'ai vu sur le forum que certains avait réussi a utiliser cette DLL ,il est bien possible que la DLL avant, avait un format standard
qui aurai été changé au fil des versions de VLC ... ".NET" ?? mystere :roll: :)

Re: VLCPlayer

Publié : lun. 27/janv./2020 17:35
par Ar-S
Vous avez essayé de convertir les dll en lib https://wiki.videolan.org/GenerateLibFromDll/ ?

Re: VLCPlayer

Publié : mer. 29/janv./2020 8:36
par Maalik
Ar-S a écrit :
Maalik a écrit :Je pense qu'il y a une erreur sur le code
Bonjour. Merci de te présenter pour prouver que tu n'es pas un bot, sinon je supprimerai ce message.
c'était impoli de ma part désolé...
en effet, j'ai pas cherché la rubrique pour me présenter vu qu'il y a eu ce sujet qui m'intéressait beaucoup et j'ai tout de suite essayé de résoudre le problème :mrgreen:

Re: VLCPlayer

Publié : mer. 29/janv./2020 14:43
par Zorro
non , je pense que ce qui a causé probleme c'est le fait que tu ais déterré un topic ancien ...(datant de 2011 ) ;)
ce que font la plupart des Bots .....

Re: VLCPlayer

Publié : mer. 29/janv./2020 23:30
par Ar-S
Oui pas de soucis, c'était pour vérifier.
Bienvenue à toi. :wink: