c# - BackgroundAudioPlayer 没有开始播放

标签 c# windows-phone-8 audio-streaming background-audio mediastreamsource

Windows Phone 8 应用程序。 我们正在使用 AudioStreamingAgent/Mp3MediaStreamSource播放可以本地缓存或从网络加载的 MP3 文件。

下载文件时,我们仍在使用 AudioStreamingAgent/Mp3MediaStreamSource 来确保我们能够在播放当前文件时预缓存下一个文件。 是的,我们可以只使用 WP8 内置播放器来播放缓存文件,但在这种情况下我们将无法预缓存下一个文件。

问题: 几首轨道之后,BackgroundAudioPlayer 不再开始播放。

  1. AudioStreamingAgent.OnBeginStreaming 被执行
  2. 执行创建 MediaStreamSource 的代码
  3. AudioStreamer.SetSource方法使用新的 MediaStreamSource 实例执行
  4. PlayStateChanged 在后台进程中与 PlayState.TrackReady 一起触发,在这种情况下调用 player.Play()。

毕竟,我看到轨道显示在 UVC 中,但它处于“暂停”状态。在 UVC 中按“播放”会在后台调用 OnUserAction,后者会调用 player.Play()。没有任何变化。

Picture of "stuck state"

Sample with problem reproduction, VS 2012 (示例基于 Background Audio Streamer Sample )

使用示例代码重现的步骤:

  1. 安装应用
  2. 按下“预加载轨道”按钮。它将 mp3 文件从 XAP 复制到 IsolatedStorage。
  3. 按“轨道 1”按钮。轨道开始播放后,按下按钮“轨道 2”。然后,在轨道 2 开始播放后,按下“轨道 3”按钮。
  4. 继续执行第 3 步,直到按下“轨道 *”按钮轨道不开始播放。
  5. 最后选择的轨道将在 UVC 中和页面上的进度条上方显示为事件轨道(参见 picture)
  6. 在大多数情况下按其他轨道按钮没有任何区别。

问题在设备和模拟器上重现,在 WP8 和 WP8.1 开发者预览中都是如此。

更新:内存不足不是这种情况。使用 sample code 重现问题并查看 backgroundlog.xml 文件显示 sample uses only 6 Mb out of 20 Mb allowed此图片的最后一列是“内存使用|允许的最大内存使用”

最佳答案

根据我的经验,我的建议是移植并开始使用 WPA8.1,这样播放背景音频的限制就会消失。

在为 WP 开发音乐播放器应用程序并尝试在使用 mediastreamsource 缓存音乐时,我最终得出的结论是这可能是不可能的。在操作系统执行任何任务或正在完成的后台类型工作之前,您似乎有一定的时间或其他一些变量。

我为一位 MS 布道者写了这篇文章: https://drive.google.com/file/d/0By_e5C-QWr9Ka3RmbVBlWVF3R1E/edit?usp=sharing

以下是我在尝试解决此问题时喜欢的其他一些 SO:

BackgroundAudioPlayer is 'Playing' but not calling GetSampleAsync()

WP7 background audio resources are no longer available

HttpWebRequest from AudioPlayerAgent

AudioPlayerAgent, timer and webservice

WP7 Mp3MediaStreamSource demo not working

关于c# - BackgroundAudioPlayer 没有开始播放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24358961/

相关文章:

android - 通过udp从android广播音频/视频到wifi并用vlc收听

C# PrincipalServerdownException 即使我是真实用户

c# - MS CRM 插件的一般错误

c# - 如何从 HttpResponseMessage 获取特定的 header 值

windows-phone-8 - 将 Windows Phone 8 应用程序部署到模拟器时 VS2015 崩溃

ios - 使用Multipeer Connectivity(Swift 2)在目标iPhone中从发送者部分接收了音频文件

node.js - 使用 puppeteer 流式传输页面的音频

c# - 包装 INLINE 函数

c# - 如何从字节数组创建文件并将其发送到 TelegramBot

c# - 启动 Storyboard时未设置目标错误