나는 당황 스럽다. 해결할 수없는 문제가있다.PHP를 통해로드 할 때 Chrome에서 파일을 찾을 수없는 WebM 파일 (다른 브라우저가 작동 함)
PHP를 통해 WebM 파일을 제공하는 것은 새로운 세계에서는 새로운 것이 아니며 HTTP 206 부분 콘텐츠로 작업하는 방법조차 알고 있습니다. 하지만 어떤 이유로 크롬은 좋아하지 않습니다.
는 간단한 HTML5 비디오 재생/video/V00000006.webm
이 아파치에 PHP 파일을 다시 작성
<video width="640" height="360" poster="picture/preview/V00000006.jpg" controls="controls" preload>
<source type="video/webm" src="/video/V00000006.webm">
</video>
은 잘 재생됩니다. 하지만 크롬에서는 검색 바가 효과적이지 않습니다. 검색 바를 클릭하면 플레이어가 멈추고 페이지가 새로 고침 될 때까지 더 이상 재생되지 않습니다. Firefox가 제대로 처리합니다!
만약 /video/V00000006.webm
을 (를) 동일한 비디오의 링크로 변경하면 작동합니다. 나는 심지어 두 가지 버전 (PHP 사용 여부에 관계없이)의 네트워크 요청을 비교해 보았지만 첫 번째 요청에는 거의 차이가 없었지만 두 번째 요청은 PHP 제공 비디오에서 실패했습니다.
초기 요청 및 아파치 전달 비디오 파일에 대한 요청 추구 :
Request URL:http://mytestserver.net/movie1152x720.webm Request Method:GET Status Code:206 Partial Content Request Headers Accept:*/* Accept-Encoding:identity;q=1, *;q=0 Accept-Language:da-DK,da;q=0.8,en-US;q=0.6,en;q=0.4 Cache-Control:no-cache Connection:keep-alive Cookie:PHPSESSID=i562540rek172mnv3nk528acj0; userPassword=; userEmail= Host:mytestserver.net Pragma:no-cache Range:bytes=0- Referer:http://mytestserver.net/video.html User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.146 Safari/537.36 Response Headers Accept-Ranges:bytes Connection:close Content-Length:4446451 Content-Range:bytes 0-4446450/4446451 Content-Type:video/webm Date:Fri, 11 Apr 2014 13:07:30 GMT ETag:"d2d0027-43d8f3-b91417c0" Last-Modified:Fri, 11 Apr 2014 12:46:31 GMT Server:Apache/2.2.3 (CentOS) -- Request URL:http://mytestserver.net/movie1152x720.webm Request Method:GET Status Code:206 Partial Content Request Headers Accept:*/* Accept-Encoding:identity;q=1, *;q=0 Accept-Language:da-DK,da;q=0.8,en-US;q=0.6,en;q=0.4 Cache-Control:no-cache Connection:keep-alive Cookie:PHPSESSID=i562540rek172mnv3nk528acj0; userPassword=; userEmail= Host:mytestserver.net Pragma:no-cache Range:bytes=4445881- Referer:http://mytestserver.net/video.html User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.146 Safari/537.36 Response Headers Accept-Ranges:bytes Connection:close Content-Length:570 Content-Range:bytes 4445881-4446450/4446451 Content-Type:video/webm Date:Fri, 11 Apr 2014 13:09:02 GMT ETag:"d2d0027-43d8f3-b91417c0" Last-Modified:Fri, 11 Apr 2014 12:46:31 GMT Server:Apache/2.2.3 (CentOS)
초기 요청을하고 PHP - 스트리밍 비디오에 대한 요청 추구 :
Request URL:http://mytestserver.net/video/V00000006.webm Request Method:GET Status Code:206 Partial Content Request Headers Accept:*/* Accept-Encoding:identity;q=1, *;q=0 Accept-Language:da-DK,da;q=0.8,en-US;q=0.6,en;q=0.4 Cache-Control:no-cache Connection:keep-alive Cookie:PHPSESSID=i562540rek172mnv3nk528acj0; userPassword=; userEmail= Host:mytestserver.net Pragma:no-cache Range:bytes=0- Referer:http://mytestserver.net/video.html User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.146 Safari/537.36 Response Headers Accept-Ranges:bytes Cache-Control:no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Connection:close Content-Length:8566268 Content-Range:bytes 0-8566267/8566268 Content-Type:video/webm Date:Fri, 11 Apr 2014 13:31:27 GMT Expires:Thu, 19 Nov 1981 08:52:00 GMT Pragma:no-cache Server:Apache/2.2.3 (CentOS) X-Powered-By:PHP/5.3.27 -- Request URL:http://mytestserver.net/video/V00000006.webm Request Headers CAUTION: Provisional headers are shown. Accept-Encoding:identity;q=1, *;q=0 Cache-Control:no-cache Pragma:no-cache Range:bytes=4338314- Referer:http://mytestserver.net/video.html User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.146 Safari/537.36
공지 사항을 어떻게 두 번째 요청 완료되지 않음, 잠정 헤더가으로 표시됩니다.
나는 빈을 설정하고 첨부 파일 헤더를 사용하여, 미래로 설정하면 캐시 헤더을 변경 시도했다.
나는 서빙 코드로 많은 것을 둘러 보았지만, 최근에는 간단한 예를 들었다.
<?php
$path = 'test.webm';
$size=filesize($path);
[email protected]($path,'rb');
if(!$fm) {
header ("HTTP/1.0 404 Not Found");
die();
}
$begin=0;
$end = $size-1;
if(isset($_SERVER['HTTP_RANGE'])) {
if(preg_match('/bytes=\h*(\d+)-(\d*)[\D.*]?/i', $_SERVER['HTTP_RANGE'], $matches)) {
$begin=intval($matches[0]);
if(!empty($matches[1])) {
$end=intval($matches[1]);
}
}
}
if($begin>0||$end<$size)
header('HTTP/1.0 206 Partial Content');
else
header('HTTP/1.0 200 OK');
header("Content-Type: video/webm");
header('Accept-Ranges: bytes');
header('Content-Length:'.($end-$begin+1));
header("Content-Disposition: inline;");
header("Content-Range: bytes $begin-$end/$size");
header("Content-Transfer-Encoding: binary\n");
header('Connection: close');
ob_get_clean();
flush();
$f = fopen($path, 'r');
fseek($f, $offset);
$pos = 0;
$length = $end-$begin;
while($pos < $length)
{
$chunk = min($length-$pos, 1024);
echo fread($f, $chunk);
flush();
$pos += $chunk;
}
?>
PHP로 제공되는 비디오 URL을 브라우저에 직접 입력해도 HTML 페이지에 표시되는 것과 차이가 없습니다.
나는 누군가가 탐색이 효과가 없을 수있는 이유에 대한 답을 얻길 바랍니다. 의견이 있으면 알려줘.
감사합니다. 모두의 미래 참고로