MediaPlayerElement 不在 PC 上播放声音,但在手机上播放

Posted

技术标签:

【中文标题】MediaPlayerElement 不在 PC 上播放声音,但在手机上播放【英文标题】:MediaPlayerElement don't play sound on Pc, but does on Phone 【发布时间】:2019-09-23 06:38:11 【问题描述】:

我在 XAML 中设置了一个 MediaPlayerElement,我从 Music 文件夹中播放了一些声音,当我在手机上测试它时它可以工作,但在我的计算机上却没有,并出现以下错误消息:

错误:不支持的视频类型或文件路径

我用谷歌搜索了一段时间,一些建议说应该安装该应用才能访问文件(如音乐文件)

这是 XAML:

<MediaPlayerElement Name="mediaPlayerElement" AutoPlay="False" AreTransportControlsEnabled="True" Stretch="UniformToFill"/>

至于 C#:

private void playSound(object sender, ItemClickEventArgs e)
        // triggered when I click a sound
            var soundToPlay = (Sound)e.ClickedItem;
            mediaPlayer.Source = MediaSource.CreateFromUri(new Uri(this.BaseUri, soundToPlay.Path.ToString()));
            mediaPlayerElement.SetMediaPlayer(mediaPlayer);;
        
public class Sound
    
        public string Title  get; set; 
        public string Path  get; set; 
        public string Duration  get; set; 
        public ImageSource Poster  get; set; 
    // and there is a class to get List<Sound>

当我调试这段代码时;原来是这样的

soundToPlay

指向声音的确切位置!

【问题讨论】:

我在手机和电脑上都运行了你的代码,都不能用。你能告诉我你手机的操作系统版本吗?关于方法“MediaSource.CreateFromUri(new Uri(this.BaseUri, soundToPlay.Path.ToString()));”,您的错误与“路径”有关。我们建议您使用“mediaPlayer.Source = MediaSource.CreateFromStorageFile(videoFile);”替换前一个。如果您有任何必须使用“路径”的具体原因,希望您能告诉我们原因以及有关此特定场景的更多信息。谢谢! 我的手机版本是1607,至于我使用的方法;它被用于一个视频系列,所以...,我现在已经将该方法更改为@BarryWang-MSFT 建议的方法。它有效,谢谢。 好的。很高兴知道它对你有用。为了让其他一些社区也能更清楚地了解这一点,我已经把答案写出来了。 顺便说一句,实际上在测试时我们甚至无法在手机上使用您的代码。 【参考方案1】:

错误信息是“不支持的视频类型或文件路径”,所以首先,这个问题的解决方法是使用 storagefile 而不是路径:

mediaPlayer.Source = MediaSource.CreateFromStorageFile(videoFile);

实际上我们需要避免使用路径。 UWP 使用 StorageItems 类(即 StorageFolder 和 StorageFile),这些类通过代理进程对文件具有完全权限。它代表一个文件,但不限于文件系统对象,应用程序处理 StorageFile 并且不需要知道或关心数据是来自磁盘还是来自另一个应用程序。这样,您处理文件就更容易了。

【讨论】:

以上是关于MediaPlayerElement 不在 PC 上播放声音,但在手机上播放的主要内容,如果未能解决你的问题,请参考以下文章

UWP Metronome App - MediaPlayerElement 传输控制和性能

按钮不在移动设备上工作,但适用于PC引导程序

碰撞工作在PC模拟器上但不在Android设备上

在 PC 中使用 new 关键字而不在另一个中使用 new 时 typescript nodejs 出错

不在 sudoers 文件中。此事将被报告。

交换机小实验开胃餐