>  Q&A  >  본문

PHP 프록시를 사용하여 https를 통해 http mjpg를 스트리밍하는 방법

<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>
P粉835428659P粉835428659435일 전509

모든 응답(2)나는 대답할 것이다

  • P粉588152636

    P粉5881526362023-09-04 15:45:35

    이것은 실제로 질문에 대한 답변이 아닙니다. Anas가 이미 이 내용을 다루었지만 어쨌든 언급할 가치가 있으며 댓글에는 적절하지 않습니다.

    다음과 같이 코드 블록을 작성하는 데 어려움이 있을 것입니다.

    으아악

    오류 조건을 끝까지 계속 연기하고 if(){}블록에 오류가 아닌 조건을 포함하면 두 가지 문제가 발생합니다.

    1. 오류를 유발하는 조건과 오류 메시지가 생성되는 위치의 연결이 점점 더 끊어지고 있습니다.
    2. '행복으로 가는 길' 코드는 if(){}화살표 안티패턴으로 알려진 중첩된 블록에 점점 더 깊이 묻혀 있습니다.

    다시 포맷할 수 있습니다:

    으아악

    받는 사람:

    으아악

    이것은 엄격하고 빠른 규칙은 아니지만 이를 명심하면 분리되거나 혼란스러운 코드 블록 또는 페이지 오른쪽으로 확장되는 코드 블록을 작성하는 것을 피하는 데 도움이 될 수 있습니다.

    회신하다
    0
  • P粉523625080

    P粉5236250802023-09-04 09:43:59

    몇 가지 조사 후에 다음 기능을 사용하여 컬에서 스트림을 실행할 수 있습니다.

    으아악

    콜백 함수를 생성합니다:

    으아악

    코드는 제대로 작동하지만 curl_setopt($ch, CURLOPT_TIMEOUT, 30);

    을 설정했기 때문에 30초 후에 스트림이 종료됩니다.

    스트리밍 URL에 대한 권장 사항은 fopen()을 사용하는 것입니다. cURL은 주로 정적 콘텐츠를 얻기 위해 HTTP 요청을 수행하도록 설계되었기 때문입니다. MJPEG 스트림은 동적이며 새 프레임이 지속적으로 전송됩니다.

    기본적으로 cURL은 각 요청에 대한 시간 초과를 설정합니다. 서버에서 프레임을 보내는 데 오랜 시간이 걸리면 요청 시간이 초과되어 스트림이 중단되거나 오류 메시지가 나타날 수 있습니다.

    fopen() 기능을 사용하여 최고의 경험을 얻을 수 있습니다. 다음은 스트림과 fopen을 사용한 예입니다.

    으아악

    회신하다
    0
  • 취소회신하다