MediaPlayer 通用 Windows 应用程序

Posted

技术标签:

【中文标题】MediaPlayer 通用 Windows 应用程序【英文标题】:MediaPlayer Universal Windows App 【发布时间】:2016-05-18 20:23:10 【问题描述】:

我开始使用 xamarin 开发应用程序,我的解决方案中的一个项目是 UWP。

当有人单击按钮时,我需要在那里播放声音,我正在使用 MediaPlayer 来实现我的目标,并且在 Windows 10(桌面)上它工作正常,但在我的 Windows Mobile 10 (Lumia 930) 上它开始延迟很长(大约 1 秒)。

下面我提供播放音频源的代码:

MediaPlayer _player = BackgroundMediaPlayer.Current;
_player.SetUriSource(new Uri(String.Format("ms-appx:///Assets/Sound/5s.wav", UriKind.Absolute)));            
_player.Play();

我的问题是:

在 UWP 中除了 MediaPlayer 之外,还有其他播放音频的方法吗?

【问题讨论】:

您是否尝试过预加载音乐?你应该看看这里:blogs.windows.com/buildingapps/2016/01/13/… 【参考方案1】:

如果您没有特定的理由使用背景音频,您可以只使用媒体元素在前台播放音频:

<!-- create element in XAML or in code -->
<MediaElement Name="mediaElement" ... />


// Code - set source or reference to stream
MediaElement mediaElement = new MediaElement();
mediaElement.Source = new Uri("msappx:///Media/sound.mp3");    

我还建议查看supported codecs 的列表。

在更复杂的场景中,您可能需要查看Audio Graph API。

【讨论】:

感谢您的回答,但在我的应用程序音乐是敏感点,我只需播放 5 秒,但我需要在后台立即播放。在这种情况下,音频图也没有帮助我。我会继续寻找解决问题的方法。【参考方案2】:

我不确定这是否是不好的做法,但如果我预加载媒体,我可以立即播放。

类似这个例子的伪代码(c# 风格):

class Foo

   private MediaPlayer _player;

    Foo() //constructor
    
      _player = BackgroundMediaPlayer.Current;
      _player.AutoPlay = false;
      _player.SetUriSource(new Uri(String.Format("ms-appx:///Assets/Sound/5s.wav", UriKind.Absolute)));            
    

    void ButtonClicked(Object sender, EventArgs event)
    
        _player.Play();
    

【讨论】:

以上是关于MediaPlayer 通用 Windows 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

Qt 视频流应用程序:未找到 qt.mediaplayer 的服务

MediaPlayer和Service用法

WINDOWS上OpenCV需要有MediaPlayer才能正确运行?

从 WNS 调用的 BackgroundActivated 任务单进程模型的 WIndows Universal MediaPlayer

[Winform]Media Player com组件应用中遇到的问题

Android记录Android MediaPlayer的两个bug