PC SOFT

GRUPOS DE DISCUSSÃO PROFISSIONAL
WINDEVWEBDEV e WINDEV Mobile

Inicio → WINDEV 2024 → Y a t il un utilisateur d'activeX Média Player ?
Y a t il un utilisateur d'activeX Média Player ?
Iniciado por bruno.faguet, ago., 05 2005 5:48 PM - 23 respostas
Publicado em agosto, 05 2005 - 5:48 PM
Je dois afficher un Dvd (fich.vob) , puis une image
J'utilise ,pour le Dvd, un champ ActiveX de type Windows Média Player
Mon code est le suivant :
ActiveX>>URL=FicDvd

Le probleme que je rencontre :
l'image s'affiche bien avant la fin du dvd.
Comment 'attendre' que le dvd soit terminé pour afficher l'image .

= Quelle méthode utiliser et avec quelle synthaxe
(les essais réalisés me renvoient toujours : méthode inconnue)

merci d'avance
Publicado em agosto, 05 2005 - 6:22 PM
Essaie d'intercepter l'événement 'EndOfStream' avec la fonction ActivexEvénement.

Pour le détail va voir dans l'aide en ligne de la fonction.

Sinon tu peux gérer toi même un traitement en boucle où tu compares les valeurs des méthodes suivantes : currentposition et duration

Ex.
SI ActiveX>>CurrentPostion() >= ActiveX>>Duration() ALORS...
Publicado em agosto, 05 2005 - 6:54 PM
Merci de ton aide .
C'est exactement ce que je veux faire , le probleme est que le systeme me renvoie
systématiquement l'erreur :
ex: méthode currentposition : nom inconnu

y a t il une erreur de synthaxe , mon code est le suivant :

TANTQUE ActiveX>>CurrentPosition() < ActiveX>>Duration()
Multitache(-1)
FIN

Seule la ligne :ActiveX>>URL=G_nomretour ne me renvoie pas d'erreur

... je n'y comprends rien
Publicado em agosto, 06 2005 - 11:49 AM
Bonjour,

