HTML5视频播放在IE中失败(或:缺少范围请求)

HTML5视频播放在IE中失败(或:缺少范围请求),html,internet-explorer,video,http-headers,Html,Internet Explorer,Video,Http Headers,我很抱歉问了这么多次的问题。这种情况似乎与其他情况不同。简言之,通过视频播放在Firefox和Chrome上始终有效,但在Internet Explorer、所有版本和所有Windows版本中始终失败 我根据微软的HTML5建议设置了一个网页。模式窗口提供视频: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="

我很抱歉问了这么多次的问题。这种情况似乎与其他情况不同。简言之,通过视频播放在Firefox和Chrome上始终有效,但在Internet Explorer、所有版本和所有Windows版本中始终失败

我根据微软的HTML5建议设置了一个网页。模式窗口提供视频:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
    </head>
    <body>
        <div class="popupwindow">
            <video controls autoplay preload="auto" style="width:100%">
                <source src="streamvideo.rails?file=$fileName" type="video/mp4" />
            </video>
        </div>
    </body>
</html>
IE的标题:

GET [my URL]?fileName=e65b0b0d-0911-4e3f-bc71-7b5d5a65db57.mp4 HTTP/1.1
Host: localhost
Connection: keep-alive
Accept-Encoding: identity;q=1, *;q=0
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.143 Safari/537.36
Accept: */*
DNT: 1
Accept-Language: en-US,en;q=0.8
Range: bytes=0-6130
GET [same URL] HTTP/1.1
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko
Accept: */*
GetContentFeatures.DLNA.ORG: 1
Pragma: getIfoFileURI.dlna.org
Accept-Language: en-US
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
DNT: 1
Host: localhost

我推测,如果我修正这个差异,问题就会消失。那么:为什么IE决定不提出射程请求?我怎么能强迫它呢?如果你认为我在寻找虚假线索,我还能查什么?

我在Android上的Chrome也有同样的问题。缺少范围标头。对于Internet Explorer,我做了如下操作:

$http_range = (isset($_SERVER["HTTP_RANGE"])) ? $_SERVER["HTTP_RANGE"] : "bytes-0"; 
这是在我的PHP脚本中提供的视频/mp4数据。它所做的只是检查是否设置了范围标头,如果未设置,则假定已请求文件的开头。如果用户寻求视频的不同部分,即生成所需的范围标头,Internet Explorer似乎足够聪明,可以接管


工程伟大的IE。。。然而,我在Chrome上尝试了上述方法,但仍然不满意:((

现在回复有点晚。我想如果有人搜索这个,我的答案会对他们有所帮助。我发现,当IE请求视频内容时,“接受范围:字节”标头与Firefox和Chrome不同,因此在第一次请求时,将响应设置如下(这是一个ASP.Net核心示例):

当响应再次点击浏览器时,它将评估标题,并使用正确的标题设置视频控件以及下一个请求。现在,当您验证是否存在范围标题时,它将在那里,并且要流的代码将正常工作


希望这有帮助,它对我有用。

我也有同样的问题

MIME设置正确。它是视频/mp4

我检查了apache配置,它支持video/mp4和audio/mp4

视频是用H.264编码的


我可以在chrome中看到视频,而不是IE(9、10、11)

我将视频大小从1920 x 1280更改为720 x 720并进行了编码

它神奇地工作了



现在,我正在通过改变视频的宽度和高度来寻找它的工作原理。

详细阐述Jean Roux的反应:

通过范围请求和响应支持HTML5视频流。MDN有一个很好的介绍:

W7和W8上的IE10和IE11不发出范围请求(没有范围标头)。根据RFC,服务器可能会以200响应和整个文件内容进行响应。但这样做将导致IE不播放该文件(我不知道为什么,但根据开发工具中的“网络”选项卡,内容被截断了,例如服务器发送了10MB,但IE只查看了前几KB)。我必须重新调整服务器,以便使用206、整个文件内容以及接受范围和内容范围标题进行响应


顺便说一句:你在W10发布之前问过这个问题。W10上的Edge和IE11都会提出范围请求。

你找到解决方案了吗。我也遇到了同样的问题,我的文件在Chrome和Firefox中工作和流媒体都很有魅力,但是IE在播放之前是如何下载整个文件的。我不想对它们进行web优化。我想要的是IE应该我可以像其他浏览器一样执行范围请求并播放它。我认为我没有不幸地这样做。“解决方案”是将项目交给其他人,他们立即将所有视频上传到Vimeo。你有关于如何执行的信息吗(如果有)解决问题了吗?我现在正遇到同样的障碍。@BRO_THOM正如我所说的,我所做的只是更改视频的宽度和高度,并在更改其宽度和高度之前使用相同的选项对其进行编码。我仍然不知道为什么这样做有效。对不起。
    response.Headers.Add("Accept-Ranges", "bytes");
    response.ContentLength = [length of actual video file];
    response.StatusCode = (int)HttpStatusCode.OK;
    response.ContentType = [ContentType of requested content];