使用HttpClient请求的音频流在文件完全下载之前不会播放

本文关键字:下载 播放 请求 HttpClient 音频流 文件 使用 | 更新日期: 2023-09-27 18:13:43

我正在尝试使用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真正开始播放时,文件已经完全下载,所以它是相当无用的流媒体。我需要它在接收到流后立即播放

使用HttpClient请求的音频流在文件完全下载之前不会播放

您希望使用占用HttpCompletionOptionGetAsync过载。默认值是ResponseContentRead,这意味着在完全读取内容之前,stream将不可用。使用ResponseHeadersRead代替,这意味着stream将在头文件被读取后立即可用。

HttpResponseMessage response = await httpClient.GetAsync("http://...",
    HttpCompletionOption.ResponseHeadersRead);