// Get the URL of the MJPEG stream to proxy if (isset($_GET['url'])) { $mjpegUrl = $_GET['url']; // Validate that the URL is a valid HTTP source if (filter_var($mjpegUrl, FILTER_VALIDATE_URL) && strpos($mjpegUrl, 'http://') === 0) { proxyMjpegStream($mjpegUrl); exit; } } // Invalid or missing MJPEG URL parameter header("HTTP/1.0 400 Bad Request"); echo "Invalid MJPEG URL";
这并不是问题的真正答案,Anas 已经涵盖了这一点,但无论如何还是值得一提,并且不适合在评论中。
编写这样的代码块时会遇到麻烦:
如果您继续将错误条件推迟到最后,并将非错误条件包含在
if(){}
块中,则会遇到两个问题。if(){}
块中,称为箭头反模式。您可以重新格式化:
致:
这不是一个一成不变的规则,但牢记它可以帮助避免编写脱节或混乱的代码块,或最终延伸到页面右侧的代码块。
经过一些研究后,您可以使用以下函数在curl中执行流:
并创建回调函数:
您的代码可以正常工作,但 30 秒后您的流将结束,因为您设置了
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
我对流 URL 的建议是使用
fopen()
因为 cURL 主要是为发出 HTTP 请求来获取静态内容而设计的。 MJPEG 流是动态的并且不断发送新帧。默认情况下,cURL 为每个请求设置了超时。如果服务器发送帧的时间较长,请求可能会超时,从而导致流中断或错误消息。
您可以使用
fopen()
函数以获得最佳体验。 这是使用流和 fopen 的示例。