| |
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 |
| |
| |
| | | |
|
| | |
| |
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. |
| |
| |
| | | |
|
| | |