Google Chrome中的videosearch:如何处理连续的部分内容请求?

这个问题可能有些压倒性的,但我觉得Google Chrome浏览器的videosearch方式很接近,但对我来说还是非常困惑,支持很难find。

如果我没有弄错,Chrome最初会发送一个范围字节为0的请求头,以testing服务器是否理解部分内容请求,并期望服务器以状态码206作为响应。

我已阅读以下答案以获得更好的理解:
需要更多的代表链接他们的主题是:
无法在chrome中查找html5video或audio
HTML5video不会循环播放
HTTP范围标题

我的服务器由Node.js支持,在播放过程中,我无法从chrome中获取连续的范围请求。 当请求一个video时,服务器接收到一个字节= 0,然后服务器回应状态码206,然后媒体播放器中断

我的疑惑是与响应头,因为我不知道如何构build我的响应头,并处理最终的范围请求:

  1. 我是否最初回答状态代码200206 ? 当我回应206我只接收字节= 0-,但是当我回应200我接收字节= 0-之后,字节= 355856504-。 如果我将video文件的总内容长度减去355856504,结果是58,字节= 0-58似乎是一个有效的内容范围? 但是,在这两个请求后,我没有收到来自Chrome的范围请求。

我也不确定响应头中的Content-Range应该看起来像“bytes = 0-58”还是像“bytes = 0-58 / 355856562”。

这是代码

if(req.headers.range) console.info(req.headers.range); // prints bytes=0- const type = rc.sync(media, 0, 32); // determines mime type const size = fs.statSync(media)["size"]; // determines content length // String range, initially "bytes=0-" according to Chrome var Strange = req.headers.range; res.set({ "Accept-Ranges": "bytes", "Content-Type": ft(type).mime, "Content-Length": size-Strange.replace(/bytes=/, "").split("-")[0], "Content-Range": Strange+size+"/"+size }); //res.status(206); // one request from chrome, then breaks res.status(200); // two requests from chrome, then breaks // this prints 35585604-58, whereas i expect something like 0-58 console.log("should serve range: "+ parseInt(Strange.replace(/bytes=/, "").split("-")[0]) +"-"+ parseInt(size-Strange.replace(/bytes=/, "").split("-")[0]) ); // this function reads some bytes from 'media', and then streams it: fs.createReadStream(media, { start: 0, end: parseInt(size-Strange.replace(/bytes=/, "").split("-")[0]) // 58 }).pipe(res); 

当状态码是200时,请求和响应标题的屏幕截图:
第一个响应和请求标题
第二个响应和请求标题

状态码为206时请求和响应标题的屏幕截图:
需要更多的代表,以显示另一个截图
基本上这个要求是:
“范围:字节= 0-”
而Content-Range响应是:
“字节= 0-355856562 / 355856562”

一个明显的错误是你在Range头部返回一个无效值。 请参阅0-355856561/355856562 – 它应该是0-355856561/355856562因为破折号之后的第二个值是最后一个字节位置,而不是长度。