如何使用MediaElement播放本地的mp3文件

3
我正在使用Silverlight 4(C#)创建一个简单的媒体播放器。现在我正在使用MediaElement,但它给了我一个错误。
错误4001:...System.Collections.ListDictionaryInternal
当我想设置MediaElement的源时,就会出现此错误。因此,当用户点击“播放”时,它会设置第一首歌曲的来源。
Song s = afspeelijst.ElementAt(currentPlayingIndex);
media.Source = new System.Uri(s.FilePath);
media.Position = TimeSpan.Zero;
media.Play();

下面的代码也不起作用,但它消除了错误。但仍然没有声音 :s
media.SetSource(new FileStream(s.FilePath, FileMode.Open));

s.FilePath指向哪里?SL不允许应用程序访问本地文件系统(除了隔离存储)。文件是否是应用程序包的一部分? - AlexEzh
不,路径例如 c:\music\song.mp3 会被转换为 file:///c:\music\song.mp3。应用程序需要安装,以便可以访问本地文件系统。 - Stijn Leenknegt
3个回答

2

你可能想查看这段代码。对于我来说,它完全正常运行 :)

mediaElement1.LoadedBehavior = MediaState.Manual;
mediaElement1.Source = new Uri(@"D:/ExamplePath/myVideoFile.avi");
//@ means that the string behind is a path so / won't be 
//treated like a special character
mediaElement1.Play();

2

在Silverlight 4中,您可以访问特定用户文件夹(我的文档、我的音乐、我的图片和我的视频)或这些文件夹中的子文件夹中的本地文件。(启用带有提升权限的离线浏览器)。

修改上面的代码将使其类似于下面的代码。

string path = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "test/song.mp3");


            media.SetSource(new FileStream(path, FileMode.Open));
            media.Position = TimeSpan.Zero;
            media.Play();

我希望您能从中受益。

我尝试过了,但没有成功。当你调用SetSource()时它会下载文件,所以在下载委托中当下载完成达到100%后,我调用Play()方法并且这样行得通。我只是用HTTP测试了我的解决方案,而不是本地文件。 - Stijn Leenknegt
你使用的操作系统是什么?Windows 7 的处理方式与显示方式不同。Libraries/Documents 可能会与 C:\Users\Account_name\Documents 混淆...我在我的机器上尝试过,它可以工作。你可能可以在本地文件系统上使其工作。 - scartag

0

提示:

文件操作不允许。拒绝访问路径“”。

当您尝试访问本地的文档文件夹或其他文件时出现此问题。我正在使用Silverlight 4,可以播放网络上的一些http文件。但是无法播放ftp文件,例如ftp://user:pass@address/myVoicefile.snd,当我查看给定的错误时

.Net的验证方法返回不支持的路径。

因此,在Silverlight应用程序中使用内部HTML页面,或者如果您的声音文件受限,则将这些文件复制到Web应用程序中的/ClientBin中是一种替代方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接