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
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
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)
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
peut-être pas , il faudrait essayer ce code
pour vérifier qu'il est "enregistré"
Code : Sélectionner tout - Visualiser dans une fenêtre à part TMediaCodecManager.RegisterMediaCodecClass('.mp4', 'Video mp4', TMediaType.Video, TWindowsMediaCodec);
Code : Sélectionner tout - Visualiser dans une fenêtre à part if TMediaCodecManager.IsCodedExists('.mp4') then showmessage('codec ok') else showmessage('no mp4 codec');
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
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
Bonjour,
J'ai utilisé le code que SergioMaster a écrit pour lire une vidéo.
Contrairement à lui lorsque la vidéo se lance elle s'ouvre dans une fenêtre externe et non dans le form.
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.
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
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
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
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,
@+
Post Scriptum. Ce n'est pas la version de Delphi, je viens de recompiler mon code avec 10.2.3 : même rendu
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
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
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
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).
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager