UWP MediaElement无法播放音乐

时间:2019-08-09 15:48:49

标签: c# xaml uwp uwp-xaml

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

由于我的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种播放音频的方法,但没有一种对我有用。

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(包含路径和音乐文件名)是正确的,因为我可以加载专辑封面缩略图。顺便说一下,音乐文件位于桌面中的某个位置,而不位于Assets文件夹中。

我认为这里还有一个类似的问题:Mediaelement in Windows 8 Metro App

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

---更新---

当我播放Asset音乐时,我注意到MediaElement可以正确播放音乐。因此,我想应该有一种解决方法来播放本地音乐文件?

1 个答案:

答案 0 :(得分:1)

我找到了解决方案。很简单。

关键是要有一个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:\”之类的东西。