UWP MediaElement 不播放音乐

UWP MediaElement not play music

我正在实现一个播放本地音乐文件的音乐播放器。

我收到此错误消息,因为我的 MediaElement 失败了:

MF_MEDIA_ENGINE_ERR_SRC_NOT_SUPPORTED : HRESULT - 0x80070005

我该如何解决?这是我的 MediaElement。

<MediaElement
    x:Name="MediaPlayer"
    Grid.Column="1"
    AutoPlay="False"
    IsLooping="False"
    MediaEnded="MediaPlayer_MediaEnded"
    MediaFailed="MediaPlayer_MediaFailed"
    Volume="50" />

我尝试了 3 种播放音频的方法,但 none 对我有用。

var file = await StorageFile.GetFileFromPathAsync(music.Path);
MediaPlayer.Source = new Uri(music.Path, UriKind.Absolute);
//MediaPlayer.SetSource(await file.OpenReadAsync(), file.ContentType);
//MediaPlayer.SetSource(await file.OpenAsync(FileAccessMode.Read), file.ContentType);

music.Path(包含路径和音乐文件名)是正确的,因为我可以加载专辑封面缩略图。顺便说一句,音乐文件位于桌面中的某处,而不是资产文件夹中。

我想这里也有类似的问题:Mediaelement in Windows 8 Metro App

但我不明白为什么答案之一是打开选择器。我认为这不是我的解决方案,因为我只是播放本地文件夹下的所有音乐文件。

---更新---

我注意到当我播放资产音乐时 MediaElement 可以正确播放音乐。所以我想应该有播放本地音乐文件的解决方法?

我找到了解决办法。很简单。

关键部分是有一个包含要播放的音乐文件的 StorageFolder 对象(在我的代码中是 CurrentMusicFolder)。例如,我需要播放这个音乐文件:"C:\MusicFolder\Music.mp3"。所以我需要做:

StorageFolder CurrentMusicFolder = await StorageFolder.GetFolderFromPathAsync("C:\MusicFolder");
var file = await CurrentMusicFolder.GetFileAsync("Music.mp3");
MediaPlayer.SetSource(await file.OpenAsync(FileAccessMode.Read), file.ContentType);
MediaPlayer.Play();

注意音乐的路径是"Music.mp3"而不是"C:\MusicFolder\Music.mp3"。音乐路径中不能有类似 "C:\" 的东西。