使用IIS / Asp.Net从内存中流式传输AVI文件

时间:2009-09-08 19:32:04

标签: asp.net iis

我在磁盘上有一些AVI文件,但它们是加密的。我想知道是否有一种方法可以解密它们并将它们流式传输到浏览器(使用MemoryStream或类似的东西),而无需编写任何文件?

我知道有Windows Media Services但我使用的是Vista计算机,而Windows Media Services只会安装在Windows Server 2003和2008中。

有没有办法在没有太多麻烦的情况下实现这一目标,还是Media Services / Windows Server是唯一的出路?如果有,我会使用类似自定义IHttpHandler(.ashx文件)的内容吗?

<小时/> 修改

我决定使用自定义IHttpHandler。我需要什么基本代码来播放视频?

1 个答案:

答案 0 :(得分:1)

我不想使用MemoryStream视频。假设您可以通过加密的AVI文件创建CryptoStream(在System.Security.Cryptography命名空间中找到),您应该只需将ReadWrite抽到Response.OutputStreamIHttpHandler中的 byte[] buffer = new byte[65556]; // adjust the buffer size as yo prefer. CryptoStream inStream = YourFunctionToDecryptAVI(aviFilePath); int bytesRead = inStream.Read(buffer, 0, 65556); while (bytesRead != 0) { context.Response.OutputStream.Write(buffer, 0, bytesRead); bytesRead = inStream.Read(buffer, 0, 65556); if (!context.Response.IsClientConnected) break; } Response.Close(); //see edit note. 。类似的东西: -

{{1}}

确保关闭响应缓冲区并指定内容类型。

修改

通常我讨厌近距离接听,看起来很苛刻。然而,虽然分块编码不应该要求它,但在流式视频的情况下,可能是客户端不喜欢它。此外,通过大量数据传输,关闭连接并不是什么大问题。