Интерпретировать изображение, в котором ответ отправляется в формате «многочастный ответ — MultiPartBoundary» API камеры наблюдения

Я использую API камеры наблюдения, где он показывает живые изображения, а в документации говорится, что ответ представлен в формате ответа из нескольких частей, где каждому изображению JPEG предшествует тег «- MultiPartBoundary», и я не уверен, как интерпретировать возврат этих изображений в браузере.

<?php

$Cookie = (dirname(__FILE__) . "/cookie.txt");


/*
* PRIMEIRA REQUISIÇÃO, RECEBE O COOKIE PARA O DOMINIO
*/
$curl = curl_init();

curl_setopt($curl, CURLOPT_VERBOSE, true);
curl_setopt_array($curl, array(
CURLOPT_VERBOSE        => true,
CURLOPT_PORT           => '8000',
CURLOPT_URL            => 'http://camerasquadion.ddns.net:8000/mjpegstream.cgi',
CURLOPT_COOKIEJAR      => $Cookie,
CURLOPT_COOKIEFILE     => $Cookie,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING       => "",
CURLOPT_MAXREDIRS      => 10,
CURLOPT_TIMEOUT        => 20000,
CURLOPT_USERPWD        => "Admin:Quadion*1234",
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_HTTPAUTH       => CURLAUTH_BASIC,
CURLOPT_HTTP_VERSION   => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST  => "GET",
CURLOPT_HEADER         => true,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_FILETIME       => true,
CURLOPT_HTTPHEADER      => array(
"Content-Type: multipart/x-mixed-replace; boundary=MultiPartBoundary",
),
));


$responde  = curl_exec ($curl);

// Recupera o código HTTP retornado pela URL de destino
$httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);

curl_close($curl);




/*
* 2º Requisição, envio do cookie
*/
$ch = curl_init();

// Através da operação CURLOPT_COOKIEFILE estarei enviando meu COOKIE.
curl_setopt_array($ch, array(
CURLOPT_COOKIEFILE      => $Cookie,
CURLOPT_URL             => 'http://camerasquadion.ddns.net:8000/mjpegstream.cgi?camera=108801',
CURLOPT_RETURNTRANSFER  => true,
CURLOPT_HTTPHEADER      => array(
"Content-Type: multipart/x-mixed-replace; boundary=MultiPartBoundary",
),
));

$response = curl_exec ($ch);

// Recupera o código HTTP retornado pela URL de destino
$httpCode2 = curl_getinfo($ch, CURLINFO_HTTP_CODE);

curl_close($ch);

?>


<img src="data:image/jpg;base64,<?=base64_encode($response)?>">

0

Решение

Предполагая, что часть CURL вашего кода работает и получает правильный ответ в $ response.

CURLOPT_RETURNTRANSFER Параметр вернет не только тело ответа, но и заголовки http. Это нужно пропустить, чтобы получить ответ тела.

Тогда тело ответа представляет собой серию изображений, разделенных разделителем "- MultiPartBoundary", Вы должны разделить тело ответа, используя это, чтобы получить отдельные изображения.

list(,$responseBody) = explode("\r\n\r\n", $response, 2);

$images = explode("- MultiPartBoundary", $responseBody);

foreach ($images as $image) {
echo '<img src="data:image/jpg;base64,' . base64_encode(trim($image)) .'">';
}
0

Другие решения

Других решений пока нет …