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

Composants FMX Delphi Discussion :

TMediaPlayerControl n'est pas un vrai Tcontrol


Sujet :

Composants FMX Delphi

  1. #1
    Membre à l'essai
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Janvier 2012
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 43
    Points : 21
    Points
    21
    Par défaut TMediaPlayerControl n'est pas un vrai Tcontrol
    Bonsoir,

    Tout ceux qui, comme moi, on posé un TmediaPlayerControl sur un Tlayer3D on du être plutôt désappointé.
    Si quelqu'un sait comment conférer au TmediaplayerControl un vrai comportement de TControl ,ca m'interesse.
    Sinon, qq sait-il si l'on peut intercepter le TMediaPlayer (l'objet non visuel source de média) avec un TDeviceCaptureManager afin de rediriger la capture video sur un vrai TControl (genre http://shelf3d.com/ZkJiY2K1d9w)

    Merci

    Emmanuel

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    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 459
    Points : 24 873
    Points
    24 873
    Par défaut
    TMediaPlayerControl est un FMX.TControl, il doit par contre utiliser le média player de l'OS, il doit y avoir un lien avec DirectDraw ...
    Pour DirectDraw, cela utilise le Handle du Control pour dessiner, j'ignore l'implémentation FMX mais sous Windows on peut la penser proche.
    Le TLayer3D qui héberge ton composant 2D a été surement conçu pour les composants dessinés via un FMX.TCanvas, mais le MediaPlayer Windows et DirectDraw en général pour les flux vidéo dessine dès que l'on active, il y a surement une perte de la mise en tampon de l'image du composant 2D devant être transposé dans son contexte 3D

    Ton écran est complexe ?
    As-tu autour de TLayer3D d'autre éléments ?

    Si c'est juste un écran 2D dans une appli 3D, faudrait tenter de faire une petite DLL en FMX HD qui contient ton MediaPlayer, ton application FMX 3D lorsque c'est nécessaire invoque ta DLL FMX HD pour afficher la vidéo (hors du contexte 3D)
    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

  3. #3
    Membre à l'essai
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Janvier 2012
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 43
    Points : 21
    Points
    21
    Par défaut
    As tu déjà fais un simple test avec le TmediaPlayerControl ?
    Tu verras alors qu'il ne s'affiche pas dans dans son layer parent mais directement sur le screen (les coordonnées relative au screen sont celle definis en local), et ce quelque soit la complexité du layer. Prend juste un tmediaplayercontrol,pose le sur un layer3D (en mode caméra) et lance l'appli...
    Je maintiens que le TmediaPlayerControl n'a pas été conçu comme un tcontrol classique (par exemple, pas de propriétés publiée rotation,scale ...)
    Pour, moi la solution actuelle est de récuperer le flux vidéo avec un deviceManager et ensuite de le peindre sur un vrai TControl, mais je ne vois pas comment faire.

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 045
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 045
    Points : 40 963
    Points
    40 963
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    Intrigué , j'ai fait le test et , effectivement quelle surprise !
    j'avais mis 2 Layer3d , un aligné en haut de ma Forme , à la manière d'un panneau de contrôle , avec des boutons pour les rotations
    et un autre Layer contenant 1 bouton pour charger la video et un mediaplayerControl .

    Je fais tourner mon Layer2 avant de lancer la vidéo : média player s'en bas l’œil et me rend la vidéo bien droite dans ses bottes ! dommage , je voulais la voir tête en bas ! pire la vidéo ne se positionne pas dans le layer défini mais par rapport a la fenêtre cliente ! (j'avais mis un align=alclient) et ne se redimensionne pas !

    Le titre du sujet est peut être mal choisi , je dirais que TMediaControlPlayer est un control qui n'a qu'un seul parent : la forme
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  5. #5
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    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 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Citation Envoyé par ed973 Voir le message
    As tu déjà fais un simple test avec le TmediaPlayerControl ?
    Non ! J'ai aussi mon propre travail ! J'avoue que je n'ai pas eu le courage de fermer mon projet pour juste tester ça

    J'ai juste extrapoler mes connaissances VCL des flux vidéo H264 via DirectDraw utilisant un handle sur FMX !
    En fait, que cela fonctionne m'aurait vraiment surpris !

    D'ailleurs, ta description du bug est en parfait accord avec ma pratique de DirectDraw et je ne suis pas du tout surpris qu'il utilise pour afficher la vidéo le Handle de la fenêtre (le seul qui existe, le reste n'est que du dessin 3D sans handle)
    Faudrait tester sous Mac, il est possible que l'effet soit différent, l'API vidéo n'était pas du tout la même !

    Citation Envoyé par ed973 Voir le message
    Pour, moi la solution actuelle est de récuperer le flux vidéo avec un deviceManager et ensuite de le peindre sur un vrai TControl, mais je ne vois pas comment faire.
    A mon avis, Embarcadero non plus !
    Si Embarcadero l'avait voulu, ils aurait pu mettre en place une implementation Windows spécifique, comme en bidouillant un TControl\TControlCanvas virtuel fournissant le handle windows, celui-ci via un TControlCanvas fourni le DC pour le dessin, il aurait servi de buffer, ensuite le TmediaPlayerControl aurait du lire régulièrement le buffer, le problème c'est que l'on ne peut pas bloquer le dessin de DirectDraw, on n'est pas notifié des trames qui arrivent, on aurait droit à une bouilli d'image (genre le début d'une et la fin d'une autre) ou de belle VA !

    Il te faudrait dans ton code récupérer le flux vidéo genre du H264, MPEG Truc ... et utiliser un codec pour traduire ces données compressé en pixel, ça demande une connaissance des formats vidéo plus poussé que l'utilisation d'un simple TmediaPlayerControl

    FMX est construit un peu partout comme ça, ce sont des classes intermédiaires fournissent l'implémentation selon l'OS cible (c'est très lisible pour la gestion du JPEG)
    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

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 045
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 045
    Points : 40 963
    Points
    40 963
    Billets dans le blog
    62
    Par défaut
    Après avoir réfléchi et testé différents trucs sans résultat (j'ai essayé une récupération par un TRectF, des assignations de canvas etc...) . Il est dommage que un TCamera fonctionne si facilement juste en implémentant l'event OnSampleBufferReady et qu'il n'y ai rien d'équivalent pour des videos déjà existante à moins qu'il y ait une astuce de déclaration de device


    Je pense que la solution consisterait a récupérer les frames directement dans le fichier . Problème les sources trouvées pour 'découper' en bmp les AVI ou autres sont vieux (voir par exemple sur efg2.com)
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  7. #7
    Membre à l'essai
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Janvier 2012
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 43
    Points : 21
    Points
    21
    Par défaut
    Bon, on sait au moins que ce n'est pas simple.
    Curieux que l'on ne puisse pas émuler une 'webcam' virtuelle qui serait la source du fichier vidéo, vu que FireMonkey se débrouille très bien avec le flux provenant de WebCam par exemple.
    Quelqu'un connait TVideoGrabber ? Avec la VCL, il faut des choses assez poussées.

  8. #8
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 045
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 045
    Points : 40 963
    Points
    40 963
    Billets dans le blog
    62
    Par défaut
    Moi j'ai testé rapidement* ffmpeg qui semblerait répondre a tes besoins
    http://www.delphiffmpeg.com/downloads/

    *rapidement , cela veut dire que j'ai testé la compilation de leurs démos , mais je n'ai pas réussi (en 30mn) a en faire une appli 3D , il y a semble t-il quand même pas mal de chose a maitriser avant de passer à l'affichage (chargement des bibliothèques etc...)

    ces composants sont bien évidemment payant mais je me demande si ce n'est pas une 'encapsulation' d'un ensemble de lib visibles ici http://www.ffmpeg.org/about.html
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  9. #9
    Membre à l'essai
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Janvier 2012
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 43
    Points : 21
    Points
    21
    Par défaut
    Je vais y aller tout de suite. Merci pour l'info
    Je tiens le forum au courant.

  10. #10
    Membre à l'essai
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Janvier 2012
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 43
    Points : 21
    Points
    21
    Par défaut
    Ca le fait ! Ca le fait même trés bien (si on excepte une exception block memoire déclenchée à la fermeture de l'appli)
    Encore merci pour le lien,

    Sur ce,je vais me coucher.

  11. #11
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 045
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 045
    Points : 40 963
    Points
    40 963
    Billets dans le blog
    62
    Par défaut
    au réveil , si tu pouvais me (nous) montrer le code de l'affichage que tu a utilisé ce serait le top

    [Edit] Pour info je me suis planté ce n'est pas une encapsulation de FFMPEG contrairement a ce que le nom aurait pu faire penser , mais d'autres bibliothèques . Il serait intéressant de proposer une encapsulation de ces biblios mais franchement je m'en sens pas la capacité (trop fort pour moi)
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  12. #12
    Membre à l'essai
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Janvier 2012
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 43
    Points : 21
    Points
    21
    Par défaut
    Au réveil aussi
    Pour l'instant j'ai juste bidouillé leur exemple firemonkey (le .../FXPlayerDemo/FXPlayerDemo_DelphiXE3ProFMX).Pour ceux qui ne connaisse pas le compo, il utilise a priori n'importe quel control visuel pour peindre le flux video dessus. Ici,c'est un TImage.
    Pour mon test, j'ai placé dans l'exemple existant un TViewPort3D,intégrant un TLayer3D auquel j'adjoint comme enfant le Timage cible du flux vidéo. Je controle la rotation du layer par des TrackBar,et tout fonctionne trés bien (sur un format qui ne mange pas trop de ressources)

    Dés que j'ai codé quelque chose de propre,je vous en fais part.
    Encore bravo pour le lien

    Emmanuel

  13. #13
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    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 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Citation Envoyé par ed973 Voir le message
    Dés que j'ai codé quelque chose de propre,je vous en fais part.
    Encore bravo pour le lien
    Il ne faudra pas oublier d'acheter cette Lib un fois la trial expirée
    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. [AC-2002] Me.OpenArgs Null alors que ce n'est pas vrai
    Par jaffael dans le forum VBA Access
    Réponses: 3
    Dernier message: 08/06/2009, 17h32
  2. Programmer encore en VB 6 c'est pas bien ? Pourquoi ?
    Par Nektanebos dans le forum Débats sur le développement - Le Best Of
    Réponses: 85
    Dernier message: 10/03/2009, 14h43
  3. Connexion ouverte alors que c'est pas vrai
    Par zooffy dans le forum ASP.NET
    Réponses: 13
    Dernier message: 05/05/2008, 09h56
  4. Réponses: 3
    Dernier message: 16/06/2003, 16h51
  5. Index n'est pas a jour
    Par touhami dans le forum Paradox
    Réponses: 5
    Dernier message: 11/12/2002, 14h47

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