1

我有一个特定于我的应用程序的场景。我正在为我的 Metro 应用程序管理 XML 格式的音乐文件播放列表。它保存音乐文件的实际路径是这样的

D:\MyMedia\1.mp3

我的 XAML 页面中有媒体元素,我正在像这样设置它的源。

 mediaElement.Source = new Uri(@"D:\MyMedia\1.mp3", UriKind.Absolute);
 mediaElement.Play();

但它没有播放媒体并且它给出了这样的错误

MF_MEDIA_ENGINE_ERR_SRC_NOT_SUPPORTED : HRESULT - 0x80070005

所以有人告诉我如何使用绝对路径在 Metro 应用程序的 MediaElement 中播放一些媒体文件。或者我如何获取本地文件流以在 Metro 应用程序的 mediaElement 中播放此媒体。

4

4 回答 4

4

要在本地系统上打开文件,您可以使用 FileOpenPicker 获取文件并使用 SetSource 设置媒体源。

var openPicker = new Windows.Storage.Pickers.FileOpenPicker();

openPicker.FileTypeFilter.Add(".mp3");
var file = await openPicker.PickSingleFileAsync();

var stream = await file.OpenAsync(Windows.Storage.FileAccessMode.Read);

if (null != file)
{
    mediaElement.SetSource(stream, file.ContentType);
    mediaElement.Play();
}
于 2013-06-30T10:50:59.423 回答
0

您只能访问用户 PC 上有限数量的位置。“D:\Mymedia”不是其中之一。您将在 Microsoft 帮助中找到所有必要的信息。看看这两篇文章:

于 2013-06-30T21:03:04.210 回答
0

这可以在没有文件选择器的情况下完成。您只需将音乐库功能添加到应用清单中,确保音乐在“我的音乐”或 SD 卡中,并使用 KnownFolders.MusicLibrary。

简而言之,与问题的音乐主题保持一致:

“你可能会认为文件选择器......

...但我只需要 StorageFile"

    //
    // Opens and plays song titled "[Cars]You_Might_Think.mp3"
    // in the 80s folder.
    //
    // IMPORTANT: the example song must be in the user's Music
    // folder or SD card to be found.   Also, the app manifest
    // must have 'Music Library' capabilities enabled.
    //
    // 
    //
    async void OpenAndPlayAwesomeSongFromThe80s()
    {            
        Windows.Storage.StorageFolder folder = KnownFolders.MusicLibrary;

        StorageFile song = await folder.GetFileAsync("80s\\[Cars]You_Might_Think.mp3");

        if (song != null)
        {
            IRandomAccessStream stream = await song.OpenAsync(Windows.Storage.FileAccessMode.Read);

            if (stream != null)
            {
                mediaElement = new MediaElement();
                mediaElement.SetSource(stream, song.ContentType);
                mediaElement.Play();
            }
        }
    }
于 2015-06-22T06:02:58.440 回答
0

我知道这是一个老问题,我找到了一个非常简单的解决方案..

Windows.Storage.StorageFile file = null;
mediaElement player = new MediaElement();


    async Task PlayAsync()
    {
        if (file == null)
        {
            file = await OpenFileAsync();

            try { player.MediaOpened -= Player_MediaOpenedAsync; } catch { }
            try { player.MediaEnded -= Player_MediaEnded; } catch { }
            try { player.MediaFailed -= Player_MediaFailed; } catch { }

            player.MediaOpened += Player_MediaOpenedAsync;
            player.MediaEnded += Player_MediaEnded;
            player.MediaFailed += Player_MediaFailed;

            player.SetPlaybackSource(MediaSource.CreateFromStorageFile(file)); //Works with media playback..
            //player.Source = new Uri(mediasource, UriKind.RelativeOrAbsolute); //Doesn't work with media playback for some reason..
            Playing = true;
            Paused = false;
        }
        else
        {
            if (Paused)
            {
                player.Play();
                Paused = false;
            }
            else
            {
                player.Pause();
                Paused = true;
            }
        }
    }

    async Task<StorageFile> OpenFileAsync()
    {
        try
        {
            var ofd = new FileOpenPicker();
            ofd.FileTypeFilter.Add("*");
            return await ofd.PickSingleFileAsync();
        }
        catch { }
        return null;
    }
于 2017-06-03T17:51:05.897 回答