在 php 中从 Mjpeg 流中获取帧

gap*_*311 1 php frame mjpeg

我正在尝试从 PHP 中的 Mjpeg 流中获取帧。我尝试过文件读取来读取文件,然后根据标头获取帧。但我做不到。我可以看到文件中存在标头,但是当使用 exif_read_data 查找标头是否存在时,它显示没有标头。我获取帧的代码是:

function grab_frame($url) {
 $f = fopen($url, 'r'); //6,168
 if($f) {
    $r = null;
    while(substr_count($r, "Content-Length")!= 5){ 
        $r.= fread($f,40000000);            
        $start = strpos($img,'F1');
        $end   = strpos($img,'F2');
       $frame  = substr($r, $start, $end);
    }   
    fclose($f);
    return $frame; 
 }
} 
Run Code Online (Sandbox Code Playgroud)

我想使用内容长度标头来查找帧长度,然后获取整个帧数据,然后再次循环以查找下一帧。

小智 5

读取 mjpeg raw 直至完成。

<?php

$camurl="http://admin:pazz@192.168.137.252:80/getimage"; // Mjpeg URL

$f = fopen($camurl, "r");
$r = "";

if($f) {
    // unless 1 frame raw read.
    while (substr_count($r, "\xFF\xD8")<2) $r.=fread($f, 8192);
}

// clip frame out raw
$start = strpos($r, "\xFF\xD8");
$end = strpos($r, "\xFF\xD9", $start)+2;
$frame = substr($r, $start, $end-$start);

Header("Content-type: image/jpeg");
echo $frame;

?>
Run Code Online (Sandbox Code Playgroud)