我目前正在制作视频流服务,其中视频以每个大约1MB的块进行转码。 Firefox,Chrome和IE的HTML5播放器都尽力请求部分内容(通过将Range标头添加到他们的请求中)。不幸的是,大多数情况下这个标题看起来像这样:
Range:bytes=0-
我不想返回完整内容,但只返回1MB的内容,所以我将其归还:
Content-Range:bytes 0-1048575/5074944
现在Chrome完全接受了这一点,并且一直请求部分内容,直到达到总长度为止。但是Firefox只生成一个包含部分内容而不是完整内容的请求。 Firefox认为它是完整的内容,因此不会播放完整的视频,只是其中的一部分。我如何在Firefox中获得与Chrome中相同的行为?我尝试返回416 Range不满意但Chrome和Firefox似乎在收到此状态代码后请求。
答案 0 :(得分:1)
所以我终于放弃了这个并查看了Firefox的源代码。在Firefox收到的范围与预期不同的地方,开发人员会发出评论,询问在这种情况下该怎么做。该规范没有规定在这种情况下该做什么,所以Firefox选择什么都不做。 Chrome更有创意,并提出了开发人员认为最好的反应(这绝对是我想要的结果)。
好像我不是唯一一个遇到这个问题的人,否则我就不会得到提升。问题是:为了使Firefox纠正这个问题,我们需要对规范进行更改,我认为这几乎是不可能的。因此,我正在结束这个问题并将此帖标记为答案。
答案 1 :(得分:-1)
问题的答案'我如何在Firefox中获得与Chrome中相同的行为?'是升级到Firefox 57.0(昆腾)。此版本的Firefox(在我自己的服务器代码的测试中,对部分响应大小进行相同的限制)能够在视频播放时请求额外的部分内容,与Chrome和IE的方式非常相似。
话虽如此,如果我在视频中向后搜索,Firefox将播放新位置的部分内容(可能是使用该位置的缓存部分内容),但随后无法请求(或使用缓存)部分内容当缓冲内容耗尽时 - 而不是跳到最后。
看起来Firefox开发人员已经尝试解决了部分内容小于预期的问题,但在搜索和/或缓存方面却没有做到这一点。
我很想知道Firefox源代码中关于“做什么”的原始评论,找出实际完成的内容,并为Firefox开发人员提供适当的反馈。