【问题标题】:TMediaPlayer Error - Unsupported Media FileTMediaPlayer 错误 - 不支持的媒体文件
【发布时间】:2015-05-08 17:53:11
【问题描述】:

我正在尝试从 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。

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

【问题讨论】:

  • “在另一台计算机上编译相同的程序” - 在有问题的计算机上编译然后在正常工作的计算机上运行呢?那样有用吗?这根本不应该是编译错误,而是运行时错误。 “不编译”对您提供的错误消息毫无意义。你明白“编译”是什么意思吗?
  • 您的问题不清楚。它显然在两台计算机上编译,或者您无法在一台计算机上成功运行它而在另一台计算机上出现运行时错误。 无法编译的代码不会出现运行时错误。
  • 很抱歉我没有完全理解编译的意思,因为我通常只是简单地点击运行。如果我单独执行,程序会编译但不会运行(上面显示的例外情况除外)。如果程序在另一台计算机上编译并在之前有问题的计算机上运行,​​它仍然可以完美运行(在两台计算机上播放声音)。
  • 听起来你需要更多地了解编程的工作原理。似乎(基于 cmets)您在表单的构造函数中运行了代码,该构造函数试图立即加载和播放文件。我们看不到您的代码,因此我们不知道您到底在做什么。您需要为我们提供一个非常简单的简短程序(代码)来重现您的问题。即便如此,这似乎是一个我们很难追查的问题,即使我们拥有您的完整源代码。这肯定与 Windows 如何识别文件类型有关(根据您的问题描述)。
  • 此页面 (docwiki.embarcadero.com/Libraries/XE7/en/FMX.Media.TMediaPlayer) 建议您需要使用 wav。这个 (docwiki.embarcadero.com/Libraries/XE7/en/…) 表明 mp3 很好。我想你需要知道这个平台的编解码器支持来自哪里。

标签: delphi media-player firemonkey delphi-xe7


【解决方案1】:

我对 XE7 不熟悉,但在早期版本中,TMediaplayer 使用的是 windows 媒体播放器。因此,该行为依赖于计算机上实际安装的 Windows 播放器版本。这解释了两台计算机上的不同行为。 您还可以使用外部播放器,例如真实播放器或其他播放器。使用 shellexecute 启动外部播放器。第三方播放器提供更多运行 mp3 的详细信息。

【讨论】:

  • 这是火猴的答案吗?
  • 这是一个 TMediaplayer Delphi 答案
  • 哪一个? FMX TMediaPlayer 还是 VCL TMediaPlayer?
  • 我的经验仅限于 vcl(2009 年及更早版本),但我有类似的问题,我花了很多时间,我认为值得看看 windows 播放器,因为它似乎工作一台计算机和一台计算机上没有。你如何解释这可能是一个火猴问题?
  • 这是一个 FireMonkey 问题。您所说的控件不是问题中的控件。
【解决方案2】:

我遇到了一些非常相似的错误。

而且还有不止一种情况:

  1. mp3 中的问题。标准 TMediaPlayer 不支持某些 Mp3。可能可以通过注册您的编解码器来修复(查看列表项 3)

  2. 如果您尝试使用 TMedia,您将无法打开任何媒体文件,直到 您没有在代码的任何地方创建 TMediaPlayer 并填写 它的 FileName 属性。这很奇怪,因为 TMediaCodecManager.RegisterMediaCodecClass('.mp3', SVMP3Files, TMediaType.Audio, TWindowsMediaCodec); 被调用,如果你有 FMX.Media 在使用中。

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

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

【讨论】:

    【解决方案3】:

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

    尝试重新安装 DirectX。

    【讨论】:

    • 我可以在 D10.2 上使用 VMWare 12.5.7 确认这一点。还没有找到解决这个问题的办法。有人知道更多吗?
    【解决方案4】:

    同样的问题在虚拟机中,主机..在其他几台 PC 上也进行了测试,结果相同。德尔福 10.2.

    我在 FMX.Media.Win 中追踪到 TWindowsMedia.InitVideoMixingRenderer9,其中包括计算结果:

    成功(FVMRFilterConfig9.SetRenderingMode(VMR9Mode_Windowless));

    GetLastError 返回 126,

    ERROR_MOD_NOT_FOUND
    126 (0x7E)
    The specified module could not be found.
    

    更改该调用以传入 VMR9Mode_Renderless 有效(至少对我而言)。我没有深入研究为什么/是什么。我也只是播放音频,没有视频。

    只是想我会传递一个解决方法,以防万一有用。

    【讨论】:

      【解决方案5】:

      安装在 VM 中时,它似乎是 Direct X 的限制。我安装了一个不同的媒体编解码器 (the basic k-lite codec pack),之后播放器运行良好,没有任何代码更改。另外,提交了bug report,希望研发能够解决它

      【讨论】:

        猜你喜欢
        • 2020-05-12
        • 2014-11-11
        • 2018-10-13
        • 2018-07-25
        • 2016-09-09
        • 2017-08-28
        • 1970-01-01
        • 2015-08-11
        • 2015-06-18
        相关资源
        最近更新 更多