19

我想将数据从服务器流式传输到MediaElement我的 Windows 8 应用商店(以前的 Metro)应用程序中。但是,我需要在流式传输时“记录”流,因此如果重新请求它可以从缓存中提供,所以我不想将 URL 直接输入到MediaElement.

目前,绊脚石是MediaElement.SetSource()接受a ,而IRandomAccessStream不是 a System.IO.Stream,这是我从中得到的HttpWebResponse.GetResponseStream()

我现在拥有的代码不起作用:

var request = WebRequest.CreateHttp(url);
request.AllowReadStreamBuffering = false;
request.BeginGetResponse(ar =>
                {
                    var response = ((HttpWebResponse)request.EndGetResponse(ar));
                    // this is System.IO.Stream:
                    var stream = response.GetResponseStream(); 
                    // this needs IRandomAccessStream:
                    MediaPlayer.SetSource(stream, "audio/mp3");
                }, null);

是否有一种解决方案可以让我流式传输音频,但允许我在从远程端完成读取后将流复制到磁盘?

4

2 回答 2

0

我没有尝试过以下想法,但它可能会奏效:您可以开始将 Web 数据流式传输到一个文件中,然后在几秒钟后(用于缓冲)将该文件传递给 MediaElement。

我注意到 MediaElement 对打开正在写入的文件可能很挑剔,但我已经看到它有效。虽然,我不能说为什么它有时会起作用,为什么有时不起作用。

于 2012-10-08T15:52:56.290 回答
0

我想这会帮助您将 Stream 转换为 IRandomAccessStream

InMemoryRandomAccessStream  ras = new InMemoryRandomAccessStream();

using (Stream stream = response.GetResponseStream();)
  {
    await stream.CopyToAsync(ras.AsStreamForWrite());
  }
于 2015-03-20T04:02:10.117 回答