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 :

Afficher une vidéo mp4 dans un TMediaPlayer sous FMX Windows


Sujet :

Composants FMX Delphi

  1. #1
    Membre régulier
    Afficher une vidéo mp4 dans un TMediaPlayer sous FMX Windows
    Bonjour,

    tout est dans la question. J'ai téléchargé un exemple dans sourceforge.
    Il date de 2014. Il me permet d'afficher une vidéo avi mais pas mp4 : Unsupported media fule ****.mp4.

    J'ai lu cela. Sans conviction .

    Merci pour votre aide. Cordialement. Gilles
    Windows, Linux, mac OS X ► Qt - FMX - Lazarus || Androïd, iOS ►FMX - Qt - Windev Mobile - Autres

  2. #2
    Expert éminent sénior
    Et tu es en quelle version Delphi ?
    En D10, mp4 est supporté par TWindowsMediaCodec* et TQTMediaCodec
    En DXE3, mp4 n'est pas dans les extensions supporté par TWindowsMediaCodec mais uniquement par TQTMediaCodec
    En DXE2, cette classe n'est pas du tout (en fait, il manque tout le TMediaPlayer)

    * l'implémentation de TWindowsMediaCodec tourne autour de IGraphBuilder , il faudrait vérifier si tu as un bien IFilterGraph installé pour l'extension mp4 (ce n'est pas forcément le cas)
    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 régulier
    Citation Envoyé par ShaiLeTroll Voir le message
    Et tu es en quelle version Delphi ?
    * l'implémentation de TWindowsMediaCodec tourne autour de IGraphBuilder , il faudrait vérifier si tu as un bien IFilterGraph installé pour l'extension mp4 (ce n'est pas forcément le cas)
    Bonjour,

    ce n'est pas le cas visiblement et mon Windows 10 est installé par défaut. Ce qui sous-entend qu'il faut modifier cette installation par défaut pour que mon Delphi 10.3.3 puisse "visionner" des fichiers mp4 et celles des postes sur lesquelles aurait dû fonctionner l'application.

    Merci pour le renseignement. Je n'irai donc pas plus loin.
    Cordialement. Gilles
    Windows, Linux, mac OS X ► Qt - FMX - Lazarus || Androïd, iOS ►FMX - Qt - Windev Mobile - Autres

  4. #4
    Rédacteur/Modérateur

    Bonjour Gilles,

    encore une fois tu as excité ma curiosité, cela sort du domaine de mon boulot quotidien.
    Du coup j'ai rapidement fait un essai Rio 10.3.3 donc
    un programme hyper simple, cible windows
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    unit Unit102;
     
    interface
     
    uses
      System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
      FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls,
      FMX.Edit, FMX.Media, FMX.Controls.Presentation;
     
    type
      TForm102 = class(TForm)
        MediaPlayer1: TMediaPlayer;
        Edit1: TEdit;
        MediaPlayerControl1: TMediaPlayerControl;
        EllipsesEditButton1: TEllipsesEditButton;
        OpenDialog1: TOpenDialog;
        procedure EllipsesEditButton1Click(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form102: TForm102;
     
    implementation
     
    {$R *.fmx}
     
    procedure TForm102.EllipsesEditButton1Click(Sender: TObject);
    var media : TMedia;
    begin
    if Opendialog1.execute then
     begin
       Edit1.Text:=ExtractFileName(Opendialog1.FileName);
        MediaPlayer1.FileName:=Opendialog1.FileName;
       Mediaplayer1.Play;
     end;
    end;
     
    end.




    au début même erreur, mais j'ai tout de suite penché pour un manque de codec (ces drôles de petites bêtes que l'on a évoqué d'autres fois mais pour écouter une Radio en Live)
    J'ai alors installé un ensemble de codecs trouvé ici
    et


    Cela dit, si cela fonctionne sous windows je ne saurais dire s'il en va de même pour les autres OS.
    Il y a une gestion de codecs avec TMediaCodecManager qui mérite que l'on s'attarde dessus (et qui nécessite de lire de la doc)
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein

    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Tokyo, Rio) et peut être quelques autres
    SGBD : Firebird 2.5, 3, SQLite
    générateurs Etats : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Ubuntu, Androïd

  5. #5
    Rédacteur/Modérateur

    Citation Envoyé par Selzig Voir le message

    ce n'est pas le cas visiblement et mon Windows 10 est installé par défaut. Ce qui sous-entend qu'il faut modifier cette installation par défaut pour que mon Delphi 10.3.3 puisse "visionner" des fichiers mp4 et celles des postes sur lesquelles aurait dû fonctionner l'application.
    peut-être pas , il faudrait essayer ce code
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    TMediaCodecManager.RegisterMediaCodecClass('.mp4', 'Video mp4', TMediaType.Video, TWindowsMediaCodec);

    pour vérifier qu'il est "enregistré"
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    if TMediaCodecManager.IsCodedExists('.mp4') then showmessage('codec ok') else showmessage('no mp4 codec');
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein

    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Tokyo, Rio) et peut être quelques autres
    SGBD : Firebird 2.5, 3, SQLite
    générateurs Etats : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Ubuntu, Androïd

  6. #6
    Expert éminent sénior
    Dans XE10, TWindowsMediaCodec est automatiquement ajouté pour plusieurs types dont mp4 via TMediaCodecManager.RegisterMediaCodecClass dans la section initialization de FMX.Media.Win, cette unité est implicitement ajouté au projet si l'on est en projet MSWINDOWS via FMX.Media

    Il manque une fonction IsCodecInstalled qui irait vérifier dans l'implémentation courante de TCustomMediaCodec si le codec système est disponible

    l'erreur SMediaFileNotSupported = 'Fichier media %s% non supporté'; ou SMediaFileNotSupported = 'Unsupported media file %s%'; se produit lorsque le TWindowsMediaCodec échoue lors d'un appel des interfaces de IGraphBuilder
    La classe TWindowsMediaCodec est une Factory de TMedia, si ce message se produit c'est qu'elle "recensée" mais pas forcément que le codec soit installé

    une extension non enregistrée ne produira pas de TMedia interne lors du SetFileName, sans message
    Idem, le Play n'ayant pas de TMedia interne ne fera rien

    le mp4 n'est pas considéré comme natif (puisqu'il faut un codec supplémentaire)

    Les formats des fichiers multimédia pris en charge correspondent aux formats natifs de chaque plate-forme :

    Pour Windows :
    Formats audio : .wma, .mp3, .wav
    Formats vidéo : .avi, .wmv
    Pour OS X :
    Formats audio : .mp3
    Formats vidéo : .mov, .m4v, .mp4

    Remarque : Les codecs multimédia FireMonkey incorporés nécessitent que le système d'exploitation de votre ordinateur/périphérique ait les capacités de décodage appropriées pour décoder le fichier avec succès.
    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
    Candidat au Club
    Bonjour,
    J'ai utilisé le code que SergioMaster a écrit pour lire une vidéo.
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    uses
      System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
      FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls,
      FMX.Media, FMX.Controls.Presentation, FMX.Edit;
     
    type
      TForm7 = class(TForm)
        MediaPlayer1: TMediaPlayer;
        Edit1: TEdit;
        MediaPlayerControl1: TMediaPlayerControl;
        Button1: TButton;
        OpenDialog1: TOpenDialog;
        procedure Button1Click(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form7: TForm7;
     
    implementation
     
    {$R *.fmx}
     
    procedure TForm7.Button1Click(Sender: TObject);
    var media : TMedia;
    begin
    if Opendialog1.execute then
     begin
       Edit1.Text:=ExtractFileName(Opendialog1.FileName);
        MediaPlayer1.FileName:=Opendialog1.FileName;
       Mediaplayer1.Play;
     end;
    end;
     
    end.

    Contrairement à lui lorsque la vidéo se lance elle s'ouvre dans une fenêtre externe et non dans le form.
    J'ai téléchargé les codecs que SergioMaster avez mis en lien dans sa réponse. Est ce un problème de version de fmx ou de direct X ou j ai oublié quelque chose?
    J'utilise fmx avec delphi 10.3.2 sous windows 10.
    Merci d'avance pour votre aide.
    Nicolas

  8. #8
    Rédacteur/Modérateur

    Bonjour,

    Impossible de vérifier puisque ma version 10.3.3 a écrasé la version 10.3.2.
    Quant à mon système :
    Windows 10 64 bits version 1903,
    Direct3D® Version - 9.14.10.01399
    OpenGL® Version - 26.20.11000.13559
    Direct X Version 12

    le mieux est d'essayer de compiler ma version (zip joint) et de voir si cela fonctionne et si c'est le cas trouver les différences
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein

    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Tokyo, Rio) et peut être quelques autres
    SGBD : Firebird 2.5, 3, SQLite
    générateurs Etats : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Ubuntu, Androïd

  9. #9
    Membre éprouvé
    Bonjour,


    quand je me suis intéressé au Tethering je suis tombé sur cet exemple (entre autre):
    "\Samples\Object Pascal\RTL\Tethering\MediaPlayer\MediaPlayerHD\MediaPlayerHD.dpr"
    tout fonctionne parfaitement et le rendu est dans la fenêtre principale.
    avec les codecs Windows MediaPlayer à jours bien sûr
    D'ailleurs avec ces codecs je peux aussi lire les mkv mp4 etc. sur le MediaPlayer classique de la VCL de D7 à 10.3
    ça nécessite toute fois une petite modification du code !

    si ça peut aider

    Cordialement,

    @+

  10. #10
    Rédacteur/Modérateur

    Post Scriptum. Ce n'est pas la version de Delphi, je viens de recompiler mon code avec 10.2.3 : même rendu
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein

    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Tokyo, Rio) et peut être quelques autres
    SGBD : Firebird 2.5, 3, SQLite
    générateurs Etats : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Ubuntu, Androïd

  11. #11
    Candidat au Club
    Bonjour,

    SergioMaster, tu as raison c'est pas la version de delphi, j ai désinstallé et réinstallé les codec et mis a jour directX et ça fonctionne.
    Merci beaucoup de votre aide

  12. #12
    Rédacteur/Modérateur

    Bonjour,
    Citation Envoyé par vuillen Voir le message
    j'ai désinstallé et réinstallé les codec et mis à jour directX et ça fonctionne.
    Dommage on ne saura jamais s'il s'agissait de DirectX (mon avis) ou des codecs.
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein

    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Tokyo, Rio) et peut être quelques autres
    SGBD : Firebird 2.5, 3, SQLite
    générateurs Etats : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Ubuntu, Androïd

  13. #13
    Membre éprouvé
    Citation Envoyé par SergioMaster Voir le message
    Bonjour,

    Dommage on ne saura jamais s'il s'agissait de DirectX (mon avis) ou des codecs.
    je dirais "des codecs" chez moi DirectX 11 & Win7

    Cordialement,

    @+

  14. #14
    Membre éprouvé
    En général le problème vient de l'absence des codec dans l'OS : le player n'interprète pas lui-même la vidéo, il passe par les API du système d'exploitation et par conséquent si celui-ci ne peut gérer le format, Delphi ne le pourra pas.

    Deux autres solutions sont possibles selon les cas :
    - utiliser Chromium embarqué ou un TWebBrowser pour ouvrir le fichier local ou sous forme d'URL, avec un peu de bol ça doit passer
    - utiliser la DLL clients de VLC qui permet d'ouvrir une vidéo dans une zone d'écran. un auto pour la VCL existe, je n'ai pas encore testé un équivalent sous FMX (qui ne fonctionnerait que sous Windows si ça passe).