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 :

[DirectShow]Lecture son en streaming


Sujet :

DirectX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 32
    Par défaut [DirectShow]Lecture son en streaming
    Bonjour !
    Je dois développer une application permettant de jouer des sons en streaming (le son n'est pas présent sous forme de fichier sur le disque)
    Hors, le Graphbuilder ne permet (de ce que j'ai vu) que de construire mes graphes à partir d'un fichier, comment faire pour construire le graphe a partir de données en mémoire (et potentiellement incomplètes)?
    J'arrive bien a jouer les sons wave avec les api waveout, mais le problème est que le son peut venir par exemple d'une webradio, et donc être dans un format autre. A partir de la, il me semble logique de me tourner vers directshow.
    il m'est de plus impossible d'utiliser directsound ou directmusic (plateforme windows CE).

    bref, si quelqu'un peut m'aider a m'orienter sur des objets à utiliser (et comment? l'interface COM est pour le moins obscure et les informations dures a glaner) ou des tutoriels a ce sujet....

    Merci par avance

  2. #2
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 36
    Par défaut
    J'arrive bien a jouer les sons wave avec les api waveout, mais le problème est que le son peut venir par exemple d'une webradio, et donc être dans un format autre. A partir de la, il me semble logique de me tourner vers directshow.
    Si tu le peux en effet grâce aux filtres fourni par DirectShow. Il existe plusieurs types de filtres dont ceux liés à la capture qui représente les périphériques de capture présents dans ton PC. Pour ce qui est du son, ce sera ta carte son.
    Ensuite, pour mieux comprendre comment fonctionne DirectShow, le mieux est de télécharger GrapheEdit qui te permettra de construire ton graphe constitué de tous tes filtres nécessaires à la capture dont tu auras besoin.

  3. #3
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 32
    Par défaut
    Citation Envoyé par pousspouss
    Si tu le peux en effet grâce aux filtres fourni par DirectShow. Il existe plusieurs types de filtres dont ceux liés à la capture qui représente les périphériques de capture présents dans ton PC. Pour ce qui est du son, ce sera ta carte son.
    Non non, j'ai bien compris (je pense) comment captuer le son en provenance de ma carte son, et ce n'est pas ce que je veux ! je veux jouer un son....dont la provenance n'est pas un fichier....c'est mon application qui doit envoyer le son a la carte son et décoder les données....en bref je voudrais faire l'équivalent (grosso modo) de :
    IGraphBuilder* pGraph;
    //initialisations diverses et variées
    pGraph->RenderMemory(BYTE* buffer);
    //au lieu de
    //pGraph->RenderFile(blablabla);

    ou quelque chose du genre...

  4. #4
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 32
    Par défaut
    Enfin pour être plus clair, ce que je pense avoir compris, c'est que je dois implémenter mon filtre d'entrée qui va permettre de récupérer ces données en mémoire, et je vais devoir faire un truc du genre :

    MonFiltre = CoCreateInstance(
    CLSID_MyFilter, NULL, CLSCTX_INPROC_SERVER, IID_IBaseFilter, (void **)&pMyFilter);
    pGraphBuilder->AddFilter(pMyFilter, NULL);

    //Il n'existe qu'une pin pour mon filtre puisque cest le filtre source
    pMyFilter->EnumPins(&PinsList);
    PinsList->Reset();
    PinsList->Next(1, &Pin, &Fetched);
    PinsList->Release();

    pGraphBuilder->Render(&Pin);



    En bref, je crée mon filtre d'entrée que j'ajoute au graphbuilder, et je demande au graphbuilder de construire le liste des filtres a partir du pin de sortie de mon filtre (jusque la je dis pas de conneries?)
    Si j'ai bien ecrit mon filtre, le graphe va se construire tout seul en trouvant les filtres associés aux codecs qui vont bien et c'est gagné non?

    Et dans ce cas, je suis bloqué sur : comment écrit-on un filtre? qu'est ce qu'il doit faire exactement mon filtre?
    si j'ai juste raconté des conneries au dessus, qu'est ce que je dois faire (a part reprendre directshow a la base? )

  5. #5
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 36
    Par défaut
    Tout dépend d'où provient le son à l'origine car avant qu'il soit en mémoire comme tu le dis il provient bien de quelque part. Si il vient d'une webradio, je suppose que tu veux l'acquérir en direct c'est bien ça. Car je ne comprends pas trop de quelle mémoire tu fais allusion.
    Sinon avant de coder quoique ce soit, essaye de faire tourner l'application que tu souhaites développer sur grapheEdit pour voir si ça marche.

  6. #6
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 32
    Par défaut
    ce que je veux dire par "en mémoire", c'est que les données sont stockées dans la pile ou le tas de mon process.....avant d'arriver la, il proviendra d'une source quelconque...une webradio (donc avant d'être en mémoire, le flux est dans mon socket, et je devrais probablement décortiquer le flux de données mais c'est une autre histoire), serveur tcp (donc avant d'être en mémoire il sera dans mon socket tout simplement, donc j'aurais mes données dans un char* ou quelque chose comme ca), etc....
    En bref, ca sera pas dans un fichier....
    Sinon supposition toute bête, est ce que je peux faire un pGraph->RenderFile() sur un fichier tant que mon entête (entête mp3 par exemple) est correctement construite, et écrire dans le fichier en même temps que DShow lit le fichier avec un appel a pGraph->Run() ?

  7. #7
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 36
    Par défaut
    RenderFile et Run sont deux méthodes distinctes. La première permet de connecter automatiquement ton graphe au fichier de destination et la seconde permet de faire tourner ton graphe en entier, c'est à dire ton application. Si tu veux lire en même temps que capturer, il faut utiliser un filtre appelé SmartTee que l'on ajoute à la source pour effectuer ce que l'on appelle une preview. Ce filtre te permettra de dédoubler la sortie de ta source. Tu pourras connecter en sortie du SmartTee deux graphes, un qui capture, et un autre qui lit ce que tu es en train de capturer.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. lecture son sur une page html
    Par rachmout dans le forum Dreamweaver
    Réponses: 1
    Dernier message: 28/03/2008, 10h04
  2. problème son en streamming
    Par bastnt dans le forum Flash
    Réponses: 1
    Dernier message: 28/08/2007, 15h27
  3. Jouer fichier du son en streaming depuis un serveur
    Par morphisme dans le forum Multimédia
    Réponses: 2
    Dernier message: 07/07/2006, 02h54
  4. [JSP]Lecture Blob par streaming
    Par JohnBlatt dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 28/06/2006, 17h11
  5. Problème de lecture dans un stream!
    Par chrono23 dans le forum C++
    Réponses: 27
    Dernier message: 16/06/2006, 12h08

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