Gå til innhold
  • Bli medlem
Støtt hjemmeautomasjon.no!

RPI + MJPG-Streamer: for deg som har et USB webkamera liggende i en skuff


Anbefalte innlegg

Jeg ønsket å gjenbruke et Logitech C910 webkamera som jeg hadde liggende i en skuff på en Raspberry PI3  B+ som også brukes til andre “oppgaver”. Utfordringen var å finne en løsning som ikke brukte all prosessorkraften til PI’en for å dekode video fra webkamera. C910 komprimerer hvert JPG-bilde (ramme) før det overføres til datamaskinen over USB-koblingen. Ikke alle webkameraer støtter MJPG-formatet. I så fall må Raspberry Pi utføre kompresjon av bildene før de streames over HTTP og dette fører til at CPU går i taket og du vil før eller senere få problemer. Først testet jeg Motion som er lett å sette opp og kan også trigge ved bevegelse, men siden jeg bruker Blue Iris ønsket jeg kun å ha en stream fra webkamera som er koblet til RPI’en. Deretter testet jeg ffmpeg, men det virket for komplisert til mitt bruk. Både Motion of FFmpeg tok dessuten for mye prosessorkraft fra RPI’en til at det var brukbart. Etter mye Googling kom jeg over en “fork” av MJPG-Streamer og hvor installasjon har blitt godt dokumentert av Michel Deslierres. Fordelen med MJPG-Streamer er at den bruker veldig lite CPU!

 

Instruksjonen som jeg har laget er hentet fra dokumentasjon til Michel, er veldig forenklet og tar kun for seg hvordan du installerer MJPG-Streamer på en RPI, lager oppstartscript og setter LED på Logitech C910 til å være av ved å bruke uvcdynctrl. Om du har planer om å gjøre kamera tilgjengelig offentlig må/bør du som et minimum sikre det med brukernavn og passord. For å sette opp dette må du se i guiden til Michel Deslierres

 

Edit: installasjonen er gjort på Raspbian Stretch med desktop (kernel versjon 4.14.98-v7+)

 

Først sjekk om ditt webkamera støtter MJPG

~ $ v4l2-ctl --list-formats

Om du får dette resultatet er du “good to go”

Type        : Video Capture
Pixel Format: 'MJPG' (compressed)
Name        : Motion-JPEG

Installer MJPEG-Streamer

~ $ sudo apt-get install cmake libjpeg8-dev
~ $ wget https://github.com/jacksonliam/mjpg-streamer/archive/master.zip
~ $ unzip master.zip
~ $ cd mjp*g-*
~ $ cd mjpg-*
~ $ make
~ $ sudo make install
~ $ cd $home

Start mjpeg-streamer “manuelt” for å sjekke om det fungerer:

~ $ /usr/local/bin/mjpg_streamer -i "/usr/local/lib/mjpg-streamer/input_uvc.so -n -f 10 -r 1280x720" \
> -o "/usr/local/lib/mjpg-streamer/output_http.so -p 8085 -w /usr/local/share/mjpg-streamer/www"
MJPG Streamer Version.: 2.0
 i: Using V4L2 device.: /dev/video0
 i: Desired Resolution: 1280 x 720
 i: Frames Per Second.: 10
 i: Format............: JPEG
 i: TV-Norm...........: DEFAULT
 o: www-folder-path......: /usr/local/share/mjpg-streamer/www/
 o: HTTP TCP port........: 8085
 o: HTTP Listen Address..: (null)
 o: username:password....: disabled
 o: commands.............: enabled

Sjekk om du får opp streamen ved å starte VLC og legge inn http://ipadressetilrpi’en:8085/?action=stream i “Open Network stream”

 

Lag oppstartscript og starte mjpeg-streamer ved reboot

~ $ mkdir -p .local/bin
~ $ nano.local/bin/webcam-streamer

Legg inn følgende i fila:

#!/bin/bash

# adjust these 

INPUT_PLUGIN="/usr/local/lib/mjpg-streamer/input_uvc.so";
DEVICE="/dev/video0";
FRAMES="15";
RESOLUTION="1280x720";

OUTPUT_PLUGIN="/usr/local/lib/mjpg-streamer/output_http.so";
PORT="8085";

# the following are defaults and should not need to be changed
EXEC="/usr/local/bin/mjpg_streamer"
WEB_DIR="/usr/local/share/mjpg-streamer/www";


