【问题标题】:MediaPlayer cannot play file names without an extensionMediaPlayer 无法播放没有扩展名的文件名
【发布时间】:2014-09-30 16:52:23
【问题描述】:

当我尝试播放没有文件扩展名的 本地文件 时,组件 System.Windows.Controls.MediaElement 失败,并出现 FileNotFoundException 提示 “媒体文件下载失败。”:null。内部异常是带有 HResult 0xC00D0FEA 的 System.Runtime.InteropServices.COMException

我用WebClient.DownloadData(Uri)尝试了分配给MediaPlayer.Source的Uri,无论是uri还是返回的数据都没有问题。

更新: 虽然我首先专注于为什么new Uri(@"c:\temp\filename.") 在最终将文件重命名为“filename.data”之后才变成file:///c:/temp/filename(吞下尾随点),但仍然抛出了同样的异常。我假设 WPF(使用最新技术 Media Foundation)使用文件扩展名,而不仅仅是解析文件数据。 掌心

【问题讨论】:

  • 尝试添加“.”到您提供给MediaElement 控件的文件名的末尾。
  • @PeterRitchie 这不会改变任何东西。实际上 Uri 构造函数针对“\\server\share\dir\filenamewithoutextension”。只是忽略/杀死尾随点(.net 4.5.2)
  • 该错误表明它在尝试下载时添加了扩展名(或者,没有扩展名的文件实际上不在 URI 中)。如果您知道媒体文件的类型,请尝试重命名或将其复制到具有适当扩展名的路径并尝试使用该新 URI。
  • @springy76,你有没有尝试过我的解决方案“添加 MIME 类型”,这可能会有所帮助!
  • 请仔细看:我说的是本地文件系统文件。

标签: c# .net wpf


【解决方案1】:

问题在于媒体播放器使用 DirectShow 过滤器来加载文件。 如果没有扩展,它不知道使用哪个过滤器。

如果您尝试打开没有注册方案的流,则会出现同样的错误。

方案保存在HKEY_CURRENT_USER\Software\Microsoft\MediaPlayer\Player\Schemes

通过在此处添加一个方案,它可以在 MediaPlayer 中打开(只要打开了正确的过滤器)

【讨论】:

  • 同一个应用程序已经在使用本机 DirectShow 将位图帧渲染到内存,我可以告诉你 DirectShow 不关心文件扩展名(我只在那里使用 Streams)。 WPF 的“MediaPlayer”使用 Media Foundation,它是 DirectShow 的并行框架。
猜你喜欢
  • 1970-01-01
  • 2021-05-01
  • 1970-01-01
  • 2016-12-24
  • 2017-10-13
  • 2012-12-24
  • 2019-12-26
  • 1970-01-01
  • 2015-07-23
相关资源
最近更新 更多