Windows Phone 8 应用程序。我们正在使用AudioStreamingAgent / Mp3MediaStreamSource播放 MP3 文件,这些文件可以在本地缓存或从 Web 加载。
下载文件时,我们仍在使用 AudioStreamingAgent /Mp3MediaStreamSource 以确保我们能够在播放当前文件时预缓存下一个文件。是的,我们可以只使用 WP8 内置播放器来缓存文件,但在这种情况下我们将无法预缓存下一个文件。
问题:几首曲目后,BackgroundAudioPlayer 不再开始播放。
- AudioStreamingAgent.OnBeginStreaming 被执行
- 执行创建 MediaStreamSource 的代码
- AudioStreamer.SetSource方法使用新的 MediaStreamSource 实例执行
- PlayStateChanged 在后台进程中使用 PlayState.TrackReady 触发,并且在这种情况下调用 player.Play()。
毕竟,我看到轨道显示在 UVC 中,但它处于“暂停”状态。在 UVC 中按下“播放”会在调用 player.Play() 的后台调用 OnUserAction。没有什么变化。
问题重现示例,VS 2012(示例基于Background Audio Streamer Sample)
使用示例代码重现的步骤:
- 安装软件
- 按下“预加载曲目”按钮。它将 mp3 文件从 XAP 复制到 IsolatedStorage。
- 按“轨道 1”按钮。曲目开始播放后,按“曲目 2”按钮。然后,在曲目 2 开始播放后,按“曲目 3”按钮。
- 继续执行第 3 步,直到按下“Track *”按钮后曲目没有开始播放。
- 最后选择的曲目将在 UVC 和页面进度条上方显示为活动曲目(见图)
- 在大多数情况下按下其他轨道按钮没有任何区别。
该问题在 WP8 和 WP8.1 开发人员预览版上都在设备和模拟器上重现。
更新:内存不足的情况并非如此。使用示例代码重现问题并查看 backgroundlog.xml 文件显示,示例仅使用了 20 Mb 中允许的 6 Mb这张图片的最后一列是“内存使用量|最大允许内存使用量”