Как отключить буферизацию вывода в PHP

Я написал простой сценарий ретрансляции, который подключается к веб-камере, читает из сокета и выводит эти данные с помощью функции печати. Это данные MJPG с уже установленными границами. Я просто выводю прочитанные данные.

Проблема в том, что PHP буферизует эти данные. Когда я устанавливаю камеру на 1 кадр / с, поток будет зависать на 7-8 секунд, а затем быстро отобразить 8 кадров. Если я установлю большое разрешение, камера будет двигаться со скоростью более или менее 1 кадра в секунду. Я предполагаю, что тогда происходит некоторая буферизация (поскольку большие размеры заполняют буфер быстро, а маленькие - нет), и я не могу понять, как отключить эту буферизацию. Кто-нибудь знает, как это сделать?

Код:

ignore_user_abort(false);

$boundary = "myboundary";

//Set this so PHP doesn't timeout during a long stream
set_time_limit(0);

$socketConn = @fsockopen ("192.168.1.6", 1989, $errno, $errstr, 2);
if (!$socketConn)
exit();
stream_set_timeout($socketConn, 10);
fputs ($socketConn, "GET /mjpeg HTTP/1.0\r\n\r\n");

//Setup Header Information
header("Cache-Control: no-cache");
header("Cache-Control: private");
header("Pragma: no-cache");
header("Content-type: multipart/x-mixed-replace; boundary=$boundary");

@ini_set('implicit_flush', 1);
for ($i = 0; $i < ob_get_level(); $i++)
ob_end_flush();
ob_implicit_flush(1);

stream_set_blocking($f2, false);

//Send data to client
while (connection_status() == CONNECTION_NORMAL)
{
    $chunk = fread($socketConn, 128);
    print $chunk;   
}

fclose($socketConn);
30
задан Ioncannon 16 January 2012 в 17:12
поделиться