HTML5视频 ERR_CONTENT_LENGTH_MISMATCH

12
我在使用HTML5视频标签和谷歌Chrome浏览器查看mp4文件时遇到了问题。视频开始播放得很好,时间轴上的不同位置跳转也没问题。
然而,如果我长时间观看视频,就会出现ERR_CONTENT_LENGTH_MISMATCH错误。我发现几乎每次当浏览器下载了124MB(仅一次为252MB)的视频时都会出现这个问题。无论我是从视频的开头观看还是跳到某个时间点开始观看,它都会停在124MB处。似乎无论我使用哪个视频文件也不会改变这种情况。
我使用的HTML代码非常基本:
<video width="1280" height="720" controls>
    <source src="videos/testvid.mp4" type="video/mp4">
</video>

2
你检查过视频文件的完整性了吗?如果没问题,那么可能是服务器出了问题。确保服务器完全支持恢复/分块传输。 - DankMemes
感谢回复。我试过的视频文件都没问题,所以我猜想是服务器配置出了问题。我对服务器配置不是很有经验。我应该查找什么?我正在运行最新的XAMPP和Apache 2.4.9。我已经看到Apache应该默认支持范围请求(这很重要)。视频文件的响应头部为206部分内容,这表明它应该在某种程度上正确地工作。我应该检查什么? - user3519183
检查内容长度、请求字节数等。你主要需要查看请求头。 - Jessie A. Morris
你检测到问题了吗?你能分享一下你的问题源吗?我也遇到了类似的问题,但只能随机重现。 - Matyas
同样的问题。有几个解决方案被提到了。 http://serverfault.com/questions/482875/nginx-removes-content-length-header-for-chunked-content/627460 - Buzut
1个回答

2
每当浏览器从文件中获取的字节数超过 Content-Length HTTP 响应头报告的字节数时,就会出现 ERR_CONTENT_LENGTH_MISMATCH。
关于 Apache 和大文件的问题有一些 bug,涉及到压缩(gzip)和 Content-Length 头。
我们已经设置了 Apache 对大多数 Web 内容进行 gzip 压缩,以便通过更小的文件大小使文件传输更快。这对于 HTML 文件、CSS 和 JS 文件非常有效,但对于二进制文件(如图像和媒体文件或 PDF 文件)可能会导致问题。对于 PDF 文件,问题在于 Acrobat 无法读取已经被 gzip 压缩的 PDF 文件,因此必须关闭它们的压缩。

Source: http://www.beetlebrow.co.uk/what-do-you-need/help-and-documentation/unix-tricks-and-information/apache-gzip-compression-and-binary-files

<Location />
SetOutputFilter DEFLATE
SetEnvIfNoCase Request_URI  \
    \.(?:gif|jpe?g|png)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI  \
    \.(?:mp3|wav|wma|au|m4p|snd|mid|wmv|mpg|mpeg|mp4|qt|mov)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI \.pdf$ no-gzip dont-vary
SetEnvIfNoCase Request_URI  \
    \.(?:exe|t?gz|zip|gz2|sit|rar)$ no-gzip dont-vary
</Location>

解决方案是禁用某些文件类型(例如*.mp4)的压缩,使用这样的规则:

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接