# mjgp_streamer often does not start on first try. Why ?
start_streamer(){
    for i in {1..5}    # try up to 5 times
    do
        ${EXEC} -b -i "${INPUT_PLUGIN} -n -d ${DEVICE} -f ${FRAMES} -r ${RESOLUTION}" -o "${OUTPUT_PLUGIN} -p ${PORT} -w ${WEB_DIR} ${CREDENTIALS}"  > /dev/null 2>&1
        sleep $((1+i)) # waiting progressively longer
        if pgrep mjpg_streamer > /dev/null
        then
          echo "mjpg_streamer started"
          return
        fi  
    done
    echo "could not start mjpg_streamer"
}


# Carry out specific functions when asked to by the system
case "$1" in
        start)
                if pgrep mjpg_streamer > /dev/null
                then
                    echo "mjpg_streamer already running"
                else
                    start_streamer
                fi
                ;;
        stop)
                if pgrep mjpg_streamer > /dev/null
                then
                    killall mjpg_streamer
                    echo "mjpg_streamer stopped"
                else
                    echo "mjpg_streamer is not running"
                fi
                ;;
        restart)
                if pgrep mjpg_streamer > /dev/null
                then
                    killall mjpg_streamer
                    echo "mjpg_streamer stopped"
                else
                    echo "mjpg_streamer is not running"
                fi    
                start_streamer
                ;;
        status)
                pid=`ps -A | grep mjpg_streamer | grep -v "grep" | grep -v mjpg_streamer. | awk '{print $1}' | head -n 1`
                if [ -n "$pid" ];
                then
                        echo "mjpg_streamer is running with pid ${pid}"
                        echo "mjpg_streamer was started with the following command line"
                        cat /proc/${pid}/cmdline ; echo ""
                else
                        echo "mjpg_streamer is not running"
                fi
                ;;
        *)
                echo "Usage: $0 {start|stop|restart|status}"
                exit 1
                ;;
esac
exit 0

Skriptet må gjøres kjørbart, og katalogen der den er plassert vil bli lagt til i “system path environment variable” ved å redigere den skjulte filen .profile i hjemmekatalogen

~ $ chmod +x .local/bin/webcam-streamer
~ $ mkdir -p .local/bin
~ $ nano .profile

# set PATH so it includes user's private .local/bin if it exists
if [ -d "$HOME/.local/bin" ] ; then
    PATH="$HOME/.local/bin:$PATH"
fi

Legg inn webcam-streamer scriptet i oppstart i crontab

~ $ crontab -e

Legg inn følgende helt i slutten av fila

# Start the webcam on reboot
@reboot /home/pi/.local/bin/webcam-streamer start && sleep 5 && /home/pi/.local/bin/webcam-streamer restart

EKSTRA: Skru av LED på Logitech C910 webkamera

 

Om du ønsker kan du også skru av det blå LED lyset på webkameraet. Denne instruksjonen er spesifikk for Logitech webkamera C910, men bør/skal også fungere på andre typer. Google for å se om du finne støtte for ditt webkamera.

~ $ sudo apt-get install uvcdynctrl
~ $ nano .local/bin/webcam-settings

Kopier og lim inn dette:

#!/bin/bash
/usr/bin/uvcdynctrl -c --addctrl=046d:0990
/usr/bin/uvcdynctrl --set='LED1 Mode' 0 # Turn off camera LED

Sett fila til å være kjørbar

~ $ chmod +x .local/bin/webcam-settings

Rediger crontab

~ $ crontab -e

Legg inn følgende etter linja med webcam-streamer slik at den starter 30 sekunder etter oppstart.

 
# Apply webcam settings
@reboot sleep 30 && /home/pi/.local/bin/webcam-settings

Du skal kunne se at det blå LED-lyset blir skrudd av 30 sekunder etter reboot.

Endret av toonwolf
lagt inn info om hvilket OS som det har blitt installert på
  • Like 2
  • Thanks 1
Lenke til kommentar
Del på andre sider

Bli med i samtalen

Du kan publisere innhold nå og registrere deg senere. Hvis du har en konto, logg inn nå for å poste med kontoen din.

Gjest
Skriv svar til emnet...

×   Du har limt inn tekst med formatering.   Lim inn uten formatering i stedet

  Du kan kun bruke opp til 75 smilefjes.

×   Lenken din har blitt bygget inn på siden automatisk.   Vis som en ordinær lenke i stedet

×   Tidligere tekst har blitt gjenopprettet.   Tøm tekstverktøy

×   Du kan ikke lime inn bilder direkte. Last opp eller legg inn bilder fra URL.

×
×
  • Opprett ny...

Viktig informasjon

Vi har plassert informasjonskapsler/cookies på din enhet for å gjøre denne siden bedre. Du kan justere dine innstillinger for informasjonskapsler, ellers vil vi anta at dette er ok for deg.