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

C++Builder Discussion :

lire une video en TMemoryStream avec un TMediaPlayer


Sujet :

C++Builder

  1. #1
    Membre actif Avatar de Argol_Medusa
    Homme Profil pro
    Ingénieur Radiofréquences
    Inscrit en
    Août 2005
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Radiofréquences
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 208
    Points : 242
    Points
    242
    Par défaut lire une video en TMemoryStream avec un TMediaPlayer
    bonjour,

    j'ai le code suivant qui me permet d'intégrer un effet video/animation dans l'un de mes programmes.

    Problème : je suis obligé d'écrire sur le disque la video avant de la lire car je suis limité par le composant MediaPlayer1 qui ne veut pas lire depuis une TMemoryStream

    Quelqu'un sait-il s'il est possible de lire directement la memorystream sans passer par un fichier intermédiaire ( qui me fait perdre du coup l'avantage que j'avais de l'intégrer en ressource dans mon .EXE )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    	/*! Charger le film */
     
    	TMemoryStream *a;
    	a= new TMemoryStream();
     
    	// chargement de la video depuis les ressources
    	HRSRC hRsrc;
    	HGLOBAL hGlob;
     
    	hRsrc = FindResource(NULL, L"Video1", RT_RCDATA);
    	if (hRsrc == NULL)exit(EXIT_FAILURE);
     
    	hGlob = LoadResource(NULL, hRsrc);
    	if (hGlob == NULL)exit(EXIT_FAILURE);
     
    	a->Write(hGlob,	SizeofResource(NULL, hRsrc));
    	a->SaveToFile("patcheur.wmv");
    	delete a;
     
    	this->MediaPlayer1->FileName="test.wmv";
    	this->MediaPlayer1->Open();
    	this->MediaPlayer1->Position=0;
     
    	// memoriser la position de la fenetre de depart
    	Position_Fenetre_X=this->Left;
    	Position_Fenetre_Y=this->Top;
    Désolé, on savait pas que c'était impossible, alors on l'a fait

  2. #2
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Salut Argol_Medusa
    Regarde ce lien c'est malheureusement du Delphi en anglais, ca va peut etre t'aider
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  3. #3
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 455
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 455
    Points : 24 867
    Points
    24 867
    Par défaut
    Est-ce que CreateFile peut ouvrir un fichier issu d'un CreateFileMapping ?
    Si oui et si l'implémentation de MPlayer utilise CreateFile,
    faudrait aussi voir si FileName accepte un nom de fichier issu d'un CreateFileMapping\MapViewOfFile pour gérer une mémoire partagé nommée
    et au lieu de passer un "C:\\Dossier" tu passe un nom genre "Global\\MaMemoirePartage" !
    Mais j'ai peu d'espoir que cela soit possible

    Ce TMediaPlayerMemoryStream est très intéressant avec l'utilisation de mmioInstallIOProc

    Sinon DSPack doit savoir faire cela non ?
    On peut l'utiliser pour accéder plus facilement au couche base de DirectShow comme RenderStream dans ICaptureGraphBuilder2

    Enfin, le TAnimate gère des AVI via ResName !
    Des AVI basique, le format brut pas de compression genre MPEG !
    Si tu as seven, cherche FlickAnimation.avi
    Cela te donnera ce que donne une AVI Basique
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  4. #4
    Membre actif Avatar de Argol_Medusa
    Homme Profil pro
    Ingénieur Radiofréquences
    Inscrit en
    Août 2005
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Radiofréquences
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 208
    Points : 242
    Points
    242
    Par défaut
    Bonjour,

    tout d'abord merci à vous deux pour vos réponses.

    Un petite précision : le fichier à lire est un WMV avec un codec, donc pas possible d'utiliser un TAnimate malheureusement

    Je suis en train regarder ce composant TMediaPlayerMemoryStream (si ça ne donne rien je regarderai le DSpack )

    En fait si je comprends bien (suis en train de décrypter, je ne parle pas le delphi couramment ), ça consite à charger un dummy file, puis à modifier le contenu de la mémoire du TMediaPlayer en écrasant ses données avec nos données présentes dans un TMemoryStream.

    J'ai juste ou j'ai rien compris ?
    Désolé, on savait pas que c'était impossible, alors on l'a fait

  5. #5
    Membre actif Avatar de Argol_Medusa
    Homme Profil pro
    Ingénieur Radiofréquences
    Inscrit en
    Août 2005
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Radiofréquences
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 208
    Points : 242
    Points
    242
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      mmioInstallIOProc (mmioStringToFourCC (PChar (fExtension), 0), IOProc,
    MMIO_INSTALLPROC); // or MMIO_GLOBALPROC);
    Au passage je reste bloqué sur un pauvre cast dans le code indiqué par Blondelle ( mais en delphi du coup je ne connais pas la syntax )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Type imcompatibles : PAinsiChar et PWideChar
    Désolé, on savait pas que c'était impossible, alors on l'a fait

  6. #6
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 455
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 455
    Points : 24 867
    Points
    24 867
    Par défaut
    Sinon, tu peux inclure directement le fichier PAS dans un projet CPP, inutile de la traduire, il va te générer le HPP pour faire l'include et c'est réglé !

    Code delphi : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      mmioInstallIOProc (mmioStringToFourCC (PChar (fExtension), 0), IOProc,
    MMIO_INSTALLPROC); // or MMIO_GLOBALPROC);
    devient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     mmioInstallIOProc (mmioStringToFourCC (fExtension.c_str(), 0), IOProc,
    MMIO_INSTALLPROC); // or MMIO_GLOBALPROC);
    fExtension est une String, si tu n'as pas joué avec les options de projet
    Si tu as migré un projet 2007 et laisser le mappage char alors AnsiString
    Si nouveau projet ou alors mappage w_chart alors String ou UnicodeString

    Tu peux aussi appeler mmioStringToFourCCA ou mmioStringToFourCCW

    Faudra aussi voir IOProc ou &IOProc
    Même en Delphi, IOProc fonctionne mais aussi @IOProc
    N'oubli pas que IOProc est stdcall (WINAPI)
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  7. #7
    Membre actif Avatar de Argol_Medusa
    Homme Profil pro
    Ingénieur Radiofréquences
    Inscrit en
    Août 2005
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Radiofréquences
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 208
    Points : 242
    Points
    242
    Par défaut
    Ok, merci pour les infos, je vais essayer de compiler le code PAS en delphi directement alors comme tu le suggères, j'ai encore jamais fait.

    Par contre l'erreur de compilation est en delphi, c'est ce point qui me gène.

    Bref, je vais encore travailler dessus =)
    Désolé, on savait pas que c'était impossible, alors on l'a fait

  8. #8
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 455
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 455
    Points : 24 867
    Points
    24 867
    Par défaut A
    Ah l'erreur est depuis le PAS intégré !
    OK, je pensais que tu tentais de le traduire en C++ !

    Est-ce que le mappage CHAR du projet impacte le code Delphi ? j'en ai aucune idée !

    Comme, je le disais, remplace mmioInstallIOProc par mmioInstallIOProcA ou mmioInstallIOProcW, l'un des deux passera !
    Il sera prudent que tout soit W ou A ensuite !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

Discussions similaires

  1. [Python 2.X] Lire une video avec le binding VLC
    Par darksteph dans le forum Programmation multimédia/Jeux
    Réponses: 5
    Dernier message: 18/10/2014, 19h48
  2. Lire une video incomplète avec MediaElement
    Par hippo92210b dans le forum Développement Windows
    Réponses: 3
    Dernier message: 12/07/2010, 09h31
  3. [C#] Lire une video avec axwindowsmediaplayer
    Par padodanle51 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 15/05/2006, 11h37
  4. Pb pour lire une video
    Par polevault dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 09/01/2006, 00h21
  5. lire une video
    Par Tierisa dans le forum Access
    Réponses: 2
    Dernier message: 08/09/2005, 10h24

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