我正在尝试用C#开发Windows Phone 8.1应用程序时遇到一些麻烦,该应用程序尝试从不同的无线电流服务器读取Internet音频流。
在设置背景音频播放器来源的方法中,我已经成功地证明了方法MediaPlayer.SetUriSource,但不幸的是媒体播放器在播放带有shoutcast元数据的音频流时尝试了失效功能。
特别是音频播放器最终会在读取shoutast流时停止播放。
出于这个原因,我尝试使用setStreamSource方法,通过与audiostreaming服务器建立HTTP连接并请求播放所需的流,但不幸的是,应用程序只能读取收到的音频流的前64K字节。之后,管理流请求的线程将死亡,而不会提供错误或调试信息。
我想补充一点,我尝试使用类似代码的普通控制台应用程序,它工作正常!
以下是我如何实现流请求的一些示例:
var HClient = new HttpClient();
HttpResponseMessage response = await HClient.GetAsync(streamUrl,HttpCompletionOption.ResponseHeadersRead);
_dataStream = await response.Content.ReadAsStreamAsync();
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(streamUrl);
HttpWebResponse response = (HttpWebResponse) await request.GetResponseAsync();
_dataStream = response.GetResponseStream();
HttpClient hcb = new HttpClient();
_dataStream = await hcb.GetStreamAsync(streamUrl);
var request = new HttpRequestMessage(HttpMethod.Get, streamUrl);
HttpResponseMessage response = await hcb.SendAsync(request, HttpCompletionOption.ResponseHeadersRead);
_dataStream = await response.Content.ReadAsStreamAsync();
结果在所有情况下都是相同的:我收到一小段音频流(大约5-8秒),我可以播放和听到,几秒钟后线程停止。我能够计算我能够从流中读取的字节数,并且在所有情况下都是65536。