我们使用 FileStreamResult 向基于 Silverlight MediaElement 的视频播放器提供视频数据:
public ActionResult Preview(Guid id) {
return new FileStreamResult(
Services.AssetStore.GetStream(id, ContentType.Preview),
"application/octet-stream");
}
不幸的是,Silverlight 视频播放器会在开始播放之前下载整个视频文件。这种行为是意料之中的,因为我们的Preview
Action 不支持下载部分内容。
(旁注:如果文件托管在 IIS 虚拟目录中,我们可以在视频仍在下载时在视频的任何位置开始播放。但是出于安全和审核原因,我们无法提供直接下载链接。所以这不是一个选项。)
我们如何改进 Controller Action 以支持部分 HTTP 内容?
我假设我们首先必须通知客户端我们支持它(向 HEAD 请求添加“Accept-Ranges:bytes”标头),然后我们必须评估 HTTP“Range”标头并使用响应流式传输请求的文件范围206 的代码。这是否适用于托管在 IIS6 上的 ASP.NET MVC?是否已经有一些代码可用?
另见: