HTML5video在Firefox上缓慢加载,但在Chrome上非常快

我目前正在实施来自公司另一个站点的videostream代理,透明地处理身份validation。

整个身份validation,部分内容和stream媒体部分似乎迄今为止工作正常,除了一些小的细节:它在Chrome和Edge上运行得非常快,但在FireFox上加载非常缓慢。 而且,如果你从一开始就播放video,FireFox只会发生这种缓慢; 如果你跳过几秒钟,从那一刻开始正常播放。 另外,奇怪的是,如果支持部分内容被删除,video加载好FireFox,但当然,跳过前进是不可能的。

到目前为止,我注意到的一件事情是,FireFox似乎首先发出一个没有“范围”头的请求,然后用“范围”头保持多个请求。 另一方面,Chrome只提供一个没有“范围”的请求; 如果您尝试跳过,则只会将“范围”添加到标题中。

此外,当您从一开始播放video时,FireFox似乎多次请求相同的范围。

有谁知道为什么FireFox会这样做,我能做些什么来改变它的行为或提供它所需要的?

'use strict' const express = require('express'); const router = express.Router(); const request = require('request'); const setCookie = require('set-cookie-parser'); const _ = require('lodash'); const logger = require('./log').normal; const CAMINHO_BASE = 'http://placewherethevideosaretakenfrom/'; let videoEstaAutenticado = false; router.get('/video/*', (req, res) => { let caminho = req.params[0]; logger.info('Video no caminho ' + caminho, {range: req.headers.range}); let caminhoCompleto = CAMINHO_BASE + caminho.split('/').map(encodeURIComponent).join('/'); logger.info('Caminho completo ' + caminhoCompleto); request.debug = true; // FIXME: DEBUG const headersOriginais = req.headers; logger.info('Headers originais', {headersOriginais}); function proxyVideo() { logger.info('Obtendo pedaço do vídeo.', req.headers); let headers = _.chain(req.headers) .pick(req.headers, 'accept', 'accept-encoding', 'connection', 'range', 'user-agent') .value(); request(caminhoCompleto, { headers: headers, jar: true }) .pipe(res); } if (videoEstaAutenticado) { proxyVideo(); } else { console.info('Autenticando vídeo', {caminho}); request.get(caminhoCompleto, { auth: { user: process.env.UNIVERSIDADE_USER, pass: process.env.UNIVERSIDADE_PASS }, jar: true }) .on('response', response => { videoEstaAutenticado = true; proxyVideo(); }); } }); module.exports = router; 

一些额外的信息:我也尝试通过Apache静态地提供video服务; 它可以在本地访问,但如果我使用ngrok( https://ngrok.com/ )来访问它,则会发生完全相同的错误; 它看起来像FF有一些代理/隧道问题,或类似的东西。

video为MP4格式,内容types为video/mp4

这里有一些示例请求/响应头文件。

 Request URL: http://9e1f9fc2.ngrok.io/teste-temp/teste_1_digitacao.mp4 Status code: 200 OK Response headers (263 B) Accept-Ranges bytes Content-Length 23182123 Content-Type video/mp4 Date Tue, 12 Dec 2017 11:26:04 GMT ETag "161bb2b-55fbc97ec7340" Last-Modified Thu, 07 Dec 2017 09:21:30 GMT Server Apache/2.4.29 (Win32) OpenSSL/1.0.2l PHP/5.6.32 Request headers (421 B) Accept text/html,application/xhtml+xm…plication/xml;q=0.9,*/*;q=0.8 Accept-Encoding gzip, deflate Accept-Language pt-BR,pt;q=0.8,en-US;q=0.5,en;q=0.3 Connection keep-alive Cookie _ga=GA1.2.1214318081.1511440374 Host 9e1f9fc2.ngrok.io Upgrade-Insecure-Requests 1 User-Agent Mozilla/5.0 (Windows NT 10.0; …) Gecko/20100101 Firefox/57.0 === Request URL: http://9e1f9fc2.ngrok.io/teste-temp/teste_1_digitacao.mp4 Status code: 206 Partial Content Response headers (324 B) Accept-Ranges bytes Content-Length 20003627 Content-Range bytes 3178496-23182122/23182123 Content-Type video/mp4 Date Tue, 12 Dec 2017 11:26:08 GMT ETag "161bb2b-55fbc97ec7340" Last-Modified Thu, 07 Dec 2017 09:21:30 GMT Server Apache/2.4.29 (Win32) OpenSSL/1.0.2l PHP/5.6.32 Request headers (467 B) Accept video/webm,video/ogg,video/*;q…q=0.7,audio/*;q=0.6,*/*;q=0.5 Accept-Language pt-BR,pt;q=0.8,en-US;q=0.5,en;q=0.3 Connection keep-alive Cookie _ga=GA1.2.1214318081.1511440374 Host 9e1f9fc2.ngrok.io Range bytes=3178496- Referer http://9e1f9fc2.ngrok.io/teste-temp/teste_1_digitacao.mp4 User-Agent Mozilla/5.0 (Windows NT 10.0; …) Gecko/20100101 Firefox/57.0 === Request URL: http://9e1f9fc2.ngrok.io/teste-temp/teste_1_digitacao.mp4 Status code: 206 Partial Content Response headers (324 B) Accept-Ranges bytes Content-Length 20003627 Content-Range bytes 3178496-23182122/23182123 Content-Type video/mp4 Date Tue, 12 Dec 2017 11:26:09 GMT ETag "161bb2b-55fbc97ec7340" Last-Modified Thu, 07 Dec 2017 09:21:30 GMT Server Apache/2.4.29 (Win32) OpenSSL/1.0.2l PHP/5.6.32 Request headers (467 B) Accept video/webm,video/ogg,video/*;q…q=0.7,audio/*;q=0.6,*/*;q=0.5 Accept-Language pt-BR,pt;q=0.8,en-US;q=0.5,en;q=0.3 Connection keep-alive Cookie _ga=GA1.2.1214318081.1511440374 Host 9e1f9fc2.ngrok.io Range bytes=3178496- Referer http://9e1f9fc2.ngrok.io/teste-temp/teste_1_digitacao.mp4 User-Agent Mozilla/5.0 (Windows NT 10.0; …) Gecko/20100101 Firefox/57.0