Articole similare

PiEye - streaming webcam in format M-JPG cu Raspberry Pi

pieye live videopieye

Cu o camera web ieftina ce se conecteaza pe USB se poate face streaming video in doar cativa pasi simpli, cu ajutorul unui Raspberry PI. Simplitatea solutiei provine de la tehnologiile folosite pentru streaming-ul efectiv. Totul se intampla peste HTTP, un protocol omniprezent si extrem de accesibil in zilele noastre.

Practic, pe Raspberry PI ruleaza un mini-server web ce serveste informatia video sub forma unui fisier M-JPG (Motion Jpeg, mai multe informatii aici). Pe scurt, un M-JPG este de fapt un set de imagini JPG ce se succed intocmai ca si cadrele unui film. Avantajul M-JPG-urilor este faptul ca nu necesita plugin-uri sau extensii ale browser-elor pentru redarea acestora. Un simplu element HTML de tip IMG, avand dimensiunile dorite si atributul source setat catre M-JPG-ul servit va fi suficient pentru a reda imaginea in cadrul unei pagini web.

Intreaga solutie are la baza aplicatia server mjpg-streamer a carei pagina se gaseste aici. Programul a fost scris de catre Tom Stöveken si este licentiat GPLv2. Am compilat si am pregatit o varianta a acestui program pentru Raspberry PI. Destul cu vorba, haideti sa vedem care sunt pasii pentru a obtine un streaming video simplu si eficient in cateva minute:

  1. Asigurati-va ca aveti o versiune actualizata a sistemului de operare de pe Raspberry PI.
  2. Instalati pachetul libv4l-0, disponibil in distributia Raspbian: sudo aptitude install libv4l-0.
  3. Conectati camera web la USB-ul dispozitivului. Presupunem aici ca ati achizitionat o camera web compatibila cu Linux; pentru a verifica acest lucru, vedeti daca pe Raspberry PI a aparut fisierul /dev/video0. In caz contrar, camera web nu are un driver pentru Linux sau necesita ajustari suplimentare pentru a functiona - acest subiect nu e tratat de articolul de fata.
  4. Descarcati arhiva mjpg-streamer-rpi.tar.gz pe Raspberry PI si dezarhivati-o. Directorul destinatie nu e relevant, iar solutia nu necesita drepturi de root, atata timp cat lucrati sub utilizatorul implicit pi. Intrati in directorul mjpg-streamer, acolo unde ati dezarhivat tar.gz-ul.
  5. Deschideti fisierul mjpg-streamer.sh; acesta e un simplu script bash ce controleaza mini-serverul web. In partea de sus sunt cateva variabile ce pot fi ajustate, precum rata de cadre sau rezolutia. Varianta implicita a fisierului ar trebui sa fie adecvata in majoritatea cazurilor.
  6. Porniti serverul, executand ./mjpg-streamer.sh start in directorul curent.
  7. Daca totul a decurs bine, lansati browser-ul preferat si tastati http://raspberrypi:8080/?action=stream (unde raspberrypi e adresa dispozitivului) ar trebui sa vedeti imaginea captata de camera web. Versiunea actuala de Chrome are o problema la redatul direct al acestor fisiere M-JPG; incercati FireFox, daca imaginea nu se improspateaza.
  8. Daca sistemul nu functioneaza, inspectati fisierul mjpg-streamer.log unde mini-serverul isi pastreaza log-ul.

 

Pentru cei fara experienta in linux, vezi mai jos succesiunea de comenzi (instalare,download,redenumire,dezarhivare,configurare,rulare):

sudo aptitude install libv4l-0
ls /dev/video0
wget http://www.bobtech.ro/get?download=36:mjpg-streamer-rpi
mv get\?download\=36\:mjpg-streamer-rpi mjpg-streamer-rpi.tar.gz
tar -zxvf mjpg-streamer-rpi.tar.gz
cd mjpg-streamer
sudo nano mjpg-streamer.sh
./mjpg-streamer.sh start

 

Modificare parametri video

Pentru a controla parametri video trebuie sa instalezi v4l2-ctl, care permite afisarea valorii curente a parametrilor si modificarea lor:

