Gå til innhold

[Løst] Script som henter bilde fra nettverks-kamera (mjpeg) og lagrer. Lagrer samme bilde i while!?


Anbefalte innlegg

Scriptet skal hente ett bilde (en frame) fra en mjpeg stream og lagre denne til cam.jpg og i en mappe for permanent lagring, siden dette scriptet kjøres hvert minutt som cron job skal scriptet kjøres 75 ganger (0.8 fps EDIT: 1.25 fps) for deretter å bli kjørt på nytt av cron.

 

<?php

function slaap($seconds)
{
		$seconds = abs($seconds);
		if ($seconds < 1):
             usleep($seconds*1000000);
		else:
             sleep($seconds);
		endif;   
} 

$i = 0;

echo "<ul>\n";
while($i <= 75) {

	$camurl="http://admin:**@**/img/video.mjpeg";
	$boundary="\n--";
	$f = fopen($camurl,"r");
	$path = "****";

	if($f) {
		while (substr_count($r,"Content-Length") != 2) $r.=fread($f,512);

		$start = strpos($r,'ÿ');
		$end   = strpos($r,$boundary,$start)-1;
		$frame = substr("$r",$start,$end - $start);

		$time = time();
		$date = date("Y-m-d");

		// Sjekker om datomappe finnes, hvis ikke opprett og chmod
		if(!file_exists("$path/save/$date")) { mkdir("$path/save/$date"); chmod("$path/save/$date", 0777); echo "<li>Opprettet mappe save/$date</li>\n"; }

		// Lagre for logg
		$fh1 = fopen("$path/save/$date/cam-$date-$time.jpg", "w");
		if(fwrite($fh1, $frame)) { echo "<li>Lagret save/$date/cam-$date-$time.jpg</li>\n"; }
		fclose($fh1);
		if(chmod("$path/save/$date/cam-$date-$time.jpg", 0777)) { echo "<li>Chmod save/$date/cam-$date-$time.jpg 0777</li>\n"; }

		// Lagre siste versjon
		$fh2 = fopen("$path/save/cam.jpg", "w");
		if(fwrite($fh2, $frame)) { echo "<li>Lagret cam.jpg</li>\n"; }
		fclose($fh2);
		if(chmod("$path/save/cam.jpg", 0777)) { echo "<li>Chmod cam.jpg 0777</li>\n"; }
	}

	fclose($f);

$i++;
slaap(0.8);
}
echo "</ul>\n";

?>

 

Det som nå skjer er at samme bildet blir lagret 75 ganger, så kjører cron scriptet på nytt, henter nytt bilde fra kameraet og lagrer dette bildet 75 ganger.

 

Er det noen som ser grunnen til at bildet ikke blir oppdatert fra kameraet inni while løkken?

Endret av Goggen90
Lenke til kommentar
Videoannonse
Annonse

Jeg anar det er pga. du aldri nullstiller $r i while løkken.

Hva skjer dersom du prøver å sette $r = '';helt i starten av while løkken?

Tusen takk, den hadde jeg oversett :)

 

Jeg skjønner ikke hvordan du får 75 bilder i løpet av ett minutt til å være 0.8 fps.

 

Blir det ikke 1.25?

60 sek / 0.8 fps = 75 stk

Lenke til kommentar

Jeg skjønner ikke hvordan du får 75 bilder i løpet av ett minutt til å være 0.8 fps.

 

Blir det ikke 1.25?

60 sek / 0.8 fps = 75 stk

Feil. I dette tilfellet skal du gange, ikke dele. Du har 0.8 bilder pr. sekund. For å få bilder pr. minutt må du gange 0.8 med 60. I løpet av et minutt får du altså 48 bilder.

Lenke til kommentar

Takk for det, semtex og Ernie. Dere har selfølgelig helt rett.

 

1.25 fps var det jeg ville ha, altså litt over 1 bilde pr sek :)

 

Scriptet venter 0.8 sekund mellom hver gang de henter bildet, da blir det 1.25 fps og 60 sek totalt (utenom tiden det tar for scriptet å kjøre).

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...