|
Classe de controle de VLC v2.1.x (VideoLAN) par LibVLC |
Débuté par Pat 16, 17 fév. 2017 11:05 - 8 réponses |
| |
| | | |
|
| |
Membre enregistré 351 messages Popularité : +13 (17 votes) |
|
Posté le 17 février 2017 - 11:05 |
Bonjour à vous,
Pour lire des mp4 dans une appli j'utilise la classe LibVLC. qui est géniale. Pour lire / Pause arrêter etc.. Ça marche d'enfer.
Le seul souci c’est quand j'ai voulu faire des positionnements dans la vidéo. Pendant la lecture si je fais un : oVLC:Timeset(nPos) // Avec nPos en milliseconde . Cela ne fonctionne pas la vidéo redémarre à 0. Pourtant un oVLC:TimeGet() me retour bine une valeur cohérente!.
J'ai donc essayé avec oVLC:PositionSet(rReel) rReel entre 0 et 100 ... j'ai trouve sur le net que ce doit être un pourcentage !. Et là aussi cela me redémarre la vidéo au départ. Et d'ailleurs la fonction oVLC:PositionGet() me retourne toujours 6 !! J’ai fais les test avec la dernière version dispo ici http://www.developpez.net/forums/d1106111/environnements-developpement/windev/contribuez/classe-clibvlc-videolan-windev/…
Quant au VLC j’ai le 2.2.4. Alors c’est ou que je me trompe ??
Merci et BON DEV. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 945 messages Popularité : +102 (110 votes) |
|
Posté le 17 février 2017 - 15:21 |
bonjour, je ne sais pas si cela peut vous aider mais j'ai fait un test avec les dll (Win 7 - WD 20 - VLC 2.2.4)
hndDLL1, hndDLL2 sont des entiers système i, vlcInstance, vlcMedia, vlcMediaPlayer est un entier dllName1, dllName2 sont des chaînes
dllName1 = "C:\Program Files\VideoLAN\VLC\libvlccore.dll" dllName2 = "C:\Program Files\VideoLAN\VLC\libvlc.dll"
hndDLL1 = LoadDLL(dllName1) IF hndDLL1 = 0 THEN Erreur(ErreurInfo(errComplet)) RETOUR END
hndDLL2 = LoadDLL(dllName2) IF hndDLL1 = 0 THEN Erreur(ErreurInfo(errComplet)) DéchargeDLL(hndDLL1) RETOUR END
vlcInstance = API(dllName2, "libvlc_new", 0, Null) IF vlcInstance = 0 THEN Erreur("Erreur d'exécution de : libvlc_new.") DéchargeDLL(hndDLL2) DéchargeDLL(hndDLL1) RETOUR END
vlcMedia = API(dllName2, "libvlc_media_new_path", vlcInstance, "c:\temp\test.mkv") IF vlcMedia = 0 THEN Erreur("Erreur d'exécution de : libvlc_media_new_path.") IF vlcInstance <> 0 THEN API(dllName2, "libvlc_release", vlcInstance) DéchargeDLL(hndDLL2) DéchargeDLL(hndDLL1) RETOUR END
vlcMediaPlayer = API(dllName2, "libvlc_media_player_new_from_media", vlcMedia) IF vlcMedia = Null THEN Erreur("Erreur d'exécution de : libvlc_media_player_new_from_media.") API(dllName2, "libvlc_media_release", vlcMedia) API(dllName2, "libvlc_release", vlcInstance) DéchargeDLL(hndDLL2) DéchargeDLL(hndDLL1) RETOUR END
API(dllName2, "libvlc_media_release", vlcMedia) vlcMedia = Null
API(dllName2, "libvlc_media_player_play", vlcMediaPlayer)
Multitâche(-200)
FOR i=1 _TO_ 6 Trace("--------------------------> "+i) Multitâche(-50) IF i = 4 THEN API(dllName2, "libvlc_media_player_set_time", vlcMediaPlayer, 1000) END Movielength est un entier système = API(dllName2, "libvlc_media_player_get_length", vlcMediaPlayer) Trace(ChaîneConstruit("Movie length : %1 ms", Movielength)) MovieTime est un entier système = API(dllName2, "libvlc_media_player_get_time", vlcMediaPlayer) Trace(ChaîneConstruit("Movie time : %1 ms", MovieTime)) END
STOP
API(dllName2, "libvlc_media_player_pause", vlcMediaPlayer)
API(dllName2, "libvlc_media_player_pause", vlcMediaPlayer)
API(dllName2, "libvlc_media_player_stop", vlcMediaPlayer)
WHILE API(dllName2, "libvlc_media_player_is_playing", vlcMediaPlayer) = 1 Multitâche(-100); END;
API(dllName2, "libvlc_release", vlcInstance); vlcInstance = Null DéchargeDLL(hndDLL2); hndDLL2 = Null DéchargeDLL(hndDLL1); hndDLL1 = Null |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 351 messages Popularité : +13 (17 votes) |
|
Posté le 17 février 2017 - 17:03 |
Merci pour le réponse,,mais comme j'utilise déjà la classe LibVLC, suis pas très chaud pour refaire tous le code ! Mais je vais regarder de près quand votre code. Peut être ça va me donner une direction.
Bon DEV. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 962 messages Popularité : +183 (185 votes) |
|
Posté le 18 février 2017 - 08:06 |
hello, effectivement il y a un problème sur les fonctions PositionSet, PositionGet et TimeSet :
Pour la fonction PositionSet c'est un mauvais typage du paramètre de position passé : c'est un float qu'il faut passer donc en WLangage il faut mettre un reel sur 4 octets.
En ce qui concerne les autres problèmes , c'est un mauvais appel de l'api qui semble être en cause. Pour résoudre ces problèmes il faut passer par une description d' API ( possible à partir de windev 16) voici ce que cela donne pour les 4 procédures de la classe clibvlc :
Procedure PositionGet() SI PAS :mp ALORS RENVOYER -1 FIN
LibVLC_PositionGet is API Description LibVLC_PositionGet..DLLName = :sDLL LibVLC_PositionGet..FunctionName = "libvlc_media_player_get_position" LibVLC_PositionGet..Parameter[1]..Type = apiSystemInt LibVLC_PositionGet..TypeRetour = apiRéel_4 LibVLC_PositionGet..CallingConvention = CDECL rRes est un réel sur 4 octets = LibVLC_PositionGet(:mp) SI rRes < 0 ALORS :AddToLog("PositionGet="+:GetError()) SINON :AddToLog("PositionGet:" + rRes) FIN RENVOYER rRes
Procedure PositionSet(rPos est un réel sur 4 octets)
LibVLC_PositionSet is API Description LibVLC_PositionSet..DLLName = :sDLL LibVLC_PositionSet..FunctionName = "libvlc_media_player_set_position" LibVLC_PositionSet..Parameter[1]..Type = apiSystemInt LibVLC_PositionSet..Parameter[2]..Type = apiRéel_4 LibVLC_PositionSet..CallingConvention = CDECL LibVLC_PositionSet(:mp,rPos) :AddToLog("PositionSet:" + rPos) RENVOYER 0
Procedure TimeGet()
LibVLC_TimeGet is API Description LibVLC_TimeGet..DLLName = :sDLL LibVLC_TimeGet..FunctionName = "libvlc_media_player_get_time" LibVLC_TimeGet..Parameter[1]..Type = apiSystemInt LibVLC_TimeGet..TypeRetour = apiEntier_8 LibVLC_TimeGet..CallingConvention = CDECL nRes est un réel sur 8 octets = LibVLC_TimeGet(:mp) :AddToLog("TimeGet:"+nRes) RENVOYER nRes
Procedure TimeSet(nMSeconds est un entier sur 8 octets )
LibVLC_TimeSet is API Description LibVLC_TimeSet..DLLName = :sDLL LibVLC_TimeSet..FunctionName = "libvlc_media_player_set_time" LibVLC_TimeSet..Parameter[1]..Type = apiSystemInt LibVLC_TimeSet..Parameter[2]..Type = apiInt_8 LibVLC_TimeSet..CallingConvention = CDECL LibVLC_TimeSet(:mp,nMSeconds) :AddToLog("TimeSet:" + nMSeconds) RENVOYER 0
-- Ami calmant, J.P |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 351 messages Popularité : +13 (17 votes) |
|
Posté le 18 février 2017 - 14:14 |
Merci JP, comme toujours rapide et efficace ! Un grand merci ça va bien m'aider.
BON DEV |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 945 messages Popularité : +53 (63 votes) |
|
Posté le 28 mars 2017 - 17:39 |
Bonjour,
j'aurais besoin de vos lumières afin de pouvoir ajouter une liste de fichier, j'ai conscience qu'il faut utiliser libvlc_media_list_add_media mais je ne vois pas comment m'y prendre.
Merci d'avance
jordan |
| |
| |
| | | |
|
| | |
| |
Posté le 16 août 2018 - 10:10 |
Bonjour,
Je suis confronté au même soucis avec la procédure PositionSet().
Windev me retourne une erreur en me disant que la que la DLL a provoqué une erreur d'execution.
Version de VLC 3.0.3 (32 bits)
merci pour votre aide ! |
| |
| |
| | | |
|
| | |
| |
Posté le 30 octobre 2019 - 17:48 |
Bonjour,
Savez-vous comment je peux lire un fichier m3u avec le lecteur que vous proposez ?
Merci |
| |
| |
| | | |
|
| | |
| |
Posté le 14 mai 2021 - 03:51 |
Bonjour, En effet, la commande SetPosition ne fonctionne pas ! J'ai fait les modifications que vous avez mentionné mais cela ne fonctionne toujours pas !
J'ai déjà utilisé dans un de mes projets un ActiveX VLN et ça fonctionne bien mais dans ce nouveau projet, je souhaite faire des captures écran d'une vidéo à des endroits différents et aléatoires : Je sais qu'il existe une méthode snapshot dans l'activeX VLN mais je ne sais pas comment l'utiliser car je n'ai pas trouvé de documentation : AX_VLC>>video>>snapshot ... Où AX_VLC est mon ActiveX
Si vous avez une idée
Je vous remercie d'avance |
| |
| |
| | | |
|
| | | | |
| | |
|