ERR_CONTENT_LENGTH_MISMATCH при загрузке видео в Chrome

Поэтому я получаю эту ошибку, когда воспроизводится какое-то видео. Когда 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);

Извините за мой плохой английский.


person Alireza    schedule 14.02.2017    source источник
comment
У меня похожая проблема с Flask.   -  person Khanh Hua    schedule 30.07.2017


Ответы (1)


Я нашел проблему.

Я изменил $data = fread($file, $length); на $data = fread($file, $length + 1);.

Я не знаю, почему запрошенная длина должна быть плюс один, но это решило проблему.

person Alireza    schedule 30.08.2017
comment
может быть потому, что $matches[1] = $filesize - 1; ? - person Svetoslav Marinov; 21.03.2019