我正在实现一个播放本地音乐文件的音乐播放器。
由于我的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可以正确播放音乐。因此,我想应该有一种解决方法来播放本地音乐文件?
答案 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:\”之类的东西。