As tu bien pris le bon controle ActiveX ?
Je me suis fais avoir aussi, J'avais 2 controles ActiveX pour Media Player installé (celui de la 6.4 et celui de la 9 ou la 10....)
certaines propriétés (CurrentPosition en l'occurrence) n'existent pas dans le 6.4

De plus, est ce que le membre FileName ne conviendrait pas mieux que le membre URL...
A mon avis ton problème vient de la car le membre URL sert à faire du streaming, c'est à dire à lire sans attendre la fin (pour écouter une radio sur internet par exemple)
essaye avec le membre FileName et tiens nous au courant

En espérant t'avoir aidé
Marc
Publicado em agosto, 08 2005 - 9:49 AM
Le membre Filename ne semble pas existé pour l'activeX Média Player.
(en tous cas : n'apparait pas ds la liste de cet activeX sous WDXView)

Je suis en vers. 10 de Média Player : comment supprimer l'ancien activeX , s'il existe.

merci de ton aide , je suis complétmnt ds les choux.
Publicado em agosto, 08 2005 - 11:05 AM
Est-ce que l'aide à la saisie te propose bien la méthode currentposition lorsque tu saisi ActiveX>>Cur

Si c'est le cas alors essaie la syntaxe suivante:
TANTQUE ActiveX>>CurrentPosition < ActiveX>>Duration()

Dans ce cas ci, tu prends directement la valeur du membre sans passer par la méthode qui n'existe peut-être plus en version 10.

Personnellement j'ai fait les test avec une version 9 et cela marche avec toutes les syntaxes (avec ou sans les parenthèses)
Publicado em agosto, 08 2005 - 11:48 AM
j'ai essayé : toujours mm prob
(L'aide me propose bien CurrentPosition et Duration )
En consultant les messages se rapportant a cet ActiveX , d'autres ont déjà eu ce probl.

Est ce un probleme de maj de l'activeX de média Payer ?
(je suis en ves. 10:y a t il un module particulier à récupérer et exécuter ?)
Publicado em agosto, 08 2005 - 1:00 PM
Je viens de refaire des tests et je me suis rendu compte de ceci:

Les premiers tests que j'ai effectué l'étaient avec la version 6.4.09.1130 du médiaplayer et tout fonctionnait correctement.

J'ai effectué la mise à jour du médiaplayer en version 10 et j'ai mis à jour mon champ activex.

Depuis j'ai également les messages d'erreur me signalant que les noms des méthodes sont inconnus.

Je poursuis les recherches
Publicado em agosto, 08 2005 - 1:33 PM
La structure du contrôle à évolué.

Voici les commandes à utiliser:
ActiveX>>Controls>>CurrentPosition()
et
ActiveX>>CurrentMedia>>Duration()

Pour lancer la lecture :
ActiveX>>Controls>>Play()
Publicado em agosto, 08 2005 - 3:35 PM
Je te remercie vraiment beaucoup.

Je viens d'essayer ... CA MAAAARRRRCHE .

Peux tu me dire ou tu as trouvé ces nvlles synthaxes , au cas ou j'ai besoin d'autres méthodes .


encore MERCI de ton aide .
Publicado em agosto, 08 2005 - 4:35 PM
Il faut fouiller un peu mais voici l'adresse de base :

http://msdn.microsoft.com/library/default.asp…
Publicado em agosto, 08 2005 - 4:59 PM
Une toute dernière précision et je ne t'embete plus :
Peux tu me confirmer que l'ouverture du fich Dvd se fait bien par :
ActiveX>>URL=Nomfic
ActiveX>>controls>>Play

(qq m'a parlé de la méthode Filename qui a priori n'appartient pas a cet Activex)


Pour fermer ce fichier et 'libérer' l'écran : c'est bien :
ActiveX>>close

J'ai constaté qu'en lancant 2 fois une mm lecture , le film ne commence pas au début .
Je n'ai pas l'impression que l'initialisation du Dvd est correcte .

merci encore
Publicado em agosto, 08 2005 - 5:50 PM
Il faut bien utiliser la méthode URL car la méthode FileName n'existe plus.

Pour fermer le contrôle il faut bien faire :
ActiveX>>Close()

Pour relancer le fichier, tu peux forcer la position à 0
ActiveX>>Controls>>CurrentPosition(0)
ActiveX>>Controls>>Play()
Ou alors tu utilise la méthode PlayItem qui permet de lancer directement la visualistation d'une video:
ActiveX>>Controls>>PalyItem(<MonFichierVideo>)
Rempalcer <MonFichierVideo> par le chemin complet du fichier à jouer.

Tu peux contrôler le flux pour faire des pauses, retours en arrière rapide, avance rapide avec les méthodes suivantes:
ActiveX>>Controls>>Pause()
ActiveX>>Controls>>Stop()
La différence doit être que la pause permet de repartir du point d'arrêt alors que le stop repositionne au début du fichier
ActiveX>>Controls>>FastReverse()
ActiveX>>Controls>>FastForward()
Pour reprendre la lecture à vitesse normale ou après une pause, il faut faire un Play()
Publicado em agosto, 08 2005 - 6:40 PM
J'ai été un peu vite . en effet les méthodes suivantes ne plantent plus ...
ActiveX>>Controls>>CurrentPosition()
ActiveX>>CurrentMedia>>Duration()

... mais me retournent 0 => test d'attente ne marche pas

je suis au mm point.
Publicado em agosto, 08 2005 - 7:03 PM
J'ai pourtant testé et cela fonctionnait.

Voici mon code:

Dans l'initialisation du contrôle:
ActiveX>>Controls>>AutoStart(Faux)

Dans le bouton:
ActiveX>>URL = "C:\MaVideo.avi"
ActiveX>>Play()
TANTQUE ActiveX>>Controls>>CurrentPosition() < ActiveX>>CurrentMedia>>Duration()
Trace(ActiveX>>Controls>>CurrentPosition() +":"+ ActiveX>>CurrentMedia>>Duration())
Multitâche()
FIN

J'ai pas de fichier .vob sous la main. Je testerai demain.
Essaye toujours avec un fichier .avi pour voir.

Autre détail, l'application dans laquelle j'ai testé est en WD8 actuellement.
Publicado em agosto, 08 2005 - 7:10 PM
Plutot que tester une attente avec CurrentPosition et Duration qui me renvoie 0.
(donc ne marche pas)

J'ai essayé avec :
tantque activex>>isonline()
...
fin

qui a l'air d'attendre , je ne sais pas si isonline() est la bonne méthode et ce qu'elle teste effectivement ?

Dans le mm genre , il y a: isRemote et is Available qui permettent de tester ????
Publicado em agosto, 09 2005 - 1:33 AM
Explication des méthodes citées:

IsAvailable:
Permet de déterminer si une méthode existe bien pour ce contrôle.
Cette méthode permet par exemple de gérer un même code pour plusieurs version d'un même contrôle.
C'est ce que l'on vient d'avoir avec les méthodes CurrentPosition et Duration qui n'existaient plus au même endroit en version 10.
On peut avoir un code du genre:
SI ActiveX>>Controls>>IsAvailable("CurrentPosition") ALORS
// On est en version 9 ou supérieure
nPosition = ActiveX>>Controls>>CurrentPosition()
SINON
// On est en version 6 ou inférieure
nPosition = ActiveX>>CurrentPosition()
FIN
Cela ne nous sert à rien en WinDev car le contrôle ActiveX est défini sous l'éditeur et ne peut être modifié par programmation.

IsOnline:
Permet de savoir si le player est connecté à un réseau

IsRemote:
Permet de savoir si le player est piloté en mode Remote

Je me demandais si tu n'avais pas oublié de mettre un appel à Multitâche dans ta boucle car si tu ne le fais pas alors la video n'est pas jouée et les méthodes retournent 0.
En fait ta boucle bouffe tout le temps processeur et la video ne démarre pas.
Publicado em agosto, 09 2005 - 1:55 AM
En fouillant encore un peu sur MSDN, jai trouvé une autre méthode:

Il faut tester la valeur de retour de PlayState

ActiveX>>PlayState()

Signification des valeur de retour:
0 : Indéterminé
1 : Arrêté (Stop)
2 : En pause (Pause)
3 : En lecture (Play)
4 : En avance rapide (FastForward)
5 : En retour rapide (FastRewind)
6 : Remplissage du tampon (Buffering)
7 : En attente de connection (Waiting)
8 : Lecture terminée (MediaEnded)
9 : En transition (Transitionning) (Charge le média suivant dans la playlist)
10 : Prêt à jouer le média (Ready)
11 : Reconnection (Reconnecting)

Dans ton cas, il faut tester la valeur 3 ou la valeur 8.
Soit tu regarde s'il est toujours en lecture, soit tu regarde s'il a terminé.
Publicado em agosto, 09 2005 - 10:37 AM
Après tests , je me suis rendu compte que :
activex>>Duration et activex>>currentposition ne sont pas chargés immédiatmnt.
=> c'est pour cela qu'ils me renvoyaient 0

Pour qu'ils soient chargés , à priori ,ilfaut faire une 1er tempo , du style ... :

ActiveX>>close
ActiveX>>URL=G_nomretour
ActiveX>>Controls>>currentPosition(0) // méthode sur Wind média Player 10
ActiveX>>Controls>>Play() // méthode sur Wind média Player 10

TANTQUE (ActiveX>>PlayState()=9)
Multitache(-1)
FIN

TANTQUE (ActiveX>>PlayState()=9)
Multitache(-1)
FIN

// là ces 2 valeurs sont <> 0

TANTQUE (ActiveX>>Controls>>CurrentPosition()) < (ActiveX>>CurrentMedia>>Duration())
Multitache(-1)
FIN

... Je crois ...
Publicado em agosto, 09 2005 - 10:59 AM
Visiblment tout ceci marche correctmnt avec des .avi
... mais avec des .vob : pas terrible

Duration et currentposition ne sont pas toujours correctes , malgré des tempos supplémentaires .

De plus ,
Si ,dans les propriétés du champ ActiveX (Média Player) , on décoche la case :
Lecture plein écran (et que ce champ activeX est de taille réduite) => la lecture se lance et ,très rapidement , plus rien ds le champ (noir)
Publicado em agosto, 09 2005 - 11:57 AM
Mm avec des avi : problemes avec cet activeX
Mon projet est en fait une sorte de diaporama , affichant en boucle ce qui est stocké.

Si on effectue 2 fois le code dont on parle (URL=... , Play ...) ex:en rajoutant une boucle en début de code =>
La 1ere fois : visu du fich viédo = ok
2eme : rien (écran noir )
Publicado em agosto, 09 2005 - 12:51 PM
Voici un code qui joue une liste de video.
Testé avec des .avi.
Je n'arrive pas à jouer des .vob même directement dans le média player.

oPlayList est un objet Automation dynamique

// - Lecture en boucle
ActiveX>>Settings>>SetMode("Loop",Vrai)

// - Remplissage de la playlist
oPlayList = ActiveX>>playlistCollection>>NewPlayList("Test")
ActiveX>>URL = "C:\WinDev 9\Programmes\Donnees\Anim_Compare.avi"
oPlayList>>AppendItem(ActiveX>>CurrentMedia())
ActiveX>>URL = "C:\WinDev 9\Programmes\Donnees\WD_Anim_RR.avi"
oPlayList>>AppendItem(ActiveX>>CurrentMedia())

// - Démarrage de la lecture
ActiveX>>currentPlaylist = oPlayList
ActiveX>>controls>>play()

// - Suppression de la playlist
ActiveX>>playlistCollection>>Remove(oPlayList)

Attention, l'initialisation de la playlist peut prendre un certain temps.
Il faut donc afficher un message pour faire patienter l'utilisateur.
Il existe peut-être une autre façon, plus rapide, de remplir la playlist mais je n'ai pas encore trouvé.
Publicado em agosto, 09 2005 - 6:20 PM
Je ne peux pas utiliser le mode playlist
En effet c'est l'uitisateur final qui choisi les éléments à visualiser.

Il faut absolument que je trouve un moyen pour faire fonctionner le code suivant :

POUR g_boucle1=1 A 2
ActiveX>>close
ActiveX>>URL=SansEspace(nomfic_avi)
ActiveX>>Controls>>currentPosition(0)
ActiveX>>Controls>>Play()
TANTQUE (ActiveX>>Controls>>CurrentPosition() < ActiveX>>CurrentMedia>>Duration()) Multitache(-1)
FIN
FIN

Quand g_boucle1=1 : Ok
Quand g_boucle1=2 : rien à l'écran
...Il y a peut être une initialisation qui manque ?
Publicado em agosto, 10 2005 - 10:32 AM
Je ne vois pas en quoi le mode playlist ne te convient pas.

Si ton utilisateur choisi les fichiers à visualiser, tu remplis ta playlist avec ses choix puis tu lance la visualisation.

Je suppose que dans ton exemple précédent, tu remplacera le 'nomfic_avi' par un tableau contenant les noms de fichier que tu sélectionnera grâce à l'indice de la boucle.
Tu peux donc remplir ta playlist dans cette boucle et lancer la visualisation après.

Si l'utilisateur doit compléter le playlist à la volée, pendant la visualisation d'une video, alors il suffit de ne pas faire le 'remove' et d'ajouter lors de la validation de la sélection du fichier.