Delphi TMediaPlayer错误-不支持的媒体文件

Delphi TMediaPlayer错误-不支持的媒体文件,delphi,media-player,firemonkey,delphi-xe7,Delphi,Media Player,Firemonkey,Delphi Xe7,我正在尝试播放Firemonkey XE7 windows应用程序中的mp3文件。这应该是一个简单的任务,放置一个TMediaPlayer组件,分配一个.mp3文件,然后播放它。但是,我得到以下错误: Application Error Exception EReadError in module MediaPlayerTest.exe at 00000000000012139E. Error reading MediaPlayer1.FileName: Unsupported media fi

我正在尝试播放Firemonkey XE7 windows应用程序中的mp3文件。这应该是一个简单的任务,放置一个TMediaPlayer组件,分配一个.mp3文件,然后播放它。但是,我得到以下错误:

Application Error
Exception EReadError in module MediaPlayerTest.exe at 00000000000012139E.
Error reading MediaPlayer1.FileName: Unsupported media file testfile.mp3.
我也试过.wav,但也没用。 (已安装音频编解码器,windows media player可以成功播放媒体文件。)


然后我试着在另一台计算机上编译同样的程序,它可以被成功编译,mp3也可以正常播放


有人知道为什么它不在一台计算机上编译而在另一台计算机上编译吗?

我不熟悉XE7,但在早期版本中,TMediaplayer使用的是windows mediaplayer。因此,行为取决于计算机上实际安装的windows player版本。这解释了两台计算机上的不同行为。
您还可以使用外部播放器,如real player或其他。使用shellexecute启动外部播放器。第三方播放器提供了运行mp3的更多细节。

我有一些非常类似的错误

还有不止一种情况:

  • mp3有问题。有些Mp3是不受标准TMediaPlayer支持的。可能可以通过注册编解码器来修复(查看列表项目3)

  • 如果您试图使用TMedia,则在 您没有在代码的任何位置创建TMediaPlayer并填充 它的FileName属性。这很奇怪,因为
    TMediaCodecManager.registerDiacodeClass('.mp3',svmp3文件,
    TMediaType.Audio,TWindowsMediaCodec)
    FMX.Media正在使用中

  • 编解码器中的问题。您可以在FMX.Media.Win单元中找到示例,了解如何为您的应用注册新的编解码器


  • 希望这些信息能对您有所帮助。

    XE7使用DirectX进行音频/视频播放。您的directx安装可能有问题。我首先在VMWare虚拟机上注意到这个问题,TMediaPlayer无法播放任何不支持的文件类型。不过,在我的主机上运行的同一个程序运行良好


    尝试重新安装DirectX

    在虚拟机、主机中也存在同样的问题。。在其他几台电脑上测试,结果也一样。德尔菲法10.2

    我在FMX.Media.Win中找到了TWindowsMedia.initVideoMixingRender9,计算结果中包括:

    成功(FVMFilterConfig9.SetRenderingMode(VMR9Mode_Windowless))

    GetLastError返回126

    ERROR_MOD_NOT_FOUND
    126 (0x7E)
    The specified module could not be found.
    
    在VMR9Mode_Renderless中将该调用更改为pass可以工作(至少对我来说是这样)。我没有深入探究这件事的原因。我也只是在播放音频,没有视频


    我只是觉得我应该提供一个解决方案,以防它有所帮助。

    当安装在VM中时,它似乎是Direct X的一个限制。我安装了一个不同的媒体编解码器(),之后播放器运行良好,没有任何代码更改。此外,提交了一份报告,希望研发部门能够解决这一问题,“在另一台计算机上编译完全相同的程序”——在有问题的计算机上编译,然后在工作计算机上运行如何?这样行吗?这根本不应该是编译错误,而是运行时错误。“不编译”对于您提供的错误消息毫无意义。你明白“编译”的意思吗?你的问题不清楚。它显然可以在两台计算机上编译,或者您无法在其中一台计算机上成功运行它,而在另一台计算机上却出现运行时错误。您无法在未编译的代码上获得运行时错误。很抱歉,我没有完全理解编译的含义,因为我通常只需单击“运行”。如果我单独执行,程序会编译但不会运行(上面显示的异常除外)。如果该程序在另一台计算机上编译并在以前有问题的计算机上运行,它仍然可以完美地工作(在两台计算机上都播放声音)。听起来您需要进一步了解编程的工作原理。看起来(根据注释)表单的构造函数中正在运行代码,该构造函数正在尝试立即加载和播放文件。我们看不到你的代码,所以我们不知道你到底在做什么。您需要为我们提供一个非常简单的简短程序(代码),重新创建您的问题。即使这样,这似乎是一个我们很难找到的问题,即使我们有您的完整源代码。这肯定与Windows如何识别文件类型有关(基于您的问题描述)。此页()建议您使用wav。这一个()表明mp3是好的。我想你需要知道这个平台的编解码器支持是从哪里来的。这是firemonkey的答案吗?这是TMediaplayer Delphi的答案哪一个?FMX TMediaPlayer还是VCL TMediaPlayer?我在VCL(2009年及更早)方面的经验有限,但我也遇到过类似的问题,我花了很多时间,我认为值得一看windows player,因为它似乎在一台计算机上工作,而在一台计算机上不工作。你如何解释这可能是一个火猴问题?这是一个火猴问题。您所说的控件不是问题中的控件。我可以在使用VMWare 12.5.7的D10.2上确认这一点。目前还没有找到解决方案。有人知道更多吗?