sudo apt-get install v4l-utils
v4l2-ctl --list-ctrls
v4l2-ctl --set-ctrl brightness=200
v4l2-ctl --set-ctrl saturation=32

 

Live Demo

pieye live video

Am pus camera web sa faca video streaming live din acvariu la 5fps. Plantele se misca de la jetul pompei de apa, din cand in cand mai apare cate un peste sau crevete.

Folosind formatul M-JPG poti sa incluzi video live in orice pagina web doar cu un simplu tag img:

<img src="http://raspberrypi:8080/?action=stream" />

Download

UPDATE: 12-11-2012
  • restart automat dupa 3s daca apare eroarea "error grabing frames"
UPDATE: 30-10-2012
  • adaugat optiune YUV pentru camere web care nu suporta protocolul MJPG (implicit dezactivata; daca se activeaza, conversia in format MJPG nu se mai face direct in camera web, ci se foloseste procesorul lui Raspberry Pi )
  • 6 buc Rasbora Rasbora (Trigonostigma heteromorpha)
UPDATE: 08-10-2012
  • reparat bug sa nu mai crash-uie (acum ar trebui sa fie online permanent)
UPDATE: 06-10-2012
  • autorestart la oprirea procesului
  • toti clientii serviti se logeaza in mjpg-streamer.log
  • suport pentru mai multe camere web (trebuie copiat script-ul in mai multe fisiere)
  • mesaje la pornire/oprire, exit code-uri care sa poata fi intepretate din alt program/script
  • 2 buc Corydoras Nanus
  • 4 buc Cherry Shrimp (Neocaridina heteropoda)

