想知道是否有办法阻止 PHP 输出的 mjpeg 流

问题描述

我正在通过 PHP 输出 MJPEG 流,因此该流的直接链接不会在网站上公开显示(我只是作为中间人链接到该文件)。 该代码有效,如下所示:

header('Content-type: video/x-motion-jpeg');
$server = "server.com";
$port = "8080";
$url = "/mjpg/Cam1/video.mjpg";
set_time_limit(30); // Doesn't affect the streaming timeout
$fp = fsockopen($server,$port,$errno,$errstr,30); // The timeout set here doesn't affect the streaming timeout
if (!$fp) {
    echo "$errstr ($errno)<br>\n";
} else {
    $urlstring = "GET ".$url." HTTP/1.0\r\n\r\n";
    fputs ($fp,$urlstring);
    while ($str = trim(fgets($fp,4096))){
        header($str);
    }
    fpassthru($fp);
    fclose($fp);
}

我想知道是否有办法在一段时间后(例如:5 分钟)终止此流(服务器端,而不是客户端)。 如果需要,我愿意使用不同的代码/功能,或者以不同的方式来解决这个问题。

解决方法

根据@Barmar 的建议,我编写了一个循环调用 fread() 并检查每次迭代中的时间,直到达到超时。到目前为止,它已经成功了。

代码如下:

$ ./bin/22bit
enter a 22-but signed number: -2097153
  error: value out of range for 22-bit.
enter a 22-but signed number: -2097152

valid 22-bit signed number: -2097152