问题描述
我正在通过 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