node.js - IE11 中的 http 伪流

标签 node.js html5-video

我有一些视频,我需要能够找到其中的各个点,而无需在该点之前下载整个视频。到目前为止,我使用带有 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/

相关文章:

html - 使用 HTML5 播放本地文件

html - Chromecast 无法播放多个 HTML5 视频

node.js - 如何从移动应用程序中的私有(private) api 获取背景的即时变化?

node.js - 从 Grunt 任务设置 NODE_ENV

javascript - 从 fileReader 读取 html 文件时出现语法错误

javascript - 将视频背景与页面背景相匹配

javascript - 用于更改视频标签源的 setAttribute 和 video.src 在 IE9 中不起作用

google-chrome - 在 Chrome 打包应用中播放本地视频文件

javascript - 为什么这些符号链接(symbolic link)会发生无限递归循环

node.js - 将 Redis 用作某些值的数据库