Windows Phone 8 应用程序。 我们正在使用 AudioStreamingAgent/Mp3MediaStreamSource播放可以本地缓存或从网络加载的 MP3 文件。
下载文件时,我们仍在使用 AudioStreamingAgent/Mp3MediaStreamSource 来确保我们能够在播放当前文件时预缓存下一个文件。 是的,我们可以只使用 WP8 内置播放器来播放缓存文件,但在这种情况下我们将无法预缓存下一个文件。
问题: 几首轨道之后,BackgroundAudioPlayer 不再开始播放。
- AudioStreamingAgent.OnBeginStreaming 被执行
- 执行创建 MediaStreamSource 的代码
- AudioStreamer.SetSource方法使用新的 MediaStreamSource 实例执行
- PlayStateChanged 在后台进程中与 PlayState.TrackReady 一起触发,在这种情况下调用 player.Play()。
毕竟,我看到轨道显示在 UVC 中,但它处于“暂停”状态。在 UVC 中按“播放”会在后台调用 OnUserAction,后者会调用 player.Play()。没有任何变化。
Sample with problem reproduction, VS 2012 (示例基于 Background Audio Streamer Sample )
使用示例代码重现的步骤:
- 安装应用
- 按下“预加载轨道”按钮。它将 mp3 文件从 XAP 复制到 IsolatedStorage。
- 按“轨道 1”按钮。轨道开始播放后,按下按钮“轨道 2”。然后,在轨道 2 开始播放后,按下“轨道 3”按钮。
- 继续执行第 3 步,直到按下“轨道 *”按钮轨道不开始播放。
- 最后选择的轨道将在 UVC 中和页面上的进度条上方显示为事件轨道(参见 picture)
- 在大多数情况下按其他轨道按钮没有任何区别。
问题在设备和模拟器上重现,在 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
关于c# - BackgroundAudioPlayer 没有开始播放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24358961/