在Windows 8中使用中间人进行流式传输

Veg*_*sen 14 c# httpwebrequest microsoft-metro windows-8

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

目前,绊脚石是MediaElement.SetSource()接受一个IRandomAccessStream,而不是一个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);
Run Code Online (Sandbox Code Playgroud)

是否有一个允许我传输音频的解决方案,但允许我在从远程端读完后将流复制到磁盘?

Pie*_*i K 0

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

我注意到 MediaElement 对于打开正在写入的文件可能很挑剔,但我已经看到它可以工作。不过,我不能说为什么它有时有效,有时无效。