나는 JWPlayer에 파일을 제공하기 위해 PHP 스크립트를 사용하여 거머리가 URL을 받고 iPhone 및 Roku 앱에서 사용되는 것을 방지합니다. 그래서 나는 videoplay.php? id = myfile을 호출합니다. 출력은 mp4 비디오 스트림입니다. 파일은 일반적으로 200-500MB입니다.PHP에서 리소스 사용을 최적화하는 방법 readfile()
PHP 스크립트가 올바르게 작동하고 일부 조정을하면 초기 버전보다 훨씬 나은 성능을 발휘합니다. 그러나 그것은 자원 돼지입니다. 한 파일을 스트리밍 할 때 브라우저의 다른 창을 같은 웹 사이트의 다른 페이지로 열 수 없습니다 ... 현재 페이지의 소스를 표시 할 수도 없습니다. 플레이어에게 직접 URL을 제공하여 똑같은 동영상 파일을 재생할 경우 리소스가 문제가 없으며 동영상이 재생되는 동안 페이지의 소스를 볼 수 있으며 동일한 브라우저에서 동일한 웹 사이트에서 동시에 두 개의 동영상을 재생할 수 있습니다 (2 개의 다른 페이지에).
여기에 내 코드
// some code to query database and get the file url
//
$fh = fopen($filename, "rb") or die("Could not open movie\n");
while (!feof($fh) && connection_status() == 0)
{
print(fread($fh, 1024*8));
flush();
ob_flush();
usleep(10000);
}
fclose($fh);
내가 리소스 사용을 제한하려고하는 usleep를 추가하고 작동하지 않았다, 그러나 비디오는 빠르게로드 할 것 같다. 수면 시간을 오래 사용하면 (예 : 1/10 초) 동영상을로드하는 데 시간이 오래 걸릴 수 있습니다. 청크 크기를 1024 * 4에서 1024 * 16으로 변경하면 8kbyte는 비디오로드 시간이 가장 빠른 것 같습니다. 16kbyte는 더 많은 리소스를 사용하며 내 25MBit 연결을 최대한 활용합니다. 내 로컬 서버에서 동영상이 전혀로드되지 않습니다 (하지만 클라우드 서버의 원격 동영상은로드됩니다). 청크 크기를 1KB로 줄이면 자원 문제가 해결되지 않습니다.
내가 뭘 잘못하고 있니?
해당 페이지에서 세션을 사용합니까? 로드 중일 때 사이트의 다른 페이지를로드 할 수없는 세션 잠금 문제 일 수 있습니다. – Maerlyn
예, 세션을 사용합니다. 나는 그것을 닫으려고 노력할 것이다. –