可以使用MediaElement的Source属性来播放内容吗?

时间:2015-08-11 20:06:54

标签: c# xaml windows-runtime

我正在尝试使用歌曲的目录路径从本地计算机播放歌曲。

MediaElement.Source = new Uri(@"D:\Music\Artist\Album\Song.mp3", UriKind.Absolute);

这甚至可以开始工作,还是Windows 8应用只能使用像mss-appx这样的URI方案来访问包数据?

当我尝试运行代码时,我在MediaElement控件“Invalid Source”上收到一条消息

3 个答案:

答案 0 :(得分:1)

您需要使用文件打开选择器在D盘中选择文件。

    FileOpenPicker openPicker = new FileOpenPicker();

    openPicker.ViewMode = PickerViewMode.Thumbnail;

    openPicker.SuggestedStartLocation = PickerLocationId.MusicLibrary;

    openPicker.FileTypeFilter.Add(".mp3");

    StorageFile file = await openPicker.PickSingleFileAsync();

    IRandomAccessStreamWithContentType content = await file.OpenReadAsync();

    Debug.WriteLine("Content Type: " + content.ContentType);

    player.SetSource(content, content.ContentType);

答案 1 :(得分:1)

Windows应用商店应用没有对文件系统的完全访问权限。他们可以直接访问(通过路径)有限的位置(即他们的安装和应用程序数据文件夹)。

MediaElement可以从它可以直接访问的路径加载项目,但这通常没有用,因为这些位置有URI(ms-appx:和ms-appdata :),它将定位到正确的位置,而不管实际的Path是什么

通常,歌曲位于音乐库中,MediaElement无法直接访问。它可以通过MusicLibrary功能获得代理访问,但这不允许通过路径访问。该应用程序需要通过KnownFolders对象访问该文件:

private async void Button_Click(object sender, RoutedEventArgs e)
{
    StorageFolder musicLib = Windows.Storage.KnownFolders.MusicLibrary;
    StorageFile song = await musicLib.GetFileAsync(@"Artist\Album\Song.mp3");
    var stream = await song.OpenReadAsync();
    me.SetSource(stream, stream.ContentType);
}

如果歌曲不在可以被功能允许的库中,则用户需要通过FolderPicker等授予权限。用户可以选择音乐位置的根目录,应用程序可以使用Windows.Storage.AccessCache类对其进行缓存,这样用户就不需要多次选择文件夹或单独选择文件。

我在博客文章Skip the path: stick to the StorageFile

中更详细地讨论了这个问题

答案 2 :(得分:0)

This link has the answer (in case you can use the application folder)

MediaElement.Source = new Uri("ms-appx-web:///Assets/Song.mp3", UriKind.Absolute);