我为 windows phone 创建了一个音频播放器,它使用从外部 API 收集的歌曲播放列表。
此播放列表同时保存到客户端应用程序和后台音频播放器,以便在歌曲结束后即使应用程序未运行,它也可以继续播放下一首曲目。
但是,此 API 返回带有 url 的源轨道,这些 url 是要流式传输的文件的实际 REDIRECTS。
如果我尝试将这些直接加载到后台音频播放器中,则会出现异常。
我试图通过允许客户端应用程序执行重定向并在将结果 url 传递给播放器之前捕获结果 url 并更新客户端和应用程序上的播放列表来解决此问题。
这工作得很好。
但是,如果我随后离开我的应用程序,后台音频代理会继续播放,这意味着更新客户端上的 url 的机制不会触发,并且原始重定向 url 正在加载,导致应用程序崩溃。
我试图在后台音频代理上做同样的事情(发出 HEAD 请求并从响应中获取结果 uri),但我无法让它工作;它永远不会从网络请求返回!
这是我想要完成的要点:
try
{
var req = WebRequest.Create(src) as HttpWebRequest;
req.Method = "HEAD";
req.BeginGetResponse(ar =>
{
try
{
var response = req.EndGetResponse(ar);
var uri = response.ResponseUri;
selectedTrack.BeginEdit();
selectedTrack.Source = uri;
selectedTrack.EndEdit();
player.Track = selectedTrack;
player.Play();
}
catch (Exception ex)
{
}
}, req);
}
catch (Exception ex)
{
}
但是里面的回调永远不会执行,程序只是停止,直到我杀死它。
我确信必须有更好的方法来处理这个问题,但我发现关于这个问题的文档为零。其他人到底是如何处理这个问题的?
我虽然关于在客户端上触发一个计时器来解析列表并发出请求并即时更新整个内容,但这意味着每次应用程序启动时都会依次执行 100 个请求(因为它每次都会获得新的轨道时间),所以这似乎不是一个有效的解决方案......
有人在这里有什么想法吗?他们将不胜感激!