Installationschritte des mjpg-streamers.
sudo apt-get -y update && sudo apt-get -y upgrade
sudo apt-get install build-essential libjpeg-dev imagemagick subversion libv4l-dev checkinstall
sudo modprobe bcm2835-v4l2
Sollte es hier zu Problemen kommen ist wahrscheinlich die Kamera nicht aktiviert. „sudo raspi-config“
raspistill -o /tmp/test.jpg
svn checkout svn://svn.code.sf.net/p/mjpg-streamer/code/ mjpg-streamer-code
cd mjpg-streamer-code/mjpg-streamer
Als nächstes erstellen wir einen Patch.
Diesen Inhalt per Drag and Drop einfügen.
--- plugins/input_uvc/input_uvc.c (revision 174)
+++ plugins/input_uvc/input_uvc.c (working copy)
@@ -405,9 +405,13 @@
if(pcontext->videoIn->formatIn == V4L2_PIX_FMT_YUYV) {
DBG("compressing frame from input: %d\n", (int)pcontext->id);
pglobal->in[pcontext->id].size = compress_yuyv_to_jpeg(pcontext->videoIn, pglobal->in[pcontext->id].buf, pcontext->videoIn->framesizeIn, gquality);
+ /* copy this frame's timestamp to user space */
+ pglobal->in[pcontext->id].timestamp = pcontext->videoIn->buf.timestamp;
} else {
DBG("copying frame from input: %d\n", (int)pcontext->id);
- pglobal->in[pcontext->id].size = memcpy_picture(pglobal->in[pcontext->id].buf, pcontext->videoIn->tmpbuffer, pcontext->videoIn->buf.bytesused);
+ pglobal->in[pcontext->id].size = memcpy_picture(pglobal->in[pcontext->id].buf, pcontext->videoIn->tmpbuffer, pcontext->videoIn->tmpbytesused);
+ /* copy this frame's timestamp to user space */
+ pglobal->in[pcontext->id].timestamp = pcontext->videoIn->tmptimestamp;
}
#if 0
@@ -418,8 +422,6 @@
prev_size = global->size;
#endif
- /* copy this frame's timestamp to user space */
- pglobal->in[pcontext->id].timestamp = pcontext->videoIn->buf.timestamp;
/* signal fresh_frame */
pthread_cond_broadcast(&pglobal->in[pcontext->id].db_update);
Index: plugins/input_uvc/v4l2uvc.c
===================================================================
--- plugins/input_uvc/v4l2uvc.c (revision 174)
+++ plugins/input_uvc/v4l2uvc.c (working copy)
@@ -450,6 +450,8 @@
*/
memcpy(vd->tmpbuffer, vd->mem[vd->buf.index], vd->buf.bytesused);
+ vd->tmpbytesused = vd->buf.bytesused;
+ vd->tmptimestamp = vd->buf.timestamp;
if(debug)
fprintf(stderr, "bytes in used %d \n", vd->buf.bytesused);
Index: plugins/input_uvc/v4l2uvc.h
===================================================================
--- plugins/input_uvc/v4l2uvc.h (revision 174)
+++ plugins/input_uvc/v4l2uvc.h (working copy)
@@ -28,6 +28,7 @@
#include <stdio.h>
+#include <stdint.h>
#include <string.h>
#include <fcntl.h>
#include <unistd.h>
@@ -105,6 +106,8 @@
int framecount;
int recordstart;
int recordtime;
+ uint32_t tmpbytesused;
+ struct timeval tmptimestamp;
};
/* context of each camera thread */
Alles anzeigen
Wir führen anschließend diese Befehle aus und verlassen danach das Verzeichnis wieder.
patch -p0 < input_uvc_patch
make USE_LIBV4L2=true clean all
sudo make DESTDIR=/usr/local install
cd
Nun geben wir folgendes ein, nur um zu schauen das auch alles richtig installiert wurde.
Hier dürfen keine Fehlermeldungen erscheinen.
Jetzt kann der Streamer gestartet werden, mit folgendem Befehl:
mjpg_streamer -i "/usr/local/lib/input_uvc.so -d /dev/video0 -n -r 1024x768 -f 24 –q 80" -o "/usr/local/lib/output_http.so -n -w /usr/local/www -p 9000"
Hier wird ein kleiner Webserver gestartet der unter Deiner Adresse des raspberypi zu erreichen ist aber mit der Port Nummer 9000.
Bsp.:
192.168.178.200:9000
Man kann den Stream natürlich auch noch zusätzlich in eine Datei leiten zb. so:
mjpg_streamer -i "/usr/local/lib/input_uvc.so -d /dev/video0 -n -r 1024x768 -f 24 –q 80" -o "/usr/local/lib/output_http.so -n -w /usr/local/www -p 9000" -o "/usr/local/lib/output_file.so -f /backup/record-video -d 15000"
Hier wird der Stream in den Ordner /backup/record-video abgelegt.
Man kann auch die Parameter verändern zb. die Auflösung (Parameter -r) bzw. die Frames (Parameter -f) und die Quality (Parameter -q)
Es gibt noch mehr Parameter doch hier verweise ich auf folgende Web Seite: Dokumentation
Die Hilfe zu allen Plugins kann mit
aufgerufen werden.
Wenn man den mjpg_streamer beim booten automatisch gestartet haben möchte der sollte folgende Datei anlegen:
Mit diesem Inhalt.
#!/bin/sh
# /etc/init.d/mjpg_streamer
### BEGIN INIT INFO
# Provides: mjpg_streamer
# Required-Start: $all
# Required-Stop: $all
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: MJPG_Streamer_autostart
### END INIT INFO
start()
{
modprobe bcm2835-v4l2
sleep:2
echo "Starting mjpg-streamer..."
/usr/local/bin/mjpg_streamer -i "/usr/local/lib/input_uvc.so -d /dev/video0 -n -r 1024x768 -f 24 –q 80" -o "/usr/local/lib/output_http.so -n -w /usr/local/www -p 9000" >/dev/null 2>&1 &
}
stop()
{
echo "Stopping mjpg-streamer..."
kill -9 $(pidof mjpg_streamer) >/dev/null 2>&1
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
*)
echo "Usage: $0 {start|stop|restart}"
;;
esac
exit 0
Alles anzeigen
Mit diesem Befehl wird die eben erstellte Autostart-Datei in den Autostart eingetragen:
Danach kannst Du es bequem per:
starten.
Beenden kannst Du es mit: