Moduł kamery dla Raspberry Pi powala nie tylko nagrywać wideo, czy robić zdjęcia, ale również na strumieniowanie obrazu do sieci. Wysyłanie obrazu z Raspberry Pi możliwe jest na kilka sposobów, ale dziś pokażemy jak streamować obraz za pomocą przystosowanej aplikacji mjpg-streamer dla Raspberry Pi.

Instalujemy bibliotekę libjpeg oraz pakiet cmake:

sudo apt-get install libjpeg62-dev cmake

Klonujemy projekt git mjpg-streamer z obsługą modułu kamery z Raspberry Pi:

git clone https://github.com/jacksonliam/mjpg-streamer.git ~/mjpg-streamer

Przechodzimy do katalogu mjpg-streamer-experimental:

cd ~/mjpg-streamer/mjpg-streamer-experimental

Używamy wersji eksperymentalnej, która działa lepiej niżeli wersja stabilna. Obraz jest płynny i nie ma problemów z większa ilościa klatek.

Kompilujemy projekt:

make clean all

Po poprawnym skompilowaniu, możemy już skopiować aplikację do katalogu /opt:

sudo mv ~/mjpg-streamer/mjpg-streamer-experimental /opt/mjpg-streamer

Możemy odpalić streaming obrazu używając polecenia

LD_LIBRARY_PATH=/opt/mjpg-streamer/ /opt/mjpg-streamer/mjpg_streamer -i "input_raspicam.so -fps 15 -q 50 -x 640 -y 480" -o "output_http.so -p 9000 -w /opt/mjpg-streamer/www"

a następnie przejść do adresu ip_maliny:9000. Polecenie uruchamia aplikację do streamowania obrazu z kamery z rodzielczością 640×480 używając przy tym 15 klatek oraz jakość obrazu ustawiony na 50%. Wartosci te możemy sobie zmieniać wg potrzeb.

Możemy stworzyć sobie skrypty, które będa uruchamiać i zatrzymywać aplikację.

#!/bin/bash

if pgrep mjpg_streamer > /dev/null
then
  echo "mjpg_streamer already running"
else
  LD_LIBRARY_PATH=/opt/mjpg-streamer/ /opt/mjpg-streamer/mjpg_streamer -i "input_raspicam.so -fps 15 -q 50 -x 640 -y 480" -o "output_http.so -p 9000 -w /opt/mjpg-streamer/www" > /dev/null 2>&1&
  echo "mjpg_streamer started"
fi

Skryp zatrzymujący strumieniowanie:

#!/bin/bash

if pgrep mjpg_streamer
then
  kill $(pgrep mjpg_streamer) > /dev/null 2>&1
  echo "mjpg_streamer stopped"
else
  echo "mjpg_streamer not running"
fi

Powyższego oprogramowania można użyć np. do monitorowania drukarki 3D.

  • kszere

    W skrypcie zatrzymującym:
    if pgrep mjpg_streamer

    Jak sprawdzać inne uruchomione polecenia działające w tle np. screen lub po prostu “polecenie&”?

    • Cyryl

      if pgrep screen
      if pgrep program

    • kszere

      Screen może uruchamiac wiele poleceń na raz. Jak to sprawdzić np. na podstawie nazwy z parametru screen -dmS nazwa polecenie
      ?

    • Cyryl

      polecał bym ci najpierw sprawdzenie pid-a screen -r a dopiero killowanie po nim danego procesu
      W takich sprawach pisz na forum

  • kszere

    W skrypcie zatrzymującym:
    if pgrep mjpg_streamer

    Jak sprawdzać inne uruchomione polecenia działające w tle np. screen lub po prostu “polecenie&”?

    • Cyryl

      if pgrep screen
      if pgrep program

    • kszere

      Screen może uruchamiac wiele poleceń na raz. Jak to sprawdzić np. na podstawie nazwy z parametru screen -dmS nazwa polecenie
      ?

    • Cyryl

      polecał bym ci najpierw sprawdzenie pid-a screen -r a dopiero killowanie po nim danego procesu
      W takich sprawach pisz na forum