PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Frage zu kleinem raspberry projekt



Elektrohexe
02.06.2015, 17:44
hallo,

ich fang ma gleich an....

habe hier nen raspberry auf dem ein lighttpt server läuft, nun will ich per webseite (per .cgi) auf nen button klicken,
der mir dann mit ffmpeg ein bild von einer netzwerkkamera speichert.
wie ich mit ffmpeg ein bild mache weiß ich aber nun will ich diesen befehl mit dem button ausführen.
Habe gesagt bekommen das ich dafür javascript benutzen muss...

hat vll. jmd ein codebeispiel ?

mfg elektrohexe

H4x0r007
02.06.2015, 21:01
Hi,

wenn du nur ein Programm auf dem Pi ausführen möchtest, ist es wahrscheinlich am einfachsten, PHP zu verwenden. Es gibt den Befehl system() (http://php.net/manual/en/function.system.php), mit dem du Tools ausführen kannst. Wenn du die Ausgabe von ffmpeg auswerten möchtest, ist proc_open() (http://php.net/manual/en/function.proc-open.php) wohl das Mittel der Wahl.

Damit ich das richtig verstehe: Du willst auf auf einen Button klicken und dann im Browser ein Bild angezeigt bekommen? Du könntest auch per cronjob einfach pauschal alle paar Sekunden ein Bild (ggf. im RAM) speichern. Wenn du das Bild dann als z.B. current.jpg im docroot ablegst, kannst du einfach per HTTP darauf zugreifen. Das wäre vermutlich die einfachste Möglichkeit.

Elektrohexe
02.06.2015, 21:33
ja sowas in der art habe ich auch schon gefunden...
muss es aber mit einer .cgi machen die das zeile für zeile im im terminal ausgeführt wird. also mit echo'.... :-/
bzw. ich bin net der beste in den websprachen :P

IRET
02.06.2015, 22:48
Ein Button ist nur der Befehl eine Form abzusenden (POST/GET). Natürlich beinhaltet er auch Daten, das ist für dich aber nicht wichtig.
http://www.cgi101.com/book/ch4/text.html
Da steht alles drin was du brauchst.

Hu5eL
03.06.2015, 09:51
ja sowas in der art habe ich auch schon gefunden...
muss es aber mit einer .cgi machen die das zeile für zeile im im terminal ausgeführt wird. also mit echo'.... :-/
bzw. ich bin net der beste in den websprachen :P
könntest auch ein bash-script schreiben, und das per php aufrufen... bist nicht an cgi gebunden...

Elektrohexe
03.06.2015, 18:32
also ich muss es so machen wie ich gesagt habe ^^

habe hier den code wo ich ein bischen am rumspielen bin vll. kann mir da wer weiterhelfen :)


die cgi:

#!/bin/bash


echo -ne 'content-type: text/html\n\n'
# HTML-Header
echo '<html><head>'
#echo '<script src="jquery-1.11.3.min.js"></script>'
#echo '<script src="script.js"></script>'
echo '</head><body bgcolor=black text=white>'

#read querystring
#echo "QS: $QUERY_STRING <br>"
#echo "stdin: $querystring <br>"
#if [ $querystring != "" ] ; then
#ffmpeg -i rtsp://admin:9999@192.168.10.135:554/onvif/profile2/media.smp -f image2 /home/pi/testimg.jpg
#echo 'hallo'
#fi
#echo '<button type="button">Click Me!</button>'
#echo '<button type="button" id="bildmachen">Bild machen</button>'

#ffmpeg -i rtsp://admin:9999@192.168.10.135:554/onvif/profile2/media.smp -f image2 /home/pi/testimg.jpg

ffmpeg -i rtsp://admin:9999@192.168.1.13:554/onvif/profile2/media.smp -f image2 /var/www/kamera/testimg.jpg
echo '<img src="/kamera/testimg.jpg" width="1080" height="720" alt="Bild">'
echo '<button type="button" onclick="<?php
echo exec('ffmpeg -i rtsp://admin:9999@192.168.1.13:554/onvif/profile2/media.smp -f image2 /var/www/kamera/testimg.jpg');
?>
">test</button>'


echo '</body></html>'


und das javascript:


$( document ).ready (function() {
console.log( "ready!" );
$('#bildmachen').click (function() {
console.log( "click");
var jqxhr = $.post( "hallo.cgi", function() {
command: "ffmpeg -i rtsp://217.146.95.166:554/playlist/ch27yqcif.3gp -f image2 /home/pi/testimg.jpg"
console.log( "success");
})
.done(function() {
console.log( "second success" );
})
.fail(function() {
console.log( "error" );
})
.always(function() {
console.log( "finished" );
})

});
});

H4x0r007
08.06.2015, 10:56
Ich glaube, ich habe noch ein Bash-CGI Skript gesehen^^ Normales CGI wird eigentlich gar nicht mehr verwendet, sondern wurde fast vollständig durch Fastcgi oder wsgi ersetzt.





echo '<button type="button" onclick="<?php
echo exec('ffmpeg -i rtsp://admin:9999@192.168.1.13:554/onvif/profile2/media.smp -f image2 /var/www/kamera/testimg.jpg');
?>


Du verwendest ja schon Teile aus PHP, warum machst du nicht einfach alles mit PHP und lässt CGI komplett raus? Mal ganz abgesehen davon, dass onclick für Javascript und nicht für PHP gedacht ist. Beim Parsen würde der PHP-Teil in jedem Fall ausgeführt werden.

In PHP könnte man es z.B. so machen. Habe das vorhin nur schnell im Editor geschrieben und nicht getestet:


<html><head>
<script src=...>
</head>

<body>

<form method="GET" target=<?=$_SERVER["PHP_SELF"]>
<input type="submit" name="submit" value="Click">
<input type="submit" name="submit" value="Bild machen">
</form>

<?php
if(isset($_GET["submit"])) {
if($_GET["submit"] == "Click") {
//...
} else {
echo "Bild wird erstellt<br>";
exec("/usr/bin/ffmpeg -i rtsp://admin:9999@192.168.1.13:554/onvif/profile2/media.smp -f image2 /var/www/kamera/testimg.jpg");
echo '<img src="/kamera/testimg.jpg" width="1080" height="720" alt="Bild">';
}
}
?>

</body>
</html>

Damit sparst du dir den Umweg über CGI und verwendest direkt den PHP Interpreter, der auch FastCGI kann.