comentarii

  • sumache

    Super cool, o sa-mi pun si eu acasa doua!
    Sunt curios daca se pot arhiva imaginile pe NAS-ul synology.

    2012-10-25 09:34:21

    Raspunde

  • sumache

    L-am facut sa mearga, doar ca webcam-ul Logitech C615 se focalizeaza bine doar pana la 1,5m. O sa-i pun o lentila de ochelari cu -1 dioptrii sa se vada clar si mai departe in casa.

    2012-11-03 20:29:49

    Raspunde

  • alex

    superr... merge perfect si se comporta foarte bine....ff bun tutorialul si de folos..celor care nu le merge recomand sa incerce si cu alte camere....;)

    2012-12-12 20:08:51

    Raspunde

  • Dan

    Foarte interesant proiect!! Felicitari!

    O sa imi iau un Raspberry PI curand si o sa incerc cu singuranta acest proiect.

    Imi puteti recomanda un webcam pentru acest proiect? Am un Chicony DC-5110 B dar nu stiu daca e bun. Sau recomandati-mi un webcam cheap&dirty cam s-ar zice :)

    2012-12-16 14:43:39

    Raspunde

    • Radu

      Pentru video de pe aceasta pagina folosesc o camera web Logitech C210, care suporta protocolul MJPG.
      Am mai testat camera web Gembird CAM28U, dar functioneaza numai cu optiunea YUV activata (nu suporta MJPG) si camera web Genius iLook 310, dar nu functioneaza deloc pe RasPi (pe PC este OK).

      2012-12-23 19:07:54

      Raspunde

  • thanos f

    Hi,
    can this software be used with a usb microscope? I am planning to buy one to connect to my Pi to see images with high resolution e.g. when soldering. should i buy a specific microscope with a specific chipset or specification?
    Thank you

    2012-12-24 16:01:45

    Raspunde

    • Radu

      Yes it can, but it's main purpose is to stream video over internet, so in your case it wouldn't make sense. Just use a standard video player for Linux and you will have HDMI output: http://lifehacker.com/5866656/the-best-video-player-for-linux

      2012-12-27 09:00:05

      Raspunde

  • redmund

    failed to start.

    this the log:

    ./mjpg-streamer.sh: line 40: ./mjpg_streamer: cannot execute binary file



    anybody can help me??what is line 40==>>OUTPUT_OPTIONS="-p ${PORT} -w www"
    ?? what will be solutions??
    please help

    2013-01-06 19:18:54

    Raspunde

    • Radu

      you have to make the script executable, like this http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_02_01.html

      2013-01-08 00:20:29

      Raspunde

  • Dumitru

    Nu inteleg de ce cei de la Raspbian nu au pus in main repo acest pachet de mjpg_streamer. Pana si pe OpenWRT este si mergea pe router fara probleme, evident, la un framerate mai mic, avand in vedere puterea de procesare.

    O chestie legata de mjpg-streamer. Acesta stie user si parola, altfel spus, credentials, in cazul cand vrei sa scoti camera "outside of the LAN", prin port forwarding, de ex.

    "- c username:parola" adaugati la parametrii de output rezolva problema. Se paote schimba si portul pe care sa ruleze webserver-ul de streaming cu "-p port" la fel, in sectiunea de parametri de output.

    Cheers,

    2013-01-17 22:52:35

    Raspunde

  • cross

    i followed the post as it is but what im getting is a green screen when i try to stream with any browser and even in vlc...so you have any idea why this is happening.....?????

    2013-01-26 15:01:35

    Raspunde

    • Radu

      Enable/disable YUV parameter, lower resolution and/or framerate.
      It's also very possible that your camera isn't compatible.

      2013-01-26 16:33:40

      Raspunde

  • cross

    yeah i checkede and and tried with YUV=true bue same still the same problem....????

    2013-02-01 16:17:48

    Raspunde

    • Radu

      then the camera is not compatible :(

      2013-02-01 16:44:10

      Raspunde

  • Sebi

    Se poate face strimul si cu sunet?

    2013-02-03 18:29:30

    Raspunde

  • Eros Nicolau

    Salut,
    Lucrez la un proiect care printre altele are nevoie sa vada remote (printr-un browser) ce vede DSLR-ul - dar in acelasi timp sa si transmita aparatului foto oarece comenzi/setari. Crezi ca ma poti contacta, pe mail (ai adresa, acum) si sa ne auzim la un telefon zilele astea, ca sa ma sfatuiesc un pic cu tine?

    2013-02-14 01:19:03

    Raspunde

  • calvarr

    Aplicatia super ok, multumesc.
    Folosesc raspberry-pi B, cu Microsoft LifeCam
    Idei:
    - dupa ce porneste serverul sa fie afisata in CLI adresa de stream cu care te poti conecta;
    - posibilitatea de stream pe adresa externa:
    (am vazut mai sus un comentariu ca mjpeg-streamer stie sa o faca inclusiv in mod securizat)
    In prezent fac stream extern, nesecurizat in felul urmator:
    - deschid portul TCP in router sau/si firewall;
    - verific daca acesta este deschis:
    $ telnet adresa_externa 8080
    - redirectionez prin tunelizare ssh portul:
    $ ssh nume@adresaexterna -R 8080:127.0.0.1:8080
    - conectare:
    webbrowser http://adresaexterna:8080/?action=stream

    Lucrez la un proiect care foloseste ffserver, sper sa reusesc si eu ceva.

    2013-02-20 12:49:45

    Raspunde

  • vlad

    Care ar fi rezolutia maxima suportata de un raspberry pi, folosind un singur webcam cu rezolutie mare sau mai multe cu rezolutii mai mici?

    2013-03-26 06:47:55

    Raspunde

  • John

    libv41-0 seems not available on the standard immage from the Raspberry PI?

    I recieve the message nopackage will be installed!

    John

    2013-04-09 16:07:21

    Raspunde

  • ciprian

    Am urmat pasii indicati si functioneaza foarte bine.
    Am schimbat din 4 fps in 15 fps si a functionat ca atare.
    Am incercat sa schimb rezolutia in 800x600 dar a ramas tot la 640x480. Cred ca asta este rezolutia maxima a webcam-ului cu care am lucrat. Nu-i bai. Bun si 640x480.
    As vrea totusi sa pot accesa stream-ul si din alte locatii, in afara casei. Raspberry este conectat wireless la router (ASUS WL-530G); documentatia routerului este aici:
    http://ro.asus.com/Networks/Wireless_Routers/WL530g/#download
    Marea mea rugaminte este sa imi spuneti cum ar trebui sa configurez routerului astfel incat sa pot accesa stream-ul din orice locatie (cu acces la internet bine-nteles :) )
    Multumesc anticipat!

    Ciprian

    2013-04-29 23:33:45

    Raspunde

    • ciprian

      gata, s-a rezolvat :D

      2013-04-30 23:23:37

      Raspunde

  • ciprian2

    salut ciprian
    ca sa poti sa accesezi webcam-ul din afara instaleza pe raspberry
    http://www.stuffaboutcode.com/2012/06/raspberry-pi-access-from-internet-using.html

    si iti faci cont pe: http://www.noip.com/ si iti creezi un subdomeniu....eu am facut si am reusit din prima ... o seara buna

    2013-04-29 23:45:34

    Raspunde

    • Radu

      Scuze Ciprian2 ca am activat comentariul tau prea tarziu, a fost pus automat in spam din motive necunoscute :)
      Ciprian (1), in articolul cu Pimotique e descris un alt mod cum poti sa faci asta. Nu e chiar pt routerul tau, dar vad ca te-ai descurcat pana la urma.

      2013-05-01 10:37:50

      Raspunde

  • George

    Salut,

    Foarte bun tutorial dar as aprecia daca cineva mi-ar da un sfat legat de problema pe care o intampin.
    Webcam-ul este un Delux : http://www.ro.all.biz/webcam-delux-dlv-b01-g1234 si vad ca se aprinde led-ul odata ce rulez scriptul dar nu reusesc sa obtin o imagine cand accesez url-ul.
    M-am gandit ca ar putea fi din cauza alimentarii, dar vreau sa stiu si de la voi daca e necesar un hub usb alimentat pentru asa ceva ?

    Va multumesc.

    2013-06-04 18:17:16

    Raspunde

    • George

      Am uitat sa atasez log-ul generat - nu-mi dau seama care ar fi problema :
      http://pastebin.com/uPPfYwzy

      Si desigur camera e detectata corect si nu pare a fi problema de driver : /dev/video0 .

      2013-06-04 18:27:07

      Raspunde

      • George

        Am rezolvat, era ceva de la mine... Multumesc foarte mult pentru ghid, e explicat foarte bine.

        La mai multe pe viitor :D

        2013-06-04 19:05:52

        Raspunde

  • johnny

    la mine nu merge:( nu poate sa dezarhiveze, iar daca dau wget http://www.bobtech.ro/get?download=36:mjpg-streamer-rpi da eroare

    HTTP request sent, awaiting response... 501 Not Implemented
    2013-06-04 17:31:26 ERROR 501: Not Implemented.

    2013-06-04 20:37:58

    Raspunde

    • George

      Asa am patit si eu asa ca l-am downloadat de aici si uploadat pe dropbox la mine si am folosit linkul ala. Nu pot sa iti dau share la link ca nu am voie dar poti sa incerci si tu asa, pana repara autorul...

      2013-06-05 15:11:30

      Raspunde

    • Radu

      Am facut un link direct pentru download aici:
      http://www.bobtech.ro/download/mjpg-streamer-rpi

      Te rog verifica daca functioneaza.
      La mine merge si link-ul existent, nu stiu de ce nu merge la voi, dar n-am timp sa fac debug acum.

      2013-06-05 17:38:51

      Raspunde

    • Radu

      Ai copiat toate comenzile din scritpul de mai sus ?
      Vezi ca dupa download, redenumesc fisierul care incepe cu ?...
      si apoi i-l dezarhivez.

      2013-06-05 17:43:05

      Raspunde

      • johnny

        imi apare error 501 "not implemented" oricare din link-uri l-as folosi

        2013-06-06 17:39:43

        Raspunde

  • Raspunsul final

    Se calculeaza supa aceasta formula
    Vin/Vout = R1/R2

    2013-12-12 09:52:17

    Raspunde

  • Ovidiu

    Am incercat cu 4 weburi diferite "failed to start", care oate fi problema?

    2014-02-02 10:56:03

    Raspunde

    • Ovidiu

      Am reusit sa o pornesc dar "The image cannot be displayed because it contains errors", stie careva unde e problema?

      2014-02-02 11:55:29

      Raspunde