我有一些视频,我需要能够在这之前没有下载整个视频的情况下寻找其中的各个点。到目前为止,我使用带有NodeJS的html5视频标签和vid-streamer模块在Firefox和Chrome中运行良好。但是,IE 11坚持要下载整个视频,我无法跳过它直到它下载到我想要播放的点。 IE是否支持部分内容,是否有一些技巧可以触发它?或者它是否已经使用其他标题之一(GetContentFeatures.DLNA.ORG ??)并且我的服务器无法理解?
示例firefox请求标头 - 它会在您寻找时发送一个新请求,密钥块是范围标头,它甚至为初始请求发送(bytes = 0 - ):
Accept video/webm,video/ogg,video/*;q=0.9,application/ogg;q=0.7,audio/*;q=0.6,*/*;q=0.5
Accept-Language en-us,en;q=0.5
Connection keep-alive
Cookie connect.sid=...
Host ...
Range bytes=75661312-
Referer ...
User-Agent Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20100101 Firefox/29.0
服务器响应:
Accept-Ranges bytes
Cache-Control public
Connection keep-alive
Content-Disposition inline; filename=video.webm;
Content-Length 12509
Content-Range bytes 75661312-75673820/75673821
Content-Transfer-Encoding binary
Content-Type video/webm
Date Wed, 03 Sep 2014 21:42:08 GMT
Last-Modified Thu, 28 Aug 2014 15:05:24 GMT
Pragma public
Server VidStreamer.js/0.1.4
Vary Accept-Encoding
X-Powered-By Express
status 206 Partial Content
IE11不发送范围:
Request GET /videos/video.mp4 HTTP/1.1
Accept */*
If-Modified-Since Mon, 16 Nov 2009 14:05:45 GMT
User-Agent Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko
Referer ...
GetContentFeatures.DLNA.ORG 1
Pragma getIfoFileURI.dlna.org
Accept-Language en-US
Accept-Encoding gzip, deflate
Host ...
Connection Keep-Alive
Cookie ...
服务器(合理地,我认为)响应整个视频和200 OK而不是206部分内容:
Response HTTP/1.1 200 OK
X-Powered-By Express
Vary Accept-Encoding
Cache-Control public
Connection keep-alive
Content-Type video/mp4
Content-Disposition inline; filename=video.mp4;
Pragma public
Last-Modified Mon, 16 Nov 2009 14:05:45 GMT
Content-Transfer-Encoding binary
Content-Length 36373917
Server VidStreamer.js/0.1.4
Date Wed, 03 Sep 2014 21:38:42 GMT
答案 0 :(得分:4)
想出来。 IE11确实支持伪流,但是它需要“Accept-Ranges:bytes”标头才会打扰请求范围,因此无论是否实际发送字节范围,服务器都需要响应。我不得不修改我的vid-streamer模块来做到这一点。
警告:我不知道哪些浏览器支持视频标签但不支持字节范围,所以我不能肯定地说这不会破坏某些地方,但似乎它应该没问题......
答案 1 :(得分:0)
我遇到了同样的问题,直到经过一些测试我发现IE / Edge的初始请求不包含范围标题。如果您相应地响应文件大小等于Content-Length标头的初始Content-Range,IE将假设您只想一次性发送整个文件。如果您没有获得范围标题,最好选择一些小于文件大小的内容长度。我选择1Mb,但我认为这并不重要。