PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV Mobile 23 → Lire des vidéos en boucle ?
Lire des vidéos en boucle ?
Débuté par Fabrice, 27 sep. 2013 13:47 - 4 réponses
Membre enregistré
33 messages
Posté le 27 septembre 2013 - 13:47
Bonjour,

je voulais savoir si l'un d'entre vous avait bidouillé du code pour permettre d'offrir la possibilité de lire une vidéo en boucle.
Ni les fonctions MCI ni les fonctions Multimedia n'offrent cette possibilité sous Windev ou Windev Mobile
(Je pourrais tenter de compter le nombre d'images grâce aux fonctions MCi et tenter un retour à 0 lorsque la vidéo arrive à la dernière image, mais sur pas mal de vidéos retravaillées les fonctions MCIPosition et MCIFormatPosition posent problème).

D'avance merci pour vos propositions.
Membre enregistré
75 messages
Popularité : +1 (1 vote)
Posté le 28 septembre 2013 - 15:06
en wm18, il y a l'objet multimedia

qui permet de lancer un .mp3 ou video,

pour boucler, il suffi de lancer un timer qui vérifie si le multimédia est termine ou pas, si terminé relance le multimedia

je l'utilise uniquement avec des .mp3
Membre enregistré
75 messages
Popularité : +1 (1 vote)
Posté le 28 septembre 2013 - 15:06
en wm18, il y a l'objet multimedia

qui permet de lancer un .mp3 ou video,

pour boucler, il suffi de lancer un timer qui vérifie si le multimédia est termine ou pas, si terminé relance le multimedia

je l'utilise uniquement avec des .mp3
Membre enregistré
6 messages
Membre enregistré
1 message
Posté le 29 octobre 2018 - 19:45
Merci pour ce tuto bien pédagogique,

j'ai heureusement trouvé une solution depuis 2013 ;-).

Pour ma part j'utilise Threadexecute plutôt que TimerSys : 

SI MultimédiaJoue(MM_Video) = Faux ALORS
Erreur("Impossible de jouer le fichier", ErreurInfo())
FIN

Multitâche(-50)

// Lancement du Thread pour actualisation des champs pendant la lecture
ThreadExecute("ThreadLecture", threadNormal, ThreadLecture)


puis dans le code de threadLecture je mets : 
Procedure ThreadLecture()

nNewPosition est un entier
hTemps est une Heure
sPosition est une chaîne
sPositionAffichee est une chaîne
nEtatVideo est un entier

BOUCLE
nNewPosition = MultimediaPosition(MM_Video)

SI nNewPosition >= 0 ALORS
hTemps = EntierVersHeure(nNewPosition / 10)
sPosition = HeureVersChaîne(hTemps, "HH:MM:SS:CC")

nEtatVideo = MultimédiaEtat(MM_Video)

SI nEtatVideo = MultimédiaEtatJoue ALORS
// Lecture Vidéo en cours
SI sPosition <> sPositionAffichee ALORS
// si nPositionTmp <> nOldPosition ALORS
sPositionAffichee = sPosition
// nOldPosition = nPositionTmp
ExécuteThreadPrincipal(AffichePosition, nNewPosition, nEtatVideo)
FIN
SINON
// Lecture Vidéo arrêtée ou en pause
sPositionAffichee = sPosition
// nOldPosition = nPositionTmp

ExécuteThreadPrincipal(AffichePosition, nNewPosition, nEtatVideo)
SORTIR
FIN

SINON
SORTIR
FIN

FIN


AffichePosition() me permet de faire avancer une jauge de défilement sous la vidéo, et je gère donc aussi les boutons pause, stop, retour arrière…

NOTE : attention, ça reste très instable sous iOS : lorsqu'on clique très rapidement sur mes boutons pause / lecture plusieurs fois de suite, ça part régulièrement en sucette (fermeture intempestive de la fenêtre, boutons qui deviennent inactifs…). Je n'ai toujours pas isolé ce problème, a priori faut rajouter des multitâches pour laisser les procédures et raffraichissements écrans se terminer.