HTML5视频问题从C#服务器加载视频
本文关键字:视频 服务器 加载 问题 HTML5 | 更新日期: 2023-09-27 18:30:55
我在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 中看到的那样,响应是正确的,字节发送它们应该,但问题是浏览器(出于某种原因)在发送第一个请求后"范围:字节=0-"(并接收大约 18683 字节)开始发送带有"范围:字节:6865374-"的请求(数字是随机的,它在文件末尾附近),所以没有任何工作,因为文件的中间部分永远不会被要求接收。服务器显示"由于线程退出或应用程序请求,I/O 操作已中止"。我认为这是因为borwser与服务器紧密连接,但我不确定。最棒的是IE(惊喜!)工作正常,除了它首先下载整个mp4文件,然后才播放它。我已经不知道该怎么办了,有什么想法吗?
我希望这可能会有所帮助。有时浏览器或视频播放器会请求前几个字节,然后请求最后几个字节。我见过的大多数视频播放器都请求了视频的最后两兆字节。我假设玩家使用这些信息来确定视频的实际长度。您所要做的就是将流的请求部分作为部分内容(HTTP 代码 206)准确发送,并具有该部分的适当内容长度。
这里有一个链接可能会有所帮助:http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.16
视频播放器使用它在您的视频文件中进行基于字节的查找。