提问人:Vegard Larsen 提问时间:9/10/2012 最后编辑:Vegard Larsen 更新时间:5/2/2023 访问量:1182
在 Windows 8 中使用中间人进行流式处理
Streaming with go-between in Windows 8
问:
我想将数据从服务器流式传输到我的 Windows 8 应用商店(以前称为 Metro)应用中。但是,我需要在流式传输时“记录”流,以便在重新请求时可以从缓存中提供它,因此我不想将 URL 直接馈送到 .MediaElement
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);
有没有一种解决方案允许我流式传输音频,但允许我在从远程端完成读取后将流复制到磁盘?
答:
0赞
Pierre Henri K
10/8/2012
#1
我没有尝试过以下想法,但它可能会起作用:您可以开始将 Web 数据流式传输到文件中,然后在几秒钟后(用于缓冲)将该文件传递给 MediaElement。
我注意到 MediaElement 在打开正在写入的文件时可能会很挑剔,但我已经看到它工作了。不过,我不能说为什么它有时有效,为什么有时无效。
0赞
Aman Chaudhary
3/20/2015
#2
我想这将帮助您将 Stream 转换为 IRandomAccessStream
InMemoryRandomAccessStream ras = new InMemoryRandomAccessStream();
using (Stream stream = response.GetResponseStream();)
{
await stream.CopyToAsync(ras.AsStreamForWrite());
}
评论
InMemoryRandomAccessStream
.Source
IRandomAccessStream
IRandomAccessStream
me.Source = new Uri("http://...");