PHP 프록시를 사용하여 https를 통해 http mjpg를 스트리밍하는 방법
P粉835428659
2023-09-03 20:54:13
<p>HTTP를 통해 mjpg 스트림을 로드하고 HTTPS를 통해 출력하는 PHP 스크립트가 있습니다. 그러나 생성되는 것은 손상된 이미지뿐입니다. </p>
<pre class="brush:php;toolbar:false;"><?php
함수 ProxyMjpegStream($url) {
$ch = 컬_init($url);
컬_setopt($ch, CURLOPT_HEADER, false);
컬_setopt($ch, CURLOPT_RETURNTRANSFER, true);
컬_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
컬_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
컬_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
컬_setopt($ch, CURLOPT_TIMEOUT, 30);
컬_setopt($ch, CURLOPT_BUFFERSIZE, 8192);
header("Content-Type: multipart/x-mixed-replace; 경계=myboundary");
컬_exec($ch);
컬_닫기($ch);
}
// 프록시할 MJPEG 스트림의 URL을 가져옵니다.
if (isset($_GET['url'])) {
$mjpegUrl = $_GET['url'];
// URL이 유효한 HTTP 소스인지 확인합니다.
if (filter_var($mjpegUrl, FILTER_VALIDATE_URL) && strpos($mjpegUrl, 'http://') === 0) {
ProxyMjpegStream($mjpegUrl);
출구;
}
}
// MJPEG URL 매개변수가 잘못되었거나 누락되었습니다.
header("HTTP/1.0 400 잘못된 요청");
echo "잘못된 MJPEG URL";
?></pre></p>
이것은 실제로 질문에 대한 답변이 아닙니다. Anas가 이미 이 내용을 다루었지만 어쨌든 언급할 가치가 있으며 댓글에는 적절하지 않습니다.
다음과 같이 코드 블록을 작성하는 데 어려움이 있을 것입니다.
으아악오류 조건을 끝까지 계속 연기하고
if(){}
블록에 오류가 아닌 조건을 포함하면 두 가지 문제가 발생합니다.if(){}
화살표 안티패턴으로 알려진 중첩된 블록에 점점 더 깊이 묻혀 있습니다.다시 포맷할 수 있습니다:
으아악받는 사람:
으아악이것은 엄격하고 빠른 규칙은 아니지만 이를 명심하면 분리되거나 혼란스러운 코드 블록 또는 페이지 오른쪽으로 확장되는 코드 블록을 작성하는 것을 피하는 데 도움이 될 수 있습니다.
몇 가지 조사 후에 다음 기능을 사용하여 컬에서 스트림을 실행할 수 있습니다.
으아악콜백 함수를 생성합니다:
으아악코드는 제대로 작동하지만
을 설정했기 때문에 30초 후에 스트림이 종료됩니다.curl_setopt($ch, CURLOPT_TIMEOUT, 30);
스트리밍 URL에 대한 권장 사항은
fopen()
을 사용하는 것입니다. cURL은 주로 정적 콘텐츠를 얻기 위해 HTTP 요청을 수행하도록 설계되었기 때문입니다. MJPEG 스트림은 동적이며 새 프레임이 지속적으로 전송됩니다.기본적으로 cURL은 각 요청에 대한 시간 초과를 설정합니다. 서버에서 프레임을 보내는 데 오랜 시간이 걸리면 요청 시간이 초과되어 스트림이 중단되거나 오류 메시지가 나타날 수 있습니다.
fopen()
기능을 사용하여 최고의 경험을 얻을 수 있습니다. 다음은 스트림과 fopen을 사용한 예입니다.