IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

DirectX Discussion :

Juxtaposition/Synchro de 2 videos avec DirectShow


Sujet :

DirectX

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 41
    Points : 16
    Points
    16
    Par défaut Juxtaposition/Synchro de 2 videos avec DirectShow
    Bonjour,

    J'ai une petite interrogation. Je veux synchroniser pile poil 2 videos de tailles identiques ( 1280x720 ) pour en avoir qu'une seule de 2560x720, donc juxtaposées horizontalement.

    Le premier probleme est la synchro de ces 2 videos. En effet pour que ça donne réelement l'impression que ce soit qu'une seule vidéo, il faut que chaque image de la sequence apparaissent au meme moment (sinon decalage etc ... ce qui est le cas si je les joue parallelement dans 2 fenetres video dans une appli)

    Je ne connait pas suffisement DirectX et DirectShow. Mais puis-je m'en sortir avec ces outils ?

    Une petite piste peut etre ?

    Un grand merci d'avance !

    Stef

  2. #2
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Points : 2 605
    Points
    2 605
    Par défaut
    Tu as l'interface "IMediaSeeking" qui permet de te positionner à n'importe quel endroit de la vidéo (du moins pour les formats les plus courants).

    A toi de savoir quel est le bon moment pour que les deux vidéos soient synchro (aucun programme ne peut le deviner à ta place).

    Après mais je n'ai pas testé tu lances les deux vidéos. Il peut encore subsister un décalage puisque les deux vidéos ne démarreront jamais en même temps. A toi de connaître ce temps de latence et de faire avec.

    Sinon tu peux programmer un filtre de synchronisation qui se situerait juste avant le rendu graphique, et qui te permettra de contrôler exactement la synchro.

    C'est l'idée générale, après ça dépend de la façon dont tu gères les deux flux (un seul graphe ou multigraphe).

    Peut-être que directshow à prévu ce genre de situation, notamment avec un seul graphe dans lequel tu définis des paramètres de synchronisation. Ce serait trop beau pour être vrai, mais c'est à vérifier.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    j'ai eu a faire une synchro de 3 flux DV, pour ma part j'ai cree 3 thread, chaqun chargé de la gestion d'un graph directshow. La synchro des commandes est assurée par une boucle de message et une synchronisation des threads quand à la lecture de ceux-ci.
    la diffusion est impec pour peu qu'on attende que chaque graph soit pret avant de lancer une lecture.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 41
    Points : 16
    Points
    16
    Par défaut
    Hello,

    merci pour cette info. Mais tes 3 flux DV decrivait-t-ils la meme image ?
    Moi c'est mon cas, et le seuil de tolerence de desincro n'est pas le meme.

    J'ai deja fais la synchro de 3 videos n'ayant pas exatement le meme contenu avec un logiciel (syncmaker pro) qui synchronise les 3 videos.


    les 3 videos que j'ai à synchroniser decrivent la meme scene, et avec le meme outil (syncmaker pro) la synchro n'est pas assez parfaite pour donner l'illusion qu'il s'agit de la meme video.

    J'ai essayé de bidouiller un peu dans les graph afin de trouver un filtre capable de synchroniser les 3 flux video avant de les envoyer à un video renderer mais sans succès.

    et malheureusement, aucun codecs n'encode à une résolution de 3840x720.

    d'autres idées ?

    merci d'avance !

  5. #5
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Points : 2 605
    Points
    2 605
    Par défaut
    Le filtre de synchronisation me paraît être la solution la plus adaptée, mais la programmation d'un tel filtre est ardue.

    Une méthode peut-être plus simple à mettre en oeuvre mais qui donnera peut-être des résultats moins satisfaisants, c'est d'utiliser le multigraphe, de positionner les vidéos avec ImediaSeeking, et de lancer les vidéos dans l'interface vmr9. Sachant que l'on peut lancer les flux lorsqu'ils sont synchro au niveau du graphe, c'est peut-être bon.

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    oui, mes 3 flux faisaient partie de la même scene, c'était du DV donc entrelacé. j'obtenais une désynchro inférieure à la trame (<20 ms). Par contre, je n'envoyais pas les flux vers une fenetre, mais vers Un convertisseur DV>SVidéo (via MSDV), ce qui au niveau des ressources est beaucoup moins lourd.
    après avoir construit les graphs, j'appelais la fonction StopWhenReady de IMediaControl, qui à pour effet de d'initialiser par avance les graphs.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 41
    Points : 16
    Points
    16
    Par défaut
    Tu n'as pas constaté de desynchro au fil du temps ? quelles durées tes videos DV ?

    merci d'avance !
    stef

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Non, pas de désynchro dans le temps (ceci-dit l'horloge dans ce cas était générée par les convertisseurs, via MSDV). sur un enchainement de fichier, d'abord en DES (vite abandonnés),ensuites en playlistes avec GmfBridge pour les liaisons entre médias, la longueur des playlistes varient entre 10 & 90 min, avec commandes pause & lecture soit automatiques, soit commandées à distance (via Socket).

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 41
    Points : 16
    Points
    16
    Par défaut
    Eventuellement, serais-ce possible d'avoir une copie de la source ?
    ça me permettrait surement de gagner un peu de temps.

    Merci d'avance
    stef

  10. #10
    Nouveau Candidat au Club
    Inscrit en
    Avril 2005
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par PascalAvs
    j'ai eu a faire une synchro de 3 flux DV, pour ma part j'ai cree 3 thread, chaqun chargé de la gestion d'un graph directshow. La synchro des commandes est assurée par une boucle de message et une synchronisation des threads quand à la lecture de ceux-ci.
    la diffusion est impec pour peu qu'on attende que chaque graph soit pret avant de lancer une lecture.
    Bonjour, je suis interessé par un tel code.
    Pourrais tu me l'envoyer SVP ??

    pompomfr@hotmail.fr

    Merci d'avance

  11. #11
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Points : 2 605
    Points
    2 605
    Par défaut
    http://www.gdcl.co.uk/articles/index.htm

    PascalAvs vous a parlé de ce code. Il est en libre téléchargement à l'adresse ci-dessus.

    Je ne l'ai pas testé, mais ça va pas tarder...

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 41
    Points : 16
    Points
    16
    Par défaut
    Merci !
    Mais après quelques heures, l'utilisation des interfaces ne me parle pas beaucoup. Et je n'arrive pas à faire la correspondance entre les differentes methodes.

    Si vous avez quelques minutes pour m'expliquer leur utilisation, je suis bien evidement preneur.

    merci d'avance !
    stef

  13. #13
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Points : 2 605
    Points
    2 605
    Par défaut
    Il y a une doc (.pdf) sur le site qui explique précisément comment fonctionne ce filtre. L'as-tu téléchargé? (c'est en anglais).

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 41
    Points : 16
    Points
    16
    Par défaut
    Yes, j'ai lu le PDF, mais il est un un peu leg à mon gout ( enfin vue mon experience )

    J'ai cherché sur le net egalement, mais sans reel succès

    stef

  15. #15
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Points : 2 605
    Points
    2 605
    Par défaut
    Si tu as du mal à comprendre avec la doc et le code source, ca va être difficile de t'aider comme ça, juste avec des messages. Cette partie de directX n'est pas la plus simple.

    J'ai un peu testé le gmfbridge, et j'ai l'impression qu'il n'est pas super performant. Quand je déplace la fenêtre avec la souris j'ai un lag "de la mort".

    Actuellement je me tourne vers le multigraph et la "multivmr9.dll", et là il n'y a pas photo, du moins à première vue.

    J'ai commencé à regarder le code et ça à l'air tout à fait jouable. Je me penche précisément sur le "gameplayer" parce que l'environnement correspond à mon logiciel. Tu as aussi un exemple de multiplayer pour les vidéos avec affichage 2D.

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 41
    Points : 16
    Points
    16
    Par défaut
    Effectivement, j'ai vu qu'il y avait un multiplayer dans le sdk de DirectX9 qui utilise vmr9 mais je ne l'ai pas encore testé dans un environement de devellopement.

    Par ailleurs, il n'y a pas possibilité de faire un graph qui utilise le filtre VMR9 ? j'ai essayé de bidouiller sous graphedit, sans succès.

    en tout cas merci !
    stef

  17. #17
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Points : 2 605
    Points
    2 605
    Par défaut
    Toutes les cartes graphiques ne permettent pas d'utiliser la VMR9.

    C'est pour ça que dans chaque exemple qui utilise la VMR9 tu as la fonction:

    Si cette fonction échoue c'est que la VMR9 n'est pas utilisable.
    Si elle n'échoue pas c'est que tu t'y prends mal pour construire le graphe, je parle bien sur en terme de programmation.

    L'ennui sous graphedit, c'est qu'il utilise un mode de connection interfiltre "intelligent". Il ne va donc pas choisir la vmr9. Pour en être sur tu peux, il me semble désactiver le mode de connection "intelligent". Ensuite tu dois ajouter en premier le filtre VMR9 puis effectuer le render.
    Mais je suppose que c'est ce que tu as fait.

  18. #18
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 41
    Points : 16
    Points
    16
    Par défaut
    Hello,

    J'ai fini par m'en sortir avec VMR9, en mixant donc mes 3 flux video, via VMR9 au lieu des video Mixing Renderer classic... ça marche du feu de dieu, meme qd je fait patauger la video, en bourinant les perfs du PC, les images repartent synchrones.

    Voici de quoi je me suis inspiré :
    http://www.codeproject.com/directx/DirectShowVMR9.asp

    Moldavi, merci, merci et encore merci pour ton aide.
    stef

  19. #19
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Points : 2 605
    Points
    2 605
    Par défaut
    Je suis content pour toi.

    Tu avais ce genre de code dans le SDK de directshow. C'est l'exemple "blender" de la VMR9, il me semble.

    J'ai utilisé ce code, mais pour l'instant je l'abandonne. Parce qu'il a plusieurs défauts selon moi.

    Le premier c'est que si tu veux ajouter ou enlever des streams (vidéos), alors tu es obligé de stopper le graphe en entier. Cela reste plus rapide que de recréer un graphe, certe. Mais de laisser continuer une vidéo, je trouve ça mieux.

    Un autre défaut, c'est que je ne réussi à initialiser ce graphe uniquement avec un seul codec (celui de moonlight qui nécessite une licence). C'est pour cette raison que je me tourne vers la solution "multigraphes".

    Tu devrais essayer le multiplayer. En une journée, j'ai réussi à l'utiliser (ce n'est pas parfait mais c'est très convainquant). C'est de la gestion de sous-graphe je trouve que c'est plus souple. De plus avec cette méthode tu peux ajouter des contrôles directement sur la fenêtre de la vidéo, idéal pour du plein écran.

Discussions similaires

  1. Capture video avec AVICAP32.dll
    Par Mercenary Developer dans le forum Langage
    Réponses: 10
    Dernier message: 08/09/2005, 00h30
  2. pbleme d'affraichissement d'image avec directshow
    Par lykim dans le forum DirectX
    Réponses: 4
    Dernier message: 17/03/2005, 09h08
  3. problème de capture son avec Directshow
    Par albator83 dans le forum DirectX
    Réponses: 2
    Dernier message: 06/11/2003, 17h18
  4. Gros Problème avec DirectShow et la méthode RELEASE
    Par Olivier Delmotte dans le forum DirectX
    Réponses: 3
    Dernier message: 10/03/2003, 18h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo