我有一些视频,我需要能够找到其中的各个点,而无需在该点之前下载整个视频。到目前为止,我使用带有 NodeJS 的 html5 视频标签和 vid-streamer 模块,在 Firefox 和 Chrome 中运行得很好。然而,IE 11 坚持下载整个视频,我无法让它向前跳,直到它下载到我想要播放的位置为止。 IE 是否支持部分内容,是否有一些触发它的技巧?或者它是否已经使用其他 header 之一(GetContentFeatures.DLNA.ORG??)请求它,而我的服务器不理解?
示例 firefox 请求 header - 无论您何时查找,它都会发送一个新请求,关键部分是范围 header ,即使是初始请求(字节=0-)也会发送该 header :
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
最佳答案
想通了。 IE11 确实支持伪流,但它需要“Accept-Ranges: bytes” header ,然后才会麻烦地请求范围,因此无论服务器是否实际发送字节范围,都需要对此进行响应。我必须修改我的 vid-streamer 模块才能做到这一点。
警告:我不知道哪些浏览器支持视频标签,但不支持字节范围,所以我不能肯定地说这不会破坏某些地方,但看起来应该没问题......
关于node.js - IE11 中的 http 伪流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25654422/