在 chrome 中加载视频时出现 ERR_CONTENT_LENGTH_MISMATCH

Posted

技术标签:

【中文标题】在 chrome 中加载视频时出现 ERR_CONTENT_LENGTH_MISMATCH【英文标题】:ERR_CONTENT_LENGTH_MISMATCH when loading video in chrome 【发布时间】:2017-07-02 20:22:02 【问题描述】:

所以在播放某些视频时出现此错误。当 Chrome 完全下载视频时,它会停止播放并出现此错误。请求的状态也从 206 更改为(失败),然后 Chrome 发送一些带有 Range:bytes=2990775- 的其他请求,服务器响应为:

Accept-Ranges:bytes
Cache-Control:private
Connection:keep-alive
Content-Disposition:attachment; filename="About The Author.mp4"
Content-Length:0
Content-Range:bytes 2990775-2990775/2990776
Content-Transfer-Encoding:binary
Content-Type:video/mp4
Date:Tue, 14 Feb 2017 13:46:24 GMT
Last-Modified:Wed, 08 Feb 2017 05:43:27 GMT
Pragma:public
Server:Apache/2
Vary:User-Agent
X-Powered-By:php/5.4.45

我在同一台服务器上有另一个网站,它在那里运行良好。

这是我的 PHP 代码:

        $filesize = filesize($resource->path);

        $matches = explode("-", substr($_SERVER['HTTP_RANGE'],6));
        if (empty($matches[1]))
        
            $matches[1] = $filesize - 1;
        

        $offset = intval($matches[0]);
        $length = intval($matches[1]) - $offset;

        $file = fopen($resource->path, 'r');

        fseek($file, $offset);

        $data = fread($file, $length);
        fclose($file);

        header('HTTP/1.1 206 Partial Content');
        header('Content-Range: bytes ' . $offset . '-' . ($offset + $length) . '/' . $filesize);

        header('Pragma: public');   
        header('Last-Modified: '.gmdate ('D, d M Y H:i:s', filemtime ($resource->path)).' GMT');
        header('Cache-Control: private',false);
        header('Content-Type: ' . $mime);
        header('Content-Length: ' . ($length + 1));
        header('Content-Disposition: attachment; filename="' . $resource->filename . '"');
        header('Content-Transfer-Encoding: binary');
        header('Accept-Ranges: bytes');

        print($data);

对不起,我的英语不好。

【问题讨论】:

Flask 也有类似的问题。 【参考方案1】:

我找到了问题。

我将$data = fread($file, $length); 更改为$data = fread($file, $length + 1);

我不知道为什么请求的长度应该加一,但它解决了问题。

【讨论】:

可能是因为 $matches[1] = $filesize - 1; ?

以上是关于在 chrome 中加载视频时出现 ERR_CONTENT_LENGTH_MISMATCH的主要内容,如果未能解决你的问题,请参考以下文章

当 HTML5 在 IE11-Invalid Source 和 Safari-Missing Plugin 中加载视频时出现问题

在 Monogame 中加载内容时出现 ArgumentNullException

在 django 开发中加载静态文件时出现 404 错误

跨源视频无法在 Chrome 中加载

在新 viewController 中加载 UIWebView 时出现 HTTP 错误 -999

在 AsyncTack 中加载位图时出现问题