我正在尝试使用HttpClient
读取音频流,因为我需要修改HTTP标头。我发现唯一可行的方法如下:
HttpResponseMessage response = await httpClient.GetAsync("http://...");
Stream stream = await response.Content.ReadAsStreamAsync();
IRandomAccessStream content = stream.AsRandomAccessStream();
musicPlayer.SetSource(content, "audio/mpeg"); //musicPlayer is a MediaElement object
musicPlayer.Play();
问题是MediaElement
真正开始播放时,文件已经完全下载,所以它是相当无用的流媒体。我需要它在接收到流后立即播放
您希望使用占用HttpCompletionOption
的GetAsync
过载。默认值是ResponseContentRead
,这意味着在完全读取内容之前,stream
将不可用。使用ResponseHeadersRead
代替,这意味着stream
将在头文件被读取后立即可用。
HttpResponseMessage response = await httpClient.GetAsync("http://...",
HttpCompletionOption.ResponseHeadersRead);