You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

UWP MediaElement播放本地音乐失败:MF_MEDIA_ENGINE_ERR_SRC_NOT_SUPPORTED错误修复

解决UWP MediaElement播放本地桌面音乐文件的权限错误

这个错误 MF_MEDIA_ENGINE_ERR_SRC_NOT_SUPPORTED : HRESULT - 0x80070005 本质是UWP沙箱权限限制导致的——你的应用默认没有访问桌面这类应用包外目录的权限,而Assets文件夹属于应用包内部,所以能正常播放。下面是具体的解决方案:

一、先配置文件访问权限

根据你的需求(批量播放本地任意文件夹音乐),有两种权限配置方式:

1. 访问系统音乐库

如果你的音乐都放在系统音乐库,只需在Package.appxmanifest中添加音乐库权限:

<Capabilities>
  <!-- 保留其他已配置的权限 -->
  <Capability Name="musicLibrary" />
</Capabilities>

2. 访问任意文件夹(如桌面、自定义文件夹)

如果要播放桌面或其他非系统库的文件夹,需要开启BroadFileSystemAccess权限:

  1. 在Package.appxmanifest中添加权限声明:
return (<Capabilities>
  <!-- 保留其他已配置的权限 -->
  <uap:Capability Name="broadFileSystemAccess" />
</Capabilities>
)
2. 手动开启系统权限:打开Windows设置 → 应用 → 找到你的UWP应用 → 权限 → 文件系统 → 勾选“允许此应用访问你的文件”。

## 二、使用正确的播放代码
UWP沙箱禁止直接通过本地路径Uri访问外部文件,必须通过`StorageFile`获取文件流后调用`SetSource`方法:
```csharp
// 假设music是你获取到的音乐文件信息
var file = await StorageFile.GetFileFromPathAsync(music.Path);
// 获取文件可读流
var fileStream = await file.OpenAsync(FileAccessMode.Read);
// 设置MediaElement的源并播放
MediaPlayer.SetSource(fileStream, file.ContentType);
MediaPlayer.Play();

三、批量播放的实现思路

要批量播放本地文件夹音乐,建议通过StorageFolder遍历文件夹内的文件:

// 示例:获取桌面文件夹(需要BroadFileSystemAccess权限)
StorageFolder targetFolder = KnownFolders.Desktop;
// 获取文件夹内所有音乐文件(可通过文件扩展名过滤)
var musicFiles = await targetFolder.GetFilesAsync(CommonFileQuery.OrderByName);

// 遍历文件,可将文件对象存储到播放列表中
foreach (var file in musicFiles)
{
    // 这里可将file添加到自定义的播放列表集合中
    // 播放时直接调用SetSource即可
}

为什么之前的Uri方式不行?

UWP的Uri方式仅支持两种场景:

  • 访问应用包内资源(如ms-appx:///Assets/test.mp3)
  • 访问通过FileOpenPicker选择的文件(选择器会临时授予应用该文件的访问权限)

而直接使用本地绝对路径(如C:\Users\XXX\Desktop\test.mp3)会被沙箱拦截,因为应用没有对应的访问权限,这就是你报错的核心原因。

内容的提问来源于stack exchange,提问作者user10634280

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 06:34:57