HTML5视频问题从C#服务器加载视频

时间:2013-09-11 20:13:50

标签: c# html5 video

我对HTML5视频标签有一个非常奇怪的问题。关键是:我需要在浏览器中查看视频(无法更改,客户希望它是HTML5)。所以,我潜伏着它是如何工作的,并发现它需要Range标头才能正常工作,我写了一个小解析器来继续。 基本上,一切都在标准,我确实返回正确的标题/正文/任何...这是我使用的标题列表

context.Response.StatusCode = 206;
if(begin == 0 && end == total)
    context.Response.StatusCode = 200;
context.Response.ContentType = "video/mp4";
context.Response.AddHeader("Accept-Ranges", "bytes");
context.Response.AddHeader("Content-Range", String.Format("bytes {0}-{1}/{2}", begin, end, total));
context.Response.AddHeader("Content-Disposition", "inline;");
context.Response.AddHeader("Content-Transfer-Encoding", "binary");

正如我在curl中看到的那样,响应是正确的,字节发送应该是,但问题是浏览器(由于某种原因)在发送第一个请求后“Range:bytes = 0-”(并且收到大约18683个字节)开始发送请求“范围:字节:6865374-”(数字是随机的,它位于文件末尾附近)所以没有任何工作,因为文件的中间部分永远不会被要求收到。服务器说“由于线程退出或应用程序请求,I / O操作已中止”。我认为这是因为borwser与服务器关系密切,但我不确定。 最棒的是IE(惊喜!)工作正常,除了它首先下载整个mp4文件然后才播放它。 我已经不知道该怎么做了,有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我希望这可能会有所帮助。有时浏览器或视频播放器会请求前几个字节,然后是最后几个字节。我见过的大多数视频播放器都要求最后两兆字节的视频。我假设玩家使用这些信息来确定视频的实际长度。您所要做的就是将所请求的流部分作为部分内容(HTTP代码206)准确地发送,并具有该部分的适当内容长度。

以下是可能有用的链接:http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.16

视频播放器使用此功能在视频文件中进行基于字节